void Str_Read(ddstring_t *str, Reader *reader) { size_t len = Reader_ReadUInt32(reader); char *buf = malloc(len + 1); Reader_Read(reader, buf, len); buf[len] = 0; Str_Set(str, buf); free(buf); }
void StringArray_Read(StringArray *ar, Reader *reader) { StringArray_Clear(ar); uint count = Reader_ReadUInt32(reader); for(uint i = 0; i < count; ++i) { de::Str *str = new de::Str; Str_Read(*str, reader); ar->array.push_back(str); } }
// Called when a ping packet comes in. void Net_PingResponse(void) { client_t* cl = &clients[netBuffer.player]; int time = Reader_ReadUInt32(msgReader); // Is this a response to our ping? if(time == cl->ping.sent) { // Record the time and send the next ping. cl->ping.times[cl->ping.current] = (Timer_RealMilliseconds() - time) / 1000.0f; // Show a notification. /*Con_Printf( "Ping to plr %i: %.0f ms.\n", netbuffer.player, cl->ping.times[cl->ping.current] * 1000); */ // Send the next ping. Net_SendPing(netBuffer.player, 0); } else { // Not ours, just respond. Net_SendBuffer(netBuffer.player, 10000); } }
void NetCl_UpdateFinaleState(Reader* msg) { int i, numConds; fi_state_t* s = &remoteFinaleState; // Flags. s->mode = Reader_ReadByte(msg); s->finaleId = Reader_ReadUInt32(msg); // serverside id (local is different) // Conditions. numConds = Reader_ReadByte(msg); for(i = 0; i < numConds; ++i) { byte cond = Reader_ReadByte(msg); if(i == 0) s->conditions.secret = cond; if(i == 1) s->conditions.leave_hub = cond; } #ifdef _DEBUG Con_Message("NetCl_FinaleState: Updated finale %i: mode %i, secret=%i, leave_hud=%i", s->finaleId, s->mode, s->conditions.secret, s->conditions.leave_hub); #endif }