Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed
using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Collections;using System.IO;public class DaemonConnection {private TcpClient tc;private bool running;private string host;private int port;private NetworkStream ns;const byte DEBUG_LEVEL = 2; //0, 1, 2, 3private Queue canPackets = Queue.Synchronized(new Queue());public DaemonConnection() {}public void flushData() {canPackets.Clear();}public bool init(string host, int port) {//connectbool success = false;try {tc = new TcpClient();tc.Connect(host, port);ns = tc.GetStream();Console.WriteLine("Connected to host " + host + " on port " + port);success = true;running = true;Thread t = new Thread(thread);t.Start();} catch {Console.WriteLine("Unknown error when connecting to host " + host + " on port " + port);}return success;}public bool getData(out CanPacket cp) {cp = null;if (canPackets.Count>0) {cp = (CanPacket)canPackets.Dequeue();return true;}return false;}public void thread() {byte[] data = new byte[1024];int recv;while (running) {Thread.Sleep(20);//Console.Write(".");if (ns.DataAvailable) {recv = ns.Read(data, 0, data.Length);if (recv == 0)break;string tcpdata = Encoding.ASCII.GetString(data, 0, recv);if (tcpdata.Length>3) {CanPacket cp = new CanPacket(tcpdata.Substring(4));canPackets.Enqueue(cp);//Console.WriteLine(cp.toRawString());}}}ns.Close();tc.Close();}public void stop() {running = false;}public void sendCanPacket(CanPacket cp) {if (running) {try {byte[] data = new byte[1024];data = Encoding.ASCII.GetBytes(cp.toRawString()+"\n");ns.Write(data, 0, data.Length);}catch (Exception) {Console.WriteLine("Unknown error occured when trying to send data to host");running = false;}}}}