/** * @sa CL_ReadPacket * @sa NET_ReadMsg * @sa SV_Start */ void SV_ReadPacket (struct net_stream *s) { client_t *cl = (client_t *)NET_StreamGetData(s); struct dbuffer *msg; while ((msg = NET_ReadMsg(s))) { const int cmd = NET_ReadByte(msg); if (cmd == clc_oob) SV_ConnectionlessPacket(s, msg); else if (cl) SV_ExecuteClientMessage(cl, cmd, msg); else NET_StreamFree(s); free_dbuffer(msg); } }
/** * @sa CL_ReadPacket * @sa NET_ReadMsg * @sa SV_Start */ void SV_ReadPacket (struct net_stream *s) { client_t *cl = static_cast<client_t *>(NET_StreamGetData(s)); dbuffer *msg; while ((msg = NET_ReadMsg(s))) { const int cmd = NET_ReadByte(msg); if (cmd == clc_oob) SV_ConnectionlessPacket(s, msg); else if (cl) SV_ExecuteClientMessage(cl, cmd, msg); else { NET_StreamFree(s); s = NULL; } delete msg; } }
/** * @sa NET_StreamGetFree * @sa NET_StreamClose */ static struct net_stream* NET_StreamNew (int index) { net_stream* const s = Mem_PoolAllocType(net_stream, com_networkPool); s->data = nullptr; s->loopback_peer = nullptr; s->loopback = false; s->closed = false; s->finished = false; s->ready = false; s->socket = INVALID_SOCKET; s->inbound = dbufferptr(); s->outbound = dbufferptr(); s->index = index; s->family = 0; s->addrlen = 0; s->func = nullptr; if (streams[index]) NET_StreamFree(streams[index]); streams[index] = s; return s; }