Subversion Repositories HomeAutomation

Rev

Rev 1026 | Rev 1213 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1026 Rev 1203
1
/***************************************************************************
1
/***************************************************************************
2
 *   Copyright (C) December 26, 2008 by Mattias Runge                             *
2
 *   Copyright (C) December 26, 2008 by Mattias Runge                             *
3
 *   mattias@runge.se                                                      *
3
 *   mattias@runge.se                                                      *
4
 *   socketthread.cpp                                            *
4
 *   socketthread.cpp                                            *
5
 *                                                                         *
5
 *                                                                         *
6
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   This program is free software; you can redistribute it and/or modify  *
7
 *   it under the terms of the GNU General Public License as published by  *
7
 *   it under the terms of the GNU General Public License as published by  *
8
 *   the Free Software Foundation; either version 2 of the License, or     *
8
 *   the Free Software Foundation; either version 2 of the License, or     *
9
 *   (at your option) any later version.                                   *
9
 *   (at your option) any later version.                                   *
10
 *                                                                         *
10
 *                                                                         *
11
 *   This program is distributed in the hope that it will be useful,       *
11
 *   This program is distributed in the hope that it will be useful,       *
12
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
13
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
14
 *   GNU General Public License for more details.                          *
14
 *   GNU General Public License for more details.                          *
15
 *                                                                         *
15
 *                                                                         *
16
 *   You should have received a copy of the GNU General Public License     *
16
 *   You should have received a copy of the GNU General Public License     *
17
 *   along with this program; if not, write to the                         *
17
 *   along with this program; if not, write to the                         *
18
 *   Free Software Foundation, Inc.,                                       *
18
 *   Free Software Foundation, Inc.,                                       *
19
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
20
 ***************************************************************************/
20
 ***************************************************************************/
21
 
21
 
22
#include "socketthread.h"
22
#include "socketthread.h"
23
#include "virtualmachine.h"
23
#include "virtualmachine.h"
-
 
24
 
-
 
25
unsigned long int SocketThread::myCount = 0;
-
 
26
Mutex SocketThread::myCountMutex;
24
 
27
 
25
SocketThread::SocketThread(string address, unsigned int port, unsigned int reconnectTimeout)
28
SocketThread::SocketThread(string address, unsigned int port, unsigned int reconnectTimeout)
26
{
29
{
-
 
30
    myCountMutex.lock();
27
    myId = time(NULL);
31
    myId = myCount++;
-
 
32
    myCountMutex.unlock();
28
 
33
 
29
    mySocket = new AsyncSocket();
34
    mySocket = new AsyncSocket();
30
 
35
 
31
    mySocket->setAddress(address);
36
    mySocket->setAddress(address);
32
    mySocket->setPort(port);
37
    mySocket->setPort(port);
33
    mySocket->setReconnectTimeout(reconnectTimeout);
38
    mySocket->setReconnectTimeout(reconnectTimeout);
34
}
39
}
35
 
40
 
36
SocketThread::~SocketThread()
41
SocketThread::~SocketThread()
37
{
42
{
38
    if (!stop())
43
    if (!stop())
39
    {
44
    {
40
        cout << "~SocketThread() :: Failed to stop thread :: Error code is " + itos(getError()) + "\n";
45
        cout << "~SocketThread() :: Failed to stop thread :: Error code is " + itos(getError()) + "\n";
41
 
46
 
42
    }
47
    }
43
/*  else
48
    else
44
    {
49
    {
45
        cout << "~SocketThread() :: Successfully stopped thread\n";
50
        //cout << "~SocketThread() :: Successfully stopped thread " << myId << "\n";
46
    }*/
51
    }
47
    delete mySocket;
52
    delete mySocket;
-
 
53
}
-
 
54
 
-
 
55
void SocketThread::startSocket()
-
 
56
{
-
 
57
cout << "SocketThread::run - starting socket \n";
-
 
58
    mySocket->start();
48
}
59
}
49
 
60
 
50
void SocketThread::run()
61
void SocketThread::run()
51
{
62
{
-
 
63
//cout << "SocketThread::run - Thread started " << myId << "\n";
52
    VirtualMachine &vm = VirtualMachine::getInstance();
64
    VirtualMachine &vm = VirtualMachine::getInstance();
53
 
65
 
-
 
66
//cout << "SocketThread::run - starting socket \n";
54
    mySocket->start();
67
//  mySocket->start();
55
 
68
 
-
 
69
//cout << "SocketThread::run - locking mutex \n";
56
    mySocket->eventStartListen();
70
    mySocket->eventStartListen();
57
 
71
 
-
 
72
cout << "SocketThread::run - start wait \n";
58
    while (true)
73
    while (true)
59
    {
74
    {
60
        mySocket->eventWait();
75
        mySocket->eventWait();
-
 
76
//cout << "SocketThread::run - eventWait over \n";
61
 
77
 
62
        while (mySocket->eventIsAvailable())
78
        while (mySocket->eventIsAvailable())
63
        {
79
        {
64
            SocketEvent socketEvent = mySocket->eventFetch();
80
            SocketEvent socketEvent = mySocket->eventFetch();
65
 
81
 
66
            switch (socketEvent.getType())
82
            switch (socketEvent.getType())
67
            {
83
            {
68
                case SocketEvent::TYPE_CONNECTED:
84
                case SocketEvent::TYPE_CONNECTED:
-
 
85
//cout << "SocketThread::run - event CONNECTED \n";
69
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTED', '" + escape(socketEvent.getData()) + "');");
86
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTED', '" + escape(socketEvent.getData()) + "');");
70
                break;
87
                break;
71
 
88
 
72
                case SocketEvent::TYPE_CONNECTING:
89
                case SocketEvent::TYPE_CONNECTING:
-
 
90
//cout << "SocketThread::run - event CONNECTING \n";
73
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTING', '" + escape(socketEvent.getData()) + "');");
91
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTING', '" + escape(socketEvent.getData()) + "');");
74
                break;
92
                break;
75
 
93
 
76
                case SocketEvent::TYPE_CONNECTION_CLOSED:
94
                case SocketEvent::TYPE_CONNECTION_CLOSED:
-
 
95
//cout << "SocketThread::run - event CLOSED \n";
77
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CLOSED', '" + escape(socketEvent.getData()) + "');");
96
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CLOSED', '" + escape(socketEvent.getData()) + "');");
78
                break;
97
                break;
79
 
98
 
80
                case SocketEvent::TYPE_CONNECTION_DIED:
99
                case SocketEvent::TYPE_CONNECTION_DIED:
-
 
100
//cout << "SocketThread::run - event DIED \n";
81
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'DIED', '" + escape(socketEvent.getData()) + "');");
101
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'DIED', '" + escape(socketEvent.getData()) + "');");
82
                break;
102
                break;
83
 
103
 
84
                case SocketEvent::TYPE_CONNECTION_RESET:
104
                case SocketEvent::TYPE_CONNECTION_RESET:
-
 
105
//cout << "SocketThread::run - event RESET \n";
85
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'RESET', '" + escape(socketEvent.getData()) + "');");
106
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'RESET', '" + escape(socketEvent.getData()) + "');");
86
                break;
107
                break;
87
 
108
 
88
                case SocketEvent::TYPE_CONNECTION_FAILED:
109
                case SocketEvent::TYPE_CONNECTION_FAILED:
-
 
110
//cout << "SocketThread::run - event CONNECTION_FAILED \n";
89
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTION_FAILED', '" + escape(socketEvent.getData()) + "');");
111
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'CONNECTION_FAILED', '" + escape(socketEvent.getData()) + "');");
90
                break;
112
                break;
91
 
113
 
92
                case SocketEvent::TYPE_DATA:
114
                case SocketEvent::TYPE_DATA:
-
 
115
//cout << "SocketThread::run - event DATA \n";
93
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'DATA', '" + escape(socketEvent.getData()) + "');");
116
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'DATA', '" + escape(socketEvent.getData()) + "');");
94
                break;
117
                break;
95
 
118
 
96
                case SocketEvent::TYPE_INACTIVITY:
119
                case SocketEvent::TYPE_INACTIVITY:
-
 
120
//cout << "SocketThread::run - event INACTIVITY \n";
97
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'INACTIVITY', '" + escape(socketEvent.getData()) + "');");
121
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'INACTIVITY', '" + escape(socketEvent.getData()) + "');");
98
                break;
122
                break;
99
               
123
               
100
                case SocketEvent::TYPE_WAITING_RECONNECT:
124
                case SocketEvent::TYPE_WAITING_RECONNECT:
-
 
125
//cout << "SocketThread::run - event WAITING_RECONNECT \n";
101
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'WAITING_RECONNECT', '" + escape(socketEvent.getData()) + "');");
126
                vm.queueExpression("Socket.triggerSocketCallback(" + itos(myId) + ", 'WAITING_RECONNECT', '" + escape(socketEvent.getData()) + "');");
102
                break;
127
                break;
103
            }
128
            }
104
        }
129
        }
105
    }
130
    }
106
 
131
 
-
 
132
//cout << "SocketThread::run - Thread end?\n";
107
    mySocket->eventStopListen();
133
    mySocket->eventStopListen();
108
}
134
}
109
 
135
 
110
void SocketThread::send(string data)
136
void SocketThread::send(string data)
111
{
137
{
-
 
138
//cout << "SocketThread::send - Sending data\n";
112
    mySocket->sendData(data);
139
    mySocket->sendData(data);
113
}
140
}
114
 
141
 
115
 
142