Reliable message should now be working, further testing is to be done.

This commit is contained in:
Jocke
2016-02-10 16:16:56 +01:00
parent 2ec30fd2b2
commit 4f2ad3ad00
9 changed files with 160 additions and 113 deletions
+48 -14
View File
@@ -34,11 +34,27 @@ void Client::Start(World* world, EventBroker* eventBroker)
void Client::Update()
{
m_EventBroker->Process<Client>();
while (m_UDPClient.IsSocketAvailable()) {
while (m_Unreliable.IsSocketAvailable()) {
// Packet will get real data in receive
Packet packet(MessageType::Invalid);
m_UDPClient.Receive(packet);
parseMessageType(packet);
m_Unreliable.Receive(packet);
if (packet.GetMessageType() == MessageType::Connect) {
parseUDPConnect(packet);
} else {
parseMessageType(packet);
}
}
while (m_Reliable.IsSocketAvailable()) {
// Packet will get real data in receive
Packet packet(MessageType::Invalid);
m_Reliable.Receive(packet);
if (packet.GetMessageType() == MessageType::Connect) {
parseTCPConnect(packet);
} else {
parseMessageType(packet);
}
}
if (m_IsConnected) {
@@ -67,9 +83,6 @@ void Client::parseMessageType(Packet& packet)
//identifyPacketLoss();
switch (static_cast<MessageType>(messageType)) {
case MessageType::Connect:
parseConnect(packet);
break;
case MessageType::Ping:
parsePing();
break;
@@ -100,12 +113,32 @@ void Client::parseMessageType(Packet& packet)
}
}
void Client::parseConnect(Packet& packet)
void Client::parseUDPConnect(Packet& packet)
{
// Map ServerEntityID and your PlayerID
LOG_INFO("I be connected PogChamp");
}
void Client::parseTCPConnect(Packet& packet)
{
LOG_INFO("Received TCP connect from server");
// Pop size of message int
packet.ReadPrimitive<int>();
int messageType = packet.ReadPrimitive<int>();
// Read packet ID
m_PreviousPacketID = m_PacketID; // Set previous packet id
m_PacketID = packet.ReadPrimitive<int>(); //Read new packet id
// parse player id and other stuff
m_PlayerID = packet.ReadPrimitive<int>();
m_PlayerID = packet.ReadPrimitive<int>();
LOG_INFO("A Player connected");
Packet UnreliablePacket(MessageType::Connect, m_SendPacketID);
// Add player id and other stuff
packet.WritePrimitive(m_PlayerID);
m_Unreliable.Send(packet);
LOG_INFO("Sent UDP Connect Server");
}
void Client::parsePlayerConnected(Packet & packet)
{
// Map ServerEntityID and other player's PlayerID
@@ -123,7 +156,7 @@ void Client::parsePing()
Packet packet(MessageType::Ping, m_SendPacketID);
packet.WriteString("Ping recieved");
m_UDPClient.Send(packet);
m_Reliable.Send(packet);
}
void Client::parseKick()
@@ -255,14 +288,15 @@ void Client::disconnect()
m_PreviousPacketID = 0;
m_PacketID = 0;
Packet packet(MessageType::Disconnect, m_SendPacketID);
m_UDPClient.Send(packet);
m_Reliable.Send(packet);
}
bool Client::OnInputCommand(const Events::InputCommand & e)
{
if (e.Command == "ConnectToServer") { // Connect for now
if (e.Value > 0) {
m_UDPClient.Connect(m_PlayerName, address, port);
m_Reliable.Connect(m_PlayerName, address, port);
m_Unreliable.Connect(m_PlayerName, address, port);
}
//LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
return true;
@@ -299,7 +333,7 @@ bool Client::OnPlayerDamage(const Events::PlayerDamage & e)
Packet packet(MessageType::OnPlayerDamage, m_SendPacketID);
packet.WritePrimitive(e.Damage);
packet.WritePrimitive(m_ClientIDToServerID.at(e.Player.ID));
m_UDPClient.Send(packet);
m_Reliable.Send(packet);
return false;
}
@@ -327,7 +361,7 @@ void Client::sendLocalPlayerTransform()
packet.WritePrimitive(orientation.x);
packet.WritePrimitive(orientation.y);
packet.WritePrimitive(orientation.z);
m_UDPClient.Send(packet);
m_Unreliable.Send(packet);
}
void Client::identifyPacketLoss()
@@ -370,7 +404,7 @@ void Client::sendInputCommands()
packet.WriteString(m_InputCommandBuffer[i].Command);
packet.WritePrimitive(m_InputCommandBuffer[i].Value);
}
m_UDPClient.Send(packet);
m_Reliable.Send(packet);
m_InputCommandBuffer.clear();
}
}
@@ -378,7 +412,7 @@ void Client::sendInputCommands()
void Client::becomePlayer()
{
Packet packet = Packet(MessageType::BecomePlayer, m_SendPacketID);
m_UDPClient.Send(packet);
m_Reliable.Send(packet);
}
bool Client::clientServerMapsHasEntity(EntityID clientEntityID)