Subversion Repositories HomeAutomation

Rev

Rev 453 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

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