Subversion Repositories HomeAutomation

Rev

Rev 983 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 983 Rev 984
Line 20... Line 20...
20
 ***************************************************************************/
20
 ***************************************************************************/
21
 
21
 
22
#include "socketthread.h"
22
#include "socketthread.h"
23
#include "virtualmachine.h"
23
#include "virtualmachine.h"
24
 
24
 
25
SocketThread::SocketThread(string address, int port, unsigned int reconnectTimeout)
25
SocketThread::SocketThread(string address, unsigned int port, unsigned int reconnectTimeout)
26
{
26
{
27
    myId = time(NULL);
27
    myId = time(NULL);
28
 
28
 
29
    mySocket = new AsyncSocket();
29
    mySocket = new AsyncSocket();
30
 
30
 
31
    mySocket->setAddress(address, port);
31
    mySocket->setAddress(address);
-
 
32
    mySocket->setPort(port);
32
    mySocket->setReconnectTimeout(reconnectTimeout);
33
    mySocket->setReconnectTimeout(reconnectTimeout);
33
 
-
 
34
    Thread<SocketThread>();
-
 
35
}
34
}
36
 
35
 
37
SocketThread::~SocketThread()
36
SocketThread::~SocketThread()
38
{
37
{
39
    if (!stop())
38
    if (!stop())
40
    {
39
    {
41
        cout << "~SocketThread() :: Failed to stop thread :: Error code is " + itos(getError()) + "\n";
40
        cout << "~SocketThread() :: Failed to stop thread :: Error code is " + itos(getError()) + "\n";
42
 
41
 
43
    }
42
    }
44
    else
43
/*  else
45
    {
44
    {
46
    //  cout << "~SocketThread() :: Successfully stopped thread\n";
45
        cout << "~SocketThread() :: Successfully stopped thread\n";
47
    }
46
    }*/
48
    delete mySocket;
47
    delete mySocket;
49
}
48
}
50
 
49
 
51
void SocketThread::run()
50
void SocketThread::run()
52
{
51
{
53
    //SyslogStream &slog = SyslogStream::getInstance();
-
 
54
    VirtualMachine &vm = VirtualMachine::getInstance();
52
    VirtualMachine &vm = VirtualMachine::getInstance();
55
 
53
 
56
    mySocket->start();
54
    mySocket->start();
57
 
55
 
58
    mySocket->startEvent();
56
    mySocket->eventStartListen();
59
 
57
 
60
    while (1)
58
    while (true)
61
    {
59
    {
62
        mySocket->waitForEvent();
60
        mySocket->eventWait();
63
 
61
 
64
        while (mySocket->availableEvent())
62
        while (mySocket->eventIsAvailable())
65
        {
63
        {
66
            int event = mySocket->getEvent();
64
            SocketEvent socketEvent = mySocket->eventFetch();
67
 
65
 
68
            if (event == ASYNCSOCKET_EVENT_DATA)
66
            switch (socketEvent.getType())
69
            {
67
            {
70
                while (mySocket->availableData())
68
                case SocketEvent::TYPE_CONNECTED:
-
 
69
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTED', '" + escape(socketEvent.getData()) + "');");
71
                {
70
                break;
-
 
71
 
72
                    string data = mySocket->getData();
72
                case SocketEvent::TYPE_CONNECTING:
73
                    vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'EVENT_DATA', '" + escape(data) + "');");
73
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTING', '" + escape(socketEvent.getData()) + "');");
74
                }
74
                break;
75
            }
75
 
76
            else if (event == ASYNCSOCKET_EVENT_CONNECTED)
76
                case SocketEvent::TYPE_CONNECTION_CLOSED:
-
 
77
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CLOSED', '" + escape(socketEvent.getData()) + "');");
77
            {
78
                break;
-
 
79
 
-
 
80
                case SocketEvent::TYPE_CONNECTION_DIED:
78
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'EVENT_CONNECTED', '');");
81
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'DIED', '" + escape(socketEvent.getData()) + "');");
79
            }
82
                break;
-
 
83
 
80
            else if (event == ASYNCSOCKET_EVENT_CLOSED)
84
                case SocketEvent::TYPE_CONNECTION_RESET:
81
            {
-
 
82
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'EVENT_CLOSED', '');");
85
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'RESET', '" + escape(socketEvent.getData()) + "');");
83
            }
86
                break;
-
 
87
 
84
            else if (event == ASYNCSOCKET_EVENT_DIED)
88
                case SocketEvent::TYPE_CONNECTION_FAILED:
-
 
89
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTION_FAILED', '" + escape(socketEvent.getData()) + "');");
85
            {
90
                break;
-
 
91
 
-
 
92
                case SocketEvent::TYPE_DATA:
86
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'EVENT_DIED', '');");
93
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'DATA', '" + escape(socketEvent.getData()) + "');");
87
                break;
94
                break;
88
            }
95
 
89
            else if (event == ASYNCSOCKET_EVENT_RESET)
96
                case SocketEvent::TYPE_INACTIVITY:
-
 
97
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'INACTIVITY', '" + escape(socketEvent.getData()) + "');");
90
            {
98
 
-
 
99
                case SocketEvent::TYPE_WAITING_RECONNECT:
91
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'EVENT_RESET', '');");
100
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'WAITING_RECONNECT', '" + escape(socketEvent.getData()) + "');");
92
                break;
101
                break;
93
            }
-
 
94
            else if (event == ASYNCSOCKET_EVENT_INACTIVITY)
-
 
95
            {
-
 
96
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'EVENT_INACTIVITY', '');");
-
 
97
            }
-
 
98
        }
102
            }
99
    }
103
        }
-
 
104
    }
100
 
105
 
101
    mySocket->stopEvent();
106
    mySocket->eventStopListen();
102
}
107
}
103
 
108
 
104
void SocketThread::send(string data)
109
void SocketThread::send(string data)
105
{
110
{
106
 
-
 
107
    mySocket->sendData(data);
111
    mySocket->sendData(data);
108
}
112
}
109
 
113