Subversion Repositories HomeAutomation

Rev

Rev 975 | Rev 981 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 975 Rev 976
Line 62... Line 62...
62
 
62
 
63
    string address = Settings::get("CanNetAddress");
63
    string address = Settings::get("CanNetAddress");
64
    string port = Settings::get("CanNetPort");
64
    string port = Settings::get("CanNetPort");
65
 
65
 
66
    myChannel->setAddress(address, stoi(port));
66
    myChannel->setAddress(address, stoi(port));
-
 
67
 
-
 
68
    myChannel->setReconnectTimeout(10);
67
 
69
 
68
    myChannel->start();
70
    myChannel->start();
69
 
71
 
70
    myChannel->startEvent();
72
    myChannel->startEvent();
71
 
73
 
Line 76... Line 78...
76
        myChannel->waitForEvent();
78
        myChannel->waitForEvent();
77
 
79
 
78
        int event = myChannel->getEvent();
80
        int event = myChannel->getEvent();
79
 
81
 
80
        if (event == ASYNCSOCKET_EVENT_DATA)
82
        if (event == ASYNCSOCKET_EVENT_DATA)
81
        {
83
        {
82
            while (myChannel->availableData())
84
            while (myChannel->availableData())
83
            {
85
            {
84
                waitingForPong = false;
86
                waitingForPong = false;
85
 
87
 
86
                string data = myChannel->getData();
88
                string data = myChannel->getData();
87
 
89
 
88
                try
90
                try
89
                {
91
                {
-
 
92
                    ///FIXME: Verify that \n is right here, have seen that it does not always work
90
                    vector<string> dataLines = explode("\n", data);
93
                    vector<string> dataLines = explode("\n", data);
91
 
94
 
92
                    for (int n = 0; n < dataLines.size(); n++)
95
                    for (int n = 0; n < dataLines.size(); n++)
93
                    {
96
                    {
94
                        data = trim(data, '\n');
97
                        data = trim(data, '\n');
95
 
98
 
96
                        if (data == "PONG")
99
                        if (data == "PONG")
97
                        {
100
                        {
98
                            slog << "Received pong.\n";
101
                            slog << "Received pong.\n";
99
                            continue;
102
                            continue;
100
                        }
103
                        }
Line 110... Line 113...
110
                        }
113
                        }
111
                        /*else
114
                        /*else
112
                        {
115
                        {
113
                            slog << "Received unknown message. Skipping...\n";
116
                            slog << "Received unknown message. Skipping...\n";
114
                        }*/
117
                        }*/
115
                    }
118
                    }
116
                }
119
                }
117
                catch (CanMessageException* e)
120
                catch (CanMessageException* e)
118
                {
121
                {
119
                    slog << "CanMessageException was caught:\n";
122
                    slog << "CanMessageException was caught:\n";
120
                    slog << e->getDescription() << "\n";
123
                    slog << e->getDescription() + "\n";
121
                }
124
                }
122
            }
125
            }
123
        }
126
        }
124
        else if (event == ASYNCSOCKET_EVENT_CLOSED)
127
        else if (event == ASYNCSOCKET_EVENT_CLOSED)
125
        {
128
        {
126
            vm.queueExpression("setAllOffline();");
129
            vm.queueExpression("setAllOffline();");
-
 
130
        }
-
 
131
        else if (event == ASYNCSOCKET_EVENT_DIED)
-
 
132
        {
-
 
133
            vm.queueExpression("setAllOffline();");
-
 
134
            break;
127
        }
135
        }
128
        else if (event == ASYNCSOCKET_EVENT_INACTIVITY)
136
        else if (event == ASYNCSOCKET_EVENT_INACTIVITY)
129
        {
137
        {
130
            if (waitingForPong)
138
            if (waitingForPong)
131
            {
139
            {
Line 134... Line 142...
134
                vm.queueExpression("setAllOffline();");
142
                vm.queueExpression("setAllOffline();");
135
                myChannel->forceReconnect();
143
                myChannel->forceReconnect();
136
            }
144
            }
137
            else
145
            else
138
            {
146
            {
139
                slog << "We have not received anything from the canDaemon in some time.\n";
147
                //slog << "We have not received anything from the canDaemon in some time.\n";
140
                waitingForPong = true;
148
                waitingForPong = true;
141
                slog << "Sending ping.\n";
149
                slog << "Sending ping.\n";
142
                myChannel->sendData("PING");
150
                myChannel->sendData("PING");
143
            }
151
            }
144
 
152