mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-03-01 15:20:49 +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;
|
NetPacket packet;
|
||||||
packet.node = mServerNode;
|
packet.node = mServerNode;
|
||||||
packet.size = 1;
|
|
||||||
packet[0] = (uint8_t)NetPacketType::ConnectRequest;
|
NetCommand cmd ( NetPacketType::ConnectRequest );
|
||||||
|
cmd.writeCommandToPacket ( packet );
|
||||||
|
|
||||||
mComm->PacketSend(packet);
|
mComm->PacketSend(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +103,7 @@ void NetClient::Update()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NetPacketType type = (NetPacketType)packet[0];
|
NetPacketType type = (NetPacketType)packet.stream.ReadByte();
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
default: OnClose(packet); break;
|
default: OnClose(packet); break;
|
||||||
|
@ -137,10 +139,12 @@ void NetClient::EndCurrentTic()
|
||||||
{
|
{
|
||||||
NetPacket packet;
|
NetPacket packet;
|
||||||
packet.node = mServerNode;
|
packet.node = mServerNode;
|
||||||
packet.size = 2 + sizeof(usercmd_t);
|
|
||||||
packet[0] = (uint8_t)NetPacketType::Tic;
|
NetCommand cmd ( NetPacketType::Tic );
|
||||||
packet[1] = 0; // target gametic
|
cmd.addByte ( 0 ); // target gametic
|
||||||
memcpy(&packet[2], &mCurrentInput[consoleplayer].ucmd, sizeof(usercmd_t));
|
cmd.addBuffer ( &mCurrentInput[consoleplayer].ucmd, sizeof(usercmd_t) );
|
||||||
|
cmd.writeCommandToPacket ( packet );
|
||||||
|
|
||||||
mComm->PacketSend(packet);
|
mComm->PacketSend(packet);
|
||||||
|
|
||||||
mCurrentCommands = mSendCommands;
|
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)
|
if (packet.size != 3)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int version = packet[1]; // Protocol version
|
int version = packet.stream.ReadByte(); // Protocol version
|
||||||
if (version == 1)
|
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;
|
mStatus = NodeStatus::InGame;
|
||||||
|
|
||||||
G_InitClientNetGame(mPlayer, "e1m1");
|
G_InitClientNetGame(mPlayer, "e1m1");
|
||||||
|
@ -262,17 +267,17 @@ void NetClient::OnDisconnect(const NetPacket &packet)
|
||||||
mStatus = NodeStatus::Closed;
|
mStatus = NodeStatus::Closed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetClient::OnTic(const NetPacket &packet)
|
void NetClient::OnTic(NetPacket &packet)
|
||||||
{
|
{
|
||||||
if (packet.size != 2 + sizeof(float) * 5)
|
if (packet.size != 2 + sizeof(float) * 5)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int tic = packet[1];
|
int tic = packet.stream.ReadByte();
|
||||||
float x = *(float*)&packet[2];
|
float x = packet.stream.ReadFloat();
|
||||||
float y = *(float*)&packet[6];
|
float y = packet.stream.ReadFloat();
|
||||||
float z = *(float*)&packet[10];
|
float z = packet.stream.ReadFloat();
|
||||||
float yaw = *(float*)&packet[14];
|
float yaw = packet.stream.ReadFloat();
|
||||||
float pitch = *(float*)&packet[18];
|
float pitch = packet.stream.ReadFloat();
|
||||||
|
|
||||||
if (playeringame[consoleplayer] && players[consoleplayer].mo)
|
if (playeringame[consoleplayer] && players[consoleplayer].mo)
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,9 +51,9 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnClose(const NetPacket &packet);
|
void OnClose(const NetPacket &packet);
|
||||||
void OnConnectResponse(const NetPacket &packet);
|
void OnConnectResponse(NetPacket &packet);
|
||||||
void OnDisconnect(const NetPacket &packet);
|
void OnDisconnect(const NetPacket &packet);
|
||||||
void OnTic(const NetPacket &packet);
|
void OnTic(NetPacket &packet);
|
||||||
|
|
||||||
std::unique_ptr<doomcom_t> mComm;
|
std::unique_ptr<doomcom_t> mComm;
|
||||||
int mServerNode = -1;
|
int mServerNode = -1;
|
||||||
|
|
|
@ -91,7 +91,7 @@ void NetServer::Update()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NetPacketType type = (NetPacketType)packet[0];
|
NetPacketType type = (NetPacketType)packet.stream.ReadByte();
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
default: OnClose(node, packet); break;
|
default: OnClose(node, packet); break;
|
||||||
|
@ -117,27 +117,28 @@ void NetServer::EndCurrentTic()
|
||||||
{
|
{
|
||||||
NetPacket packet;
|
NetPacket packet;
|
||||||
packet.node = i;
|
packet.node = i;
|
||||||
packet.size = 2 + sizeof(float) * 5;
|
|
||||||
packet[0] = (uint8_t)NetPacketType::Tic;
|
NetCommand cmd ( NetPacketType::Tic);
|
||||||
packet[1] = gametic;
|
cmd.addByte ( gametic );
|
||||||
|
|
||||||
int player = mNodes[i].Player;
|
int player = mNodes[i].Player;
|
||||||
if (playeringame[player] && players[player].mo)
|
if (playeringame[player] && players[player].mo)
|
||||||
{
|
{
|
||||||
*(float*)&packet[2] = (float)players[player].mo->X();
|
cmd.addFloat ( static_cast<float> ( players[player].mo->X() ) );
|
||||||
*(float*)&packet[6] = (float)players[player].mo->Y();
|
cmd.addFloat ( static_cast<float> ( players[player].mo->Y() ) );
|
||||||
*(float*)&packet[10] = (float)players[player].mo->Z();
|
cmd.addFloat ( static_cast<float> ( players[player].mo->Z() ) );
|
||||||
*(float*)&packet[14] = (float)players[player].mo->Angles.Yaw.Degrees;
|
cmd.addFloat ( static_cast<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->Angles.Pitch.Degrees ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*(float*)&packet[2] = 0.0f;
|
cmd.addFloat ( 0.0f );
|
||||||
*(float*)&packet[6] = 0.0f;
|
cmd.addFloat ( 0.0f );
|
||||||
*(float*)&packet[10] = 0.0f;
|
cmd.addFloat ( 0.0f );
|
||||||
*(float*)&packet[14] = 0.0f;
|
cmd.addFloat ( 0.0f );
|
||||||
*(float*)&packet[18] = 0.0f;
|
cmd.addFloat ( 0.0f );
|
||||||
}
|
}
|
||||||
|
cmd.writeCommandToPacket ( packet );
|
||||||
|
|
||||||
mComm->PacketSend(packet);
|
mComm->PacketSend(packet);
|
||||||
}
|
}
|
||||||
|
@ -264,10 +265,12 @@ void NetServer::OnConnectRequest(NetNode &node, const NetPacket &packet)
|
||||||
|
|
||||||
NetPacket response;
|
NetPacket response;
|
||||||
response.node = packet.node;
|
response.node = packet.node;
|
||||||
response[0] = (uint8_t)NetPacketType::ConnectResponse;
|
|
||||||
response[1] = 1; // Protocol version
|
NetCommand cmd ( NetPacketType::ConnectResponse );
|
||||||
response[2] = 255;
|
cmd.addByte ( 1 ); // Protocol version
|
||||||
response.size = 3;
|
cmd.addByte ( 255 );
|
||||||
|
cmd.writeCommandToPacket ( response );
|
||||||
|
|
||||||
mComm->PacketSend(response);
|
mComm->PacketSend(response);
|
||||||
|
|
||||||
node.Status = NodeStatus::Closed;
|
node.Status = NodeStatus::Closed;
|
||||||
|
@ -290,14 +293,15 @@ void NetServer::OnDisconnect(NetNode &node, const NetPacket &packet)
|
||||||
mComm->Close(packet.node);
|
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 (node.Status == NodeStatus::InGame)
|
||||||
{
|
{
|
||||||
if (packet.size != 2 + sizeof(usercmd_t))
|
if (packet.size != 2 + sizeof(usercmd_t))
|
||||||
return;
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -72,7 +72,7 @@ private:
|
||||||
void OnClose(NetNode &node, const NetPacket &packet);
|
void OnClose(NetNode &node, const NetPacket &packet);
|
||||||
void OnConnectRequest(NetNode &node, const NetPacket &packet);
|
void OnConnectRequest(NetNode &node, const NetPacket &packet);
|
||||||
void OnDisconnect(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;
|
std::unique_ptr<doomcom_t> mComm;
|
||||||
NetNode mNodes[MAXNETNODES];
|
NetNode mNodes[MAXNETNODES];
|
||||||
|
|
Loading…
Reference in a new issue