From 6da5fd1263a8c831fe3a87811412ee73d05f13b0 Mon Sep 17 00:00:00 2001 From: Jocke Date: Wed, 16 Dec 2015 15:47:51 +0100 Subject: [PATCH] Restructured code and added bool to stop client from spamming Snapshots to a server when it wasn't connected to one. --- include/Engine/Network/Client.h | 52 ++++++++++++++++----------------- include/Engine/Network/Server.h | 2 +- src/Engine/Network/Client.cpp | 7 ++++- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 21f6ec61..00d05a94 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -27,57 +27,57 @@ public: void Start(World* world, EventBroker* eventBroker); void Update(); void Close(); -private: - void ReadFromServer(); - void SendSnapshotToServer(); - int Receive(char* data, size_t length); - void Send(Package& message); - int CreateMessage(MessageType type, std::string message, char* data); - void Connect(); - void Disconnect(); - void Ping(); - void MoveMessageHead(char*& data, size_t& length, size_t stepSize); - void ParseMessageType(Package& package); - void ParseEventMessage(Package& package); - void ParseConnect(Package& package); - void ParsePing(); - void ParseServerPing(); - void ParseSnapshot(Package& package); - void CreateNewPlayer(int i); - void IdentifyPacketLoss(); +private: // udp stuff boost::asio::ip::udp::endpoint m_ReceiverEndpoint; boost::asio::io_service m_IOService; boost::asio::ip::udp::socket m_Socket; - + //Connection logic + bool m_IsConnected = false; // Packet loss logic unsigned int m_PacketID = 0; unsigned int m_PreviousPacketID = 0; unsigned int m_SendPacketID = 0; - // Game Logic + glm::vec2 m_PlayerPositions[MAXCONNECTIONS]; + PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS]; std::vector m_PlayersToCreate; - - World* m_World; - int m_PlayerID = -1; - glm::vec2 m_PlayerPositions[MAXCONNECTIONS]; - PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS]; SnapshotDefinitions m_NextSnapshot; std::clock_t m_StartPingTime; double m_DurationOfPingTime; std::string m_PlayerName; bool m_ThreadIsRunning = true; + int m_PlayerID = -1; + World* m_World; // Use to check if we should send disconnect message // if game is turned of by closing window. bool m_WasStarted = false; IsWASDKeyDown m_IsWASDKeyDown; - // Events EventBroker* m_EventBroker; EventRelay m_EInputCommand; bool OnInputCommand(const Events::InputCommand &e); + + // Network functions + void ReadFromServer(); + void SendSnapshotToServer(); + int Receive(char* data, size_t length); + void Send(Package& message); + int CreateMessage(MessageType type, std::string message, char* data); + void Connect(); + void Disconnect(); + void Ping(); + void MoveMessageHead(char*& data, size_t& length, size_t stepSize); + void ParseMessageType(Package& package); + void ParseEventMessage(Package& package); + void ParseConnect(Package& package); + void ParsePing(); + void ParseServerPing(); + void ParseSnapshot(Package& package); + void CreateNewPlayer(int i); + void IdentifyPacketLoss(); }; #endif diff --git a/include/Engine/Network/Server.h b/include/Engine/Network/Server.h index fb49e707..65a69bba 100644 --- a/include/Engine/Network/Server.h +++ b/include/Engine/Network/Server.h @@ -50,7 +50,7 @@ private: void ReadFromClients(); void InputLoop(); - + // Network functions int Receive(char* data, size_t length); void Send(Package& package, int playerID); void Send(Package& package); diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index a4199b8e..b980bfde 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -56,6 +56,7 @@ void Client::Close() if (m_WasStarted) { Disconnect(); m_ThreadIsRunning = false; + m_IsConnected = false; m_EventBroker->Unsubscribe(m_EInputCommand); } } @@ -78,7 +79,9 @@ void Client::ReadFromServer() } std::clock_t currentTime = std::clock(); if (snapshotInterval < (1000 * (currentTime - previousSnapshotMessage) / (double)CLOCKS_PER_SEC)) { - SendSnapshotToServer(); + if (m_IsConnected) { + SendSnapshotToServer(); + } previousSnapshotMessage = currentTime; } } @@ -168,6 +171,7 @@ void Client::ParseConnect(Package& package) m_PacketID = package.PopFrontPrimitive(); m_PreviousPacketID = m_PacketID; m_PlayerID = package.PopFrontPrimitive(); + m_IsConnected = true; std::cout << m_PacketID << ": I am player: " << m_PlayerID << std::endl; } @@ -267,6 +271,7 @@ void Client::Connect() void Client::Disconnect() { + m_IsConnected = false; Package message(MessageType::Connect, m_SendPacketID); message.AddString("+Disconnect"); Send(message);