mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-03-01 07:12:25 +00:00
Client and server now use NetCommand to fill outgoing NetPackets and use the byte stream to parse the received NetPackets. This is a preparation to put multiple commands into one packet.
This commit is contained in:
parent
43891c3103
commit
a07f8feb75
4 changed files with 50 additions and 41 deletions
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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<doomcom_t> mComm;
|
||||
int mServerNode = -1;
|
||||
|
|
|
@ -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<float> ( players[player].mo->X() ) );
|
||||
cmd.addFloat ( static_cast<float> ( players[player].mo->Y() ) );
|
||||
cmd.addFloat ( static_cast<float> ( players[player].mo->Z() ) );
|
||||
cmd.addFloat ( static_cast<float> ( players[player].mo->Angles.Yaw.Degrees ) );
|
||||
cmd.addFloat ( static_cast<float> ( 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
|
||||
{
|
||||
|
|
|
@ -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<doomcom_t> mComm;
|
||||
NetNode mNodes[MAXNETNODES];
|
||||
|
|
Loading…
Reference in a new issue