Rev 972 | Rev 975 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 972 | Rev 974 | ||
|---|---|---|---|
| Line 66... | Line 66... | ||
| 66 | myChannel->setAddress(address, stoi(port)); |
66 | myChannel->setAddress(address, stoi(port)); |
| 67 | 67 | ||
| 68 | myChannel->start(); |
68 | myChannel->start(); |
| 69 | 69 | ||
| 70 | myChannel->startEvent(); |
70 | myChannel->startEvent(); |
| - | 71 | ||
| - | 72 | bool waitingForPong = false; |
|
| 71 | 73 | ||
| 72 | while (1) |
74 | while (1) |
| 73 | { |
75 | { |
| 74 | myChannel->waitForEvent(); |
76 | myChannel->waitForEvent(); |
| 75 | 77 | ||
| 76 | int event = myChannel->getEvent(); |
78 | int event = myChannel->getEvent(); |
| 77 | 79 | ||
| 78 | if (event == ASYNCSOCKET_EVENT_DATA) |
80 | if (event == ASYNCSOCKET_EVENT_DATA) |
| 79 | { |
81 | { |
| 80 | while (myChannel->availableData()) |
82 | while (myChannel->availableData()) |
| 81 | { |
83 | { |
| - | 84 | waitingForPong = false; |
|
| - | 85 | ||
| 82 | string data = myChannel->getData(); |
86 | string data = myChannel->getData(); |
| 83 | 87 | ||
| 84 | try |
88 | try |
| 85 | { |
89 | { |
| 86 | vector<string> dataLines = explode("\n", data); |
90 | vector<string> dataLines = explode("\n", data); |
| 87 | 91 | ||
| 88 | for (int n = 0; n < dataLines.size(); n++) |
92 | for (int n = 0; n < dataLines.size(); n++) |
| 89 | { |
93 | { |
| - | 94 | data = trim(data, '\n'); |
|
| - | 95 | ||
| - | 96 | if (data == "PONG") |
|
| - | 97 | { |
|
| - | 98 | slog << "Received pong.\n"; |
|
| - | 99 | continue; |
|
| - | 100 | } |
|
| - | 101 | ||
| 90 | CanMessage canMessage; |
102 | CanMessage canMessage; |
| 91 | canMessage.setRaw(data); |
103 | canMessage.setRaw(data); |
| 92 | 104 | ||
| 93 | //slog << "Received: " << data; |
105 | //slog << "Received: " << data; |
| 94 | 106 | ||
| 95 | if (!canMessage.isUnknown()) |
107 | if (!canMessage.isUnknown()) |
| 96 | { |
108 | { |
| 97 | vm.queueCanMessage(canMessage); |
109 | vm.queueCanMessage(canMessage); |
| 98 | } |
110 | } |
| 99 | /*else |
111 | /*else |
| 100 | { |
112 | { |
| 101 | slog << "Received unknown message. Skipping...\n"; |
113 | slog << "Received unknown message. Skipping...\n"; |
| 102 | }*/ |
114 | }*/ |
| 103 | } |
115 | } |
| 104 | } |
116 | } |
| 105 | catch (CanMessageException* e) |
117 | catch (CanMessageException* e) |
| 106 | { |
118 | { |
| 107 | slog << "CanMessageException was caught:\n"; |
119 | slog << "CanMessageException was caught:\n"; |
| 108 | slog << e->getDescription() << "\n"; |
120 | slog << e->getDescription() << "\n"; |
| 109 | } |
121 | } |
| 110 | } |
122 | } |
| - | 123 | } |
|
| - | 124 | else if (event == ASYNCSOCKET_EVENT_INACTIVITY) |
|
| - | 125 | { |
|
| - | 126 | if (waitingForPong) |
|
| - | 127 | { |
|
| - | 128 | slog << "We have not received a pong for our ping.\n"; |
|
| - | 129 | waitingForPong = false; |
|
| - | 130 | vm.queueExpression("setAllOffline();"); |
|
| - | 131 | myChannel->forceReconnect(); |
|
| - | 132 | } |
|
| - | 133 | else |
|
| - | 134 | { |
|
| - | 135 | slog << "We have not received anything from the canDaemon in some time.\n"; |
|
| - | 136 | waitingForPong = true; |
|
| - | 137 | slog << "Sending ping.\n"; |
|
| - | 138 | myChannel->sendData("PING"); |
|
| - | 139 | } |
|
| - | 140 | ||
| 111 | } |
141 | } |
| 112 | } |
142 | } |
| 113 | 143 | ||
| 114 | myChannel->stopEvent(); |
144 | myChannel->stopEvent(); |
| 115 | } |
145 | } |