Subversion Repositories HomeAutomation

Rev

Rev 453 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Collections;
  7. using System.IO;
  8.  
  9. public class DaemonConnection {
  10.     private TcpClient tc;
  11.     private bool running;
  12. //  private string host;
  13. //  private int port;
  14.     private NetworkStream ns;
  15.    
  16.     const byte DEBUG_LEVEL = 2; //0, 1, 2, 3
  17.    
  18.     private Queue canPackets = Queue.Synchronized(new Queue());
  19.    
  20.     public DaemonConnection() {
  21.     }
  22.    
  23.     public void flushData() {
  24.         canPackets.Clear();
  25.     }
  26.    
  27.     public bool init(string host, int port) {
  28.         //connect
  29.         bool success = false;
  30.         try {
  31.             tc = new TcpClient();
  32.             tc.Connect(host, port);
  33.             ns = tc.GetStream();
  34.             Console.WriteLine("Connected to host " + host + " on port " + port);
  35.             success = true;
  36.             running = true;
  37.            
  38.             Thread t = new Thread(thread);
  39.             t.Start();
  40.            
  41.         } catch {
  42.             Console.WriteLine("Unknown error when connecting to host " + host + " on port " + port);
  43.         }
  44.         return success;
  45.     }
  46.  
  47.     public bool getData(out CanPacket cp) {
  48.         cp = null;
  49.         if (canPackets.Count>0) {
  50.             cp = (CanPacket)canPackets.Dequeue();
  51.             return true;
  52.         }
  53.         return false;
  54.     }
  55.    
  56.     public void thread() {
  57.         byte[] data = new byte[1024];
  58.         int recv;
  59.         while (running) {
  60.             Thread.Sleep(1);
  61.             //Console.Write(".");
  62.             if (ns.DataAvailable) {
  63.                 recv = ns.Read(data, 0, data.Length);
  64.                 if (recv == 0)
  65.                     break;
  66.                
  67.                 string tcpdata = Encoding.ASCII.GetString(data, 0, recv);
  68.                 string [] split = null;
  69.                 split = tcpdata.Split( '\n' );
  70.                 for (int i = 0; i < split.Length; i++)
  71.                 {
  72.                     if (split[i].Trim().Length>3) {
  73.                         CanPacket cp = new CanPacket(split[i].Trim().Substring(4));
  74.                         canPackets.Enqueue(cp);
  75.                         //Console.WriteLine(cp.toRawString());
  76.                     }
  77.                 }
  78.             }
  79.         }
  80.        
  81.         ns.Close();
  82.         tc.Close();
  83.     }
  84.    
  85.     public void stop() {
  86.         running = false;
  87.     }
  88.    
  89.     public void sendCanPacket(CanPacket cp) {
  90.         if (running) {
  91.             try {
  92.                 byte[] data = new byte[1024];
  93.                
  94.                 data = Encoding.ASCII.GetBytes(cp.toRawString()+"\n");
  95.                 ns.Write(data, 0, data.Length);
  96.             }
  97.             catch (Exception) {
  98.                 Console.WriteLine("Unknown error occured when trying to send data to host");
  99.                 running = false;
  100.             }
  101.         }
  102.     }
  103.  
  104. }
  105.