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.                 if (tcpdata.Length>3) {
  69.                     CanPacket cp = new CanPacket(tcpdata.Substring(4));
  70.                     canPackets.Enqueue(cp);
  71.                     //Console.WriteLine(cp.toRawString());
  72.                 }
  73.             }
  74.         }
  75.        
  76.         ns.Close();
  77.         tc.Close();
  78.     }
  79.    
  80.     public void stop() {
  81.         running = false;
  82.     }
  83.    
  84.     public void sendCanPacket(CanPacket cp) {
  85.         if (running) {
  86.             try {
  87.                 byte[] data = new byte[1024];
  88.                
  89.                 data = Encoding.ASCII.GetBytes(cp.toRawString()+"\n");
  90.                 ns.Write(data, 0, data.Length);
  91.             }
  92.             catch (Exception) {
  93.                 Console.WriteLine("Unknown error occured when trying to send data to host");
  94.                 running = false;
  95.             }
  96.         }
  97.     }
  98.  
  99. }
  100.