readytoread.cc

来自「2007年机器人足球世界杯3D仿真组亚军」· CC 代码 · 共 48 行

CC
48
字号
#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 + =
减小字号Ctrl + -
显示快捷键?