diff --git a/src/d_netclient.cpp b/src/d_netclient.cpp index dc1817143e..76ce527f80 100644 --- a/src/d_netclient.cpp +++ b/src/d_netclient.cpp @@ -76,8 +76,10 @@ NetClient::NetClient(FString server) NetPacket packet; packet.node = mServerNode; - packet.size = 1; - packet[0] = (uint8_t)NetPacketType::ConnectRequest; + + NetCommand cmd ( NetPacketType::ConnectRequest ); + cmd.writeCommandToPacket ( packet ); + mComm->PacketSend(packet); } @@ -101,7 +103,7 @@ void NetClient::Update() } else { - NetPacketType type = (NetPacketType)packet[0]; + NetPacketType type = (NetPacketType)packet.stream.ReadByte(); switch (type) { default: OnClose(packet); break; @@ -137,10 +139,12 @@ void NetClient::EndCurrentTic() { NetPacket packet; packet.node = mServerNode; - packet.size = 2 + sizeof(usercmd_t); - packet[0] = (uint8_t)NetPacketType::Tic; - packet[1] = 0; // target gametic - memcpy(&packet[2], &mCurrentInput[consoleplayer].ucmd, sizeof(usercmd_t)); + + NetCommand cmd ( NetPacketType::Tic ); + cmd.addByte ( 0 ); // target gametic + cmd.addBuffer ( &mCurrentInput[consoleplayer].ucmd, sizeof(usercmd_t) ); + cmd.writeCommandToPacket ( packet ); + mComm->PacketSend(packet); mCurrentCommands = mSendCommands; @@ -220,17 +224,18 @@ void NetClient::OnClose(const NetPacket &packet) } } -void NetClient::OnConnectResponse(const NetPacket &packet) +void NetClient::OnConnectResponse(NetPacket &packet) { if (packet.size != 3) return; - int version = packet[1]; // Protocol version + int version = packet.stream.ReadByte(); // Protocol version if (version == 1) { - if (packet[2] != 255) // Join accepted + int playernum = packet.stream.ReadByte(); + if (playernum != 255) // Join accepted { - mPlayer = packet[2]; + mPlayer = playernum; mStatus = NodeStatus::InGame; G_InitClientNetGame(mPlayer, "e1m1"); @@ -262,17 +267,17 @@ void NetClient::OnDisconnect(const NetPacket &packet) mStatus = NodeStatus::Closed; } -void NetClient::OnTic(const NetPacket &packet) +void NetClient::OnTic(NetPacket &packet) { if (packet.size != 2 + sizeof(float) * 5) return; - int tic = packet[1]; - float x = *(float*)&packet[2]; - float y = *(float*)&packet[6]; - float z = *(float*)&packet[10]; - float yaw = *(float*)&packet[14]; - float pitch = *(float*)&packet[18]; + int tic = packet.stream.ReadByte(); + float x = packet.stream.ReadFloat(); + float y = packet.stream.ReadFloat(); + float z = packet.stream.ReadFloat(); + float yaw = packet.stream.ReadFloat(); + float pitch = packet.stream.ReadFloat(); if (playeringame[consoleplayer] && players[consoleplayer].mo) { diff --git a/src/d_netclient.h b/src/d_netclient.h index e7ef5668ac..7b5163f636 100644 --- a/src/d_netclient.h +++ b/src/d_netclient.h @@ -51,9 +51,9 @@ public: private: void OnClose(const NetPacket &packet); - void OnConnectResponse(const NetPacket &packet); + void OnConnectResponse(NetPacket &packet); void OnDisconnect(const NetPacket &packet); - void OnTic(const NetPacket &packet); + void OnTic(NetPacket &packet); std::unique_ptr mComm; int mServerNode = -1; diff --git a/src/d_netserver.cpp b/src/d_netserver.cpp index a3f3962a2c..5a012cd18b 100644 --- a/src/d_netserver.cpp +++ b/src/d_netserver.cpp @@ -91,7 +91,7 @@ void NetServer::Update() } else { - NetPacketType type = (NetPacketType)packet[0]; + NetPacketType type = (NetPacketType)packet.stream.ReadByte(); switch (type) { default: OnClose(node, packet); break; @@ -117,27 +117,28 @@ void NetServer::EndCurrentTic() { NetPacket packet; packet.node = i; - packet.size = 2 + sizeof(float) * 5; - packet[0] = (uint8_t)NetPacketType::Tic; - packet[1] = gametic; + + NetCommand cmd ( NetPacketType::Tic); + cmd.addByte ( gametic ); int player = mNodes[i].Player; if (playeringame[player] && players[player].mo) { - *(float*)&packet[2] = (float)players[player].mo->X(); - *(float*)&packet[6] = (float)players[player].mo->Y(); - *(float*)&packet[10] = (float)players[player].mo->Z(); - *(float*)&packet[14] = (float)players[player].mo->Angles.Yaw.Degrees; - *(float*)&packet[18] = (float)players[player].mo->Angles.Pitch.Degrees; + cmd.addFloat ( static_cast ( players[player].mo->X() ) ); + cmd.addFloat ( static_cast ( players[player].mo->Y() ) ); + cmd.addFloat ( static_cast ( players[player].mo->Z() ) ); + cmd.addFloat ( static_cast ( players[player].mo->Angles.Yaw.Degrees ) ); + cmd.addFloat ( static_cast ( players[player].mo->Angles.Pitch.Degrees ) ); } else { - *(float*)&packet[2] = 0.0f; - *(float*)&packet[6] = 0.0f; - *(float*)&packet[10] = 0.0f; - *(float*)&packet[14] = 0.0f; - *(float*)&packet[18] = 0.0f; + cmd.addFloat ( 0.0f ); + cmd.addFloat ( 0.0f ); + cmd.addFloat ( 0.0f ); + cmd.addFloat ( 0.0f ); + cmd.addFloat ( 0.0f ); } + cmd.writeCommandToPacket ( packet ); mComm->PacketSend(packet); } @@ -264,10 +265,12 @@ void NetServer::OnConnectRequest(NetNode &node, const NetPacket &packet) NetPacket response; response.node = packet.node; - response[0] = (uint8_t)NetPacketType::ConnectResponse; - response[1] = 1; // Protocol version - response[2] = 255; - response.size = 3; + + NetCommand cmd ( NetPacketType::ConnectResponse ); + cmd.addByte ( 1 ); // Protocol version + cmd.addByte ( 255 ); + cmd.writeCommandToPacket ( response ); + mComm->PacketSend(response); node.Status = NodeStatus::Closed; @@ -290,14 +293,15 @@ void NetServer::OnDisconnect(NetNode &node, const NetPacket &packet) mComm->Close(packet.node); } -void NetServer::OnTic(NetNode &node, const NetPacket &packet) +void NetServer::OnTic(NetNode &node, NetPacket &packet) { if (node.Status == NodeStatus::InGame) { if (packet.size != 2 + sizeof(usercmd_t)) return; - memcpy(&mCurrentInput[node.Player].ucmd, &packet[2], sizeof(usercmd_t)); + /* gametic */ packet.stream.ReadByte(); + packet.stream.ReadBuffer ( &mCurrentInput[node.Player].ucmd, sizeof(usercmd_t)); } else { diff --git a/src/d_netserver.h b/src/d_netserver.h index c7e191390a..aa51cc6650 100644 --- a/src/d_netserver.h +++ b/src/d_netserver.h @@ -72,7 +72,7 @@ private: void OnClose(NetNode &node, const NetPacket &packet); void OnConnectRequest(NetNode &node, const NetPacket &packet); void OnDisconnect(NetNode &node, const NetPacket &packet); - void OnTic(NetNode &node, const NetPacket &packet); + void OnTic(NetNode &node, NetPacket &packet); std::unique_ptr mComm; NetNode mNodes[MAXNETNODES];