/** * @brief clientside network receiver * * Plugin for the CGame network code in Game.cpp. * @return the number of bytes read from the network stream */ int CSyncDebugger::ClientReceived(const unsigned char* inbuf) { int length = 0; switch (inbuf[0]) { case NETMSG_SD_CHKREQUEST: if (gs->frameNum != *(int*)&inbuf[1]) { logger.AddLine("Client: received checksum request for frame %d instead of %d", *(int*)&inbuf[1], gs->frameNum); } else { disable_history = true; // no more additions to the history until we're done may_enable_history = false; ClientSendChecksumResponse(); logger.AddLine("Client: checksum response sent"); } length = 5; break; case NETMSG_SD_BLKREQUEST: if (*(unsigned short*)&inbuf[1] >= HISTORY_SIZE) { logger.AddLine("Client: invalid block number %d in block request", *(unsigned short*)&inbuf[1]); } else { ClientSendBlockResponse(*(unsigned short*)&inbuf[1]); logger.AddLine("Client: block response sent for block %d", *(unsigned short*)&inbuf[1]); // simple progress indication logOutput.Print("[SD] Client: %d / %d", *(unsigned short*)&inbuf[3], *(unsigned short*)&inbuf[5]); } length = 7; break; case NETMSG_SD_RESET: logger.CloseSession(); logOutput.Print("[SD] Client: Done!"); // disable_history = false; may_enable_history = true; if (gu->autoQuit) { logOutput.Print("[SD] Client: Automatical quit enforced from commandline"); globalQuit = true; } length = 1; break; default: logOutput.Print("[SD] Client: invalid msg"); length = 0; break; } return length; }
/** * @brief clientside network receiver * * Plugin for the CGame network code in Game.cpp. * @return the number of bytes read from the network stream */ bool CSyncDebugger::ClientReceived(const unsigned char* inbuf) { bool syncDebugPacket = false; switch (inbuf[0]) { case NETMSG_SD_CHKREQUEST: if (gs->frameNum != *(int*)&inbuf[1]) { logger.AddLine("Client: received checksum request for frame %d instead of %d", *(int*)&inbuf[1], gs->frameNum); } else { disable_history = true; // no more additions to the history until we're done may_enable_history = false; ClientSendChecksumResponse(); logger.AddLine("Client: checksum response sent"); } syncDebugPacket = true; break; case NETMSG_SD_BLKREQUEST: if (*(unsigned short*)&inbuf[1] >= HISTORY_SIZE) { logger.AddLine("Client: invalid block number %d in block request", *(unsigned short*)&inbuf[1]); } else { ClientSendBlockResponse(*(unsigned short*)&inbuf[1]); logger.AddLine("Client: block response sent for block %d", *(unsigned short*)&inbuf[1]); // simple progress indication logOutput.Print("[SD] Client: %d / %d", *(unsigned short*)&inbuf[3], *(unsigned short*)&inbuf[5]); } syncDebugPacket = true; break; case NETMSG_SD_RESET: logger.CloseSession(); logOutput.Print("[SD] Client: Done!"); // disable_history = false; may_enable_history = true; syncDebugPacket = true; break; } logger.FlushBuffer(); return syncDebugPacket; }