📄 readytoread.cc
字号:
#include "monitorserver.hh"#include <sstream>#include <iostream>using namespace std;using namespace bats;bool MonitorServer::ready_to_read(SocketInfo &info){ if (info.data == 0) return false; Data* data = reinterpret_cast<Data*>(info.data); // Read in from socket char buffer[2048]; int len; unsigned bufferLeft = 2048 - data->bufLen; while ((len = info.socket.read(buffer, bufferLeft)) && bufferLeft != 0) { if (len == -1) break; memcpy(data->buffer + data->bufLen, buffer, len ); data->bufLen += len; bufferLeft = 2048 - data->bufLen; } string b(data->buffer, data->buffer + data->bufLen); // Process buffer while (data->bufLen > 0) { uint32_t size; memcpy(&size, data->buffer, sizeof(size)); if (data->bufLen >= size + sizeof(size)) { string msg(data->buffer + sizeof(size), data->buffer + sizeof(size) + size); memmove(data->buffer, data->buffer + sizeof(size) + size, data->bufLen - (sizeof(size) + size)); data->bufLen -= sizeof(size) + size; parseMessage(*reinterpret_cast<Data*>(info.data), msg); } else break; } return false; // returns false, to stay in read mode.}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -