Merge remote-tracking branch 'origin/Networking' into Networking
This commit is contained in:
+1
-1
Submodule assets updated: 6cbf2365d4...a3c92ac876
@@ -57,6 +57,7 @@ private:
|
|||||||
SnapshotDefinitions m_NextSnapshot;
|
SnapshotDefinitions m_NextSnapshot;
|
||||||
double m_DurationOfPingTime;
|
double m_DurationOfPingTime;
|
||||||
std::clock_t m_StartPingTime;
|
std::clock_t m_StartPingTime;
|
||||||
|
std::vector<Events::InputCommand> m_InputCommandBuffer;
|
||||||
|
|
||||||
// Private member functions
|
// Private member functions
|
||||||
void readFromServer();
|
void readFromServer();
|
||||||
@@ -75,6 +76,7 @@ private:
|
|||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
bool isConnected();
|
bool isConnected();
|
||||||
EntityID createPlayer();
|
EntityID createPlayer();
|
||||||
|
void sendInputCommands();
|
||||||
// Mapping Logic
|
// Mapping Logic
|
||||||
// Returns if local EntityID exist in map
|
// Returns if local EntityID exist in map
|
||||||
bool clientServerMapsHasEntity(EntityID clientEntityID);
|
bool clientServerMapsHasEntity(EntityID clientEntityID);
|
||||||
|
|||||||
@@ -73,6 +73,10 @@ private:
|
|||||||
void parseServerPing();
|
void parseServerPing();
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
EntityID createPlayer();
|
EntityID createPlayer();
|
||||||
|
// Debug event
|
||||||
|
|
||||||
|
EventRelay<Server, Events::InputCommand> m_EInputCommand;
|
||||||
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ void Client::Start(World* world, EventBroker* eventBroker)
|
|||||||
|
|
||||||
// Subscribe to events
|
// Subscribe to events
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Client::OnInputCommand);
|
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Client::OnInputCommand);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayeDamage, &Client::OnPlayerDamage);
|
||||||
|
|
||||||
m_Socket.connect(m_ReceiverEndpoint);
|
m_Socket.connect(m_ReceiverEndpoint);
|
||||||
LOG_INFO("I am client. BIP BOP");
|
LOG_INFO("I am client. BIP BOP");
|
||||||
@@ -44,6 +45,7 @@ void Client::readFromServer()
|
|||||||
parseMessageType(packet);
|
parseMessageType(packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sendInputCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::parseMessageType(Packet& packet)
|
void Client::parseMessageType(Packet& packet)
|
||||||
@@ -92,7 +94,7 @@ void Client::parseConnect(Packet& packet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::parsePlayerConnected(Packet & packet)
|
void Client::parsePlayerConnected(Packet & packet)
|
||||||
{
|
{
|
||||||
// Map ServerEntityID and other player's PlayerID
|
// Map ServerEntityID and other player's PlayerID
|
||||||
LOG_INFO("A Player connected");
|
LOG_INFO("A Player connected");
|
||||||
}
|
}
|
||||||
@@ -235,12 +237,8 @@ bool Client::OnInputCommand(const Events::InputCommand & e)
|
|||||||
LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
Packet packet(MessageType::OnInputCommand, m_SendPacketID);
|
m_InputCommandBuffer.push_back(e);
|
||||||
packet.WriteString(e.Command);
|
LOG_INFO("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
||||||
packet.WritePrimitive(e.PlayerID);
|
|
||||||
packet.WritePrimitive(e.Value);
|
|
||||||
send(packet);
|
|
||||||
LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -285,6 +283,19 @@ EntityID Client::createPlayer()
|
|||||||
return entityID;
|
return entityID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client::sendInputCommands()
|
||||||
|
{
|
||||||
|
if (m_InputCommandBuffer.size() > 0) {
|
||||||
|
Packet packet(MessageType::OnInputCommand, m_SendPacketID);
|
||||||
|
for (int i = 0; i < m_InputCommandBuffer.size(); i++) {
|
||||||
|
packet.WriteString(m_InputCommandBuffer[i].Command);
|
||||||
|
packet.WritePrimitive(m_InputCommandBuffer[i].Value);
|
||||||
|
}
|
||||||
|
send(packet);
|
||||||
|
m_InputCommandBuffer.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool Client::clientServerMapsHasEntity(EntityID clientEntityID)
|
bool Client::clientServerMapsHasEntity(EntityID clientEntityID)
|
||||||
{
|
{
|
||||||
return m_ClientIDToServerID.find(clientEntityID) != m_ClientIDToServerID.end();
|
return m_ClientIDToServerID.find(clientEntityID) != m_ClientIDToServerID.end();
|
||||||
@@ -296,7 +307,7 @@ bool Client::serverClientMapsHasEntity(EntityID serverEntityID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID)
|
void Client::insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID)
|
||||||
{
|
{
|
||||||
m_ServerIDToClientID.insert(std::make_pair(serverEntityID, clientEntityID));
|
m_ServerIDToClientID.insert(std::make_pair(serverEntityID, clientEntityID));
|
||||||
m_ClientIDToServerID.insert(std::make_pair(clientEntityID, serverEntityID));
|
m_ClientIDToServerID.insert(std::make_pair(clientEntityID, serverEntityID));
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ void Server::Start(World* world, EventBroker* eventBroker)
|
|||||||
{
|
{
|
||||||
m_World = world;
|
m_World = world;
|
||||||
m_EventBroker = eventBroker;
|
m_EventBroker = eventBroker;
|
||||||
|
// Subscribe to events
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Server::OnInputCommand);
|
||||||
for (size_t i = 0; i < MAXCONNECTIONS; i++) {
|
for (size_t i = 0; i < MAXCONNECTIONS; i++) {
|
||||||
m_StopTimes[i] = std::clock();
|
m_StopTimes[i] = std::clock();
|
||||||
}
|
}
|
||||||
@@ -22,6 +24,7 @@ void Server::Start(World* world, EventBroker* eventBroker)
|
|||||||
void Server::Update()
|
void Server::Update()
|
||||||
{
|
{
|
||||||
readFromClients();
|
readFromClients();
|
||||||
|
m_EventBroker->Process<Server>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -207,12 +210,26 @@ void Server::disconnect(int i)
|
|||||||
|
|
||||||
void Server::parseOnInputCommand(Packet& packet)
|
void Server::parseOnInputCommand(Packet& packet)
|
||||||
{
|
{
|
||||||
Events::InputCommand e;
|
int playerID = -1;
|
||||||
e.Command = packet.ReadString();
|
// Check which player it was who sent the message
|
||||||
e.PlayerID = packet.ReadPrimitive<int>();
|
for (int i = 0; i < MAXCONNECTIONS; i++) {
|
||||||
e.Value = packet.ReadPrimitive<float>();
|
// if the player is connected set playerID to the correct PlayerID
|
||||||
m_EventBroker->Publish(e);
|
if (m_PlayerDefinitions[i].Endpoint.address() == m_ReceiverEndpoint.address()
|
||||||
LOG_DEBUG("Server::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
&& m_PlayerDefinitions[i].Endpoint.port() == m_ReceiverEndpoint.port()) {
|
||||||
|
playerID = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (playerID != -1) {
|
||||||
|
while (packet.DataReadSize() < packet.Size()) {
|
||||||
|
Events::InputCommand e;
|
||||||
|
e.Command = packet.ReadString();
|
||||||
|
e.PlayerID = playerID; // Set correct player id
|
||||||
|
e.Value = packet.ReadPrimitive<float>();
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
LOG_DEBUG("Server::parseOnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::parseOnPlayerDamage(Packet & packet)
|
void Server::parseOnPlayerDamage(Packet & packet)
|
||||||
@@ -222,7 +239,7 @@ void Server::parseOnPlayerDamage(Packet & packet)
|
|||||||
e.PlayerDamagedID = packet.ReadPrimitive<EntityID>();
|
e.PlayerDamagedID = packet.ReadPrimitive<EntityID>();
|
||||||
e.TypeOfDamage = packet.ReadString();
|
e.TypeOfDamage = packet.ReadString();
|
||||||
m_EventBroker->Publish(e);
|
m_EventBroker->Publish(e);
|
||||||
LOG_DEBUG("Server::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.DamageAmount, e.PlayerDamagedID, e.TypeOfDamage.c_str());
|
LOG_DEBUG("Server::parseOnPlayerDamage: Command is %s. Value is %f. PlayerID is %i.", e.DamageAmount, e.PlayerDamagedID, e.TypeOfDamage.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::parseConnect(Packet& packet)
|
void Server::parseConnect(Packet& packet)
|
||||||
@@ -230,7 +247,8 @@ void Server::parseConnect(Packet& packet)
|
|||||||
LOG_INFO("Parsing connections");
|
LOG_INFO("Parsing connections");
|
||||||
// Check if player is already connected
|
// Check if player is already connected
|
||||||
for (int i = 0; i < MAXCONNECTIONS; i++) {
|
for (int i = 0; i < MAXCONNECTIONS; i++) {
|
||||||
if (m_PlayerDefinitions[i].Endpoint.address() == m_ReceiverEndpoint.address()) {
|
if (m_PlayerDefinitions[i].Endpoint.address() == m_ReceiverEndpoint.address() &&
|
||||||
|
m_PlayerDefinitions[i].Endpoint.port() == m_ReceiverEndpoint.port()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -312,3 +330,9 @@ EntityID Server::createPlayer()
|
|||||||
ComponentWrapper player = m_World->AttachComponent(entityID, "Player");
|
ComponentWrapper player = m_World->AttachComponent(entityID, "Player");
|
||||||
return entityID;
|
return entityID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Server::OnInputCommand(const Events::InputCommand & e)
|
||||||
|
{
|
||||||
|
LOG_INFO("Server::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user