| 131 | } |
| 132 | |
| 133 | void DebugInterface::MessageLoop(SOCKET sock) |
| 134 | { |
| 135 | receivePos_ = 0; |
| 136 | for (;;) { |
| 137 | int len = recv(sock, (char *)&receiveBuf_[receivePos_], sizeof(receiveBuf_) - receivePos_, 0); |
| 138 | if (len < 0) { |
| 139 | Debug("Socket recv failed: %d, error %d", len, WSAGetLastError()); |
| 140 | return; |
| 141 | } |
| 142 | |
| 143 | receivePos_ += len; |
| 144 | while (receivePos_ >= 4) { |
| 145 | uint32_t messageLength = *reinterpret_cast<uint32_t *>(&receiveBuf_[0]); |
| 146 | |
| 147 | if (messageLength < 4 || messageLength > sizeof(receiveBuf_)) { |
| 148 | Debug("DebugInterface::MessageLoop(): Illegal message length: %d", messageLength); |
| 149 | return; |
| 150 | } |
| 151 | |
| 152 | if (receivePos_ >= messageLength) { |
| 153 | if (!ProcessMessage(&receiveBuf_[4], messageLength - 4)) { |
| 154 | Debug("DebugInterface::MessageLoop(): Message processing failed"); |
| 155 | return; |
| 156 | } |
| 157 | |
| 158 | memmove(&receiveBuf_[0], &receiveBuf_[messageLength], receivePos_ - messageLength); |
| 159 | receivePos_ -= messageLength; |
| 160 | } |
| 161 | else { |
| 162 | break; |
| 163 | } |
| 164 | } |
| 165 | } |
| 166 | } |
| 167 | |
| 168 | void DebugInterface::Run() |
| 169 | { |