From ce41421dbb81c855e2cea774862017192b77dc73 Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 9 Dec 2015 10:37:40 +0100 Subject: [PATCH 1/3] Added a "StartNetwork" bool to DefaultConfig. --- resources/DefaultConfig.ini | 10 +++++++++- src/Game/Game.cpp | 7 ++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/resources/DefaultConfig.ini b/resources/DefaultConfig.ini index ac7e9ec2..9b81923e 100644 --- a/resources/DefaultConfig.ini +++ b/resources/DefaultConfig.ini @@ -1,8 +1,16 @@ [Debug] + LogLevel=1 + [Video] + Fullscreen=false + VSYNC=false + Width=1280 -Height=720 \ No newline at end of file + +Height=720 +[Networking] +StartNetwork=false \ No newline at end of file diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index d21e64ea..2f63e294 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -38,9 +38,10 @@ Game::Game(int argc, char* argv[]) // Create a TEST WORLD m_World = new HardcodedTestWorld(); - // TEMP: Invoke network - - boost::thread workerThread(&Game::NetworkFunction, this); + + // Invoke network + if(m_Config->Get("Networking.StartNetwork", false) == true) + boost::thread workerThread(&Game::NetworkFunction, this); m_LastTime = glfwGetTime(); } From 2a35c3055ee9b5ee78b062aeb4f75168df4e735a Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 9 Dec 2015 11:08:57 +0100 Subject: [PATCH 2/3] Renamed NetworkDefines.h --> NetworkDefinitions.h --- include/Engine/Network/Client.h | 2 +- .../Network/{NetworkDefines.h => NetworkDefinitions.h} | 0 include/Engine/Network/Server.h | 8 +++++--- 3 files changed, 6 insertions(+), 4 deletions(-) rename include/Engine/Network/{NetworkDefines.h => NetworkDefinitions.h} (100%) diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 2e03f981..94ef3181 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -8,7 +8,7 @@ #include // For input event #include "Network/MessageType.h" -#include "Network/NetworkDefines.h" +#include "Network/NetworkDefinitions.h" #include "Network/PlayerDefinition.h" #include "Network/WinLeakCheck.h" #include "Core/World.h" diff --git a/include/Engine/Network/NetworkDefines.h b/include/Engine/Network/NetworkDefinitions.h similarity index 100% rename from include/Engine/Network/NetworkDefines.h rename to include/Engine/Network/NetworkDefinitions.h diff --git a/include/Engine/Network/Server.h b/include/Engine/Network/Server.h index 9a971f4b..752edc6f 100644 --- a/include/Engine/Network/Server.h +++ b/include/Engine/Network/Server.h @@ -1,15 +1,17 @@ #ifndef Server_h__ #define Server_h__ + #include #include #include #include #include -#include "NetworkDefines.h" -#include "MessageType.h" -#include "Core/World.h" + +#include "Network/MessageType.h" +#include "Network/NetworkDefinitions.h" #include "Network/PlayerDefinition.h" +#include "Core/World.h" class Server { From 247ff09743e198ed1c7cb5bb396b731a8f9a068c Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 9 Dec 2015 13:02:39 +0100 Subject: [PATCH 3/3] Smoother movement over network. Some refactoring on client side. Now uses EKeyUp to determine if a key is pressed. --- include/Engine/Network/Client.h | 9 ++- include/Engine/Network/SnapshotDefinitions.h | 12 ++++ src/Engine/Network/Client.cpp | 73 ++++++++++++++------ 3 files changed, 71 insertions(+), 23 deletions(-) create mode 100644 include/Engine/Network/SnapshotDefinitions.h diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 94ef3181..85c106d0 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -10,10 +10,12 @@ #include "Network/MessageType.h" #include "Network/NetworkDefinitions.h" #include "Network/PlayerDefinition.h" +#include "Network/SnapshotDefinitions.h" #include "Network/WinLeakCheck.h" #include "Core/World.h" #include "Core/EventBroker.h" #include "Core/EKeyDown.h" +#include "Core/EKeyUp.h" class Client @@ -25,8 +27,8 @@ public: void Close(); private: - // Threaded void ReadFromServer(); + void SendToServer(); int Receive(char* data, size_t length); int CreateMessage(MessageType type, std::string message, char* data); @@ -52,6 +54,7 @@ private: glm::vec2 m_PlayerPositions[MAXCONNECTIONS]; //std::string m_PlayerNames[MAXCONNECTIONS]; PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS]; + SnapshotDefinitions m_NextSnapshot; std::clock_t m_StartPingTime; double m_DurationOfPingTime; std::string m_PlayerName; @@ -60,7 +63,9 @@ private: // Events EventBroker* m_EventBroker; EventRelay m_EKeyDown; - bool OnKeyDown(const Events::KeyDown &e); + bool OnKeyDown(const Events::KeyDown &e); + EventRelay m_EKeyUp; + bool OnKeyUp(const Events::KeyUp &e); }; #endif diff --git a/include/Engine/Network/SnapshotDefinitions.h b/include/Engine/Network/SnapshotDefinitions.h new file mode 100644 index 00000000..7f9e4ce5 --- /dev/null +++ b/include/Engine/Network/SnapshotDefinitions.h @@ -0,0 +1,12 @@ +#ifndef SnapshotDefinitions_h__ +#define SnapshotDefinitions_h__ + +struct SnapshotDefinitions +{ + // "+Forward" is 8 characters * sizeof(char) = 8 + char* inputForward = new char[8]; + // "+Right" is 6 characters * sizeof(char) = 6 + char* inputRight = new char[6]; +}; + +#endif \ No newline at end of file diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 5efa796e..9a51202c 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -17,11 +17,15 @@ Client::~Client() void Client::Start(World* world, EventBroker* eventBroker) { - // Subscribe to events m_EventBroker = eventBroker; m_World = world; + + // Subscribe to events m_EKeyDown = decltype(m_EKeyDown)(std::bind(&Client::OnKeyDown, this, std::placeholders::_1)); m_EventBroker->Subscribe(m_EKeyDown); + m_EKeyUp = decltype(m_EKeyUp)(std::bind(&Client::OnKeyUp, this, std::placeholders::_1)); + m_EventBroker->Subscribe(m_EKeyUp); + std::cout << "Please enter you name: "; std::cin >> m_PlayerName; while (m_PlayerName.size() > 7) { @@ -46,11 +50,40 @@ void Client::ReadFromServer() int bytesRead = -1; char readBuf[1024] = { 0 }; + int snapshotInterval = 33; + std::clock_t previousSnapshotMessage = std::clock(); + while (m_ThreadIsRunning) { if (m_Socket.available()) { bytesRead = Receive(readBuf, INPUTSIZE); ParseMessageType(readBuf, bytesRead); } + std::clock_t currentTime = std::clock(); + if (snapshotInterval < (1000 * (currentTime - previousSnapshotMessage) / (double)CLOCKS_PER_SEC)) { + SendToServer(); + previousSnapshotMessage = currentTime; + } + + } +} + +void Client::SendToServer() +{ + if (m_NextSnapshot.inputForward != "") { + char* dataPackage = new char[INPUTSIZE]; // The package that will be sent to the server, when filled + int len = CreateMessage(MessageType::Event, m_NextSnapshot.inputForward, dataPackage); + m_Socket.send_to(boost::asio::buffer( + dataPackage, + len), + m_ReceiverEndpoint, 0); + } + if (m_NextSnapshot.inputRight != "") { + char* dataPackage = new char[INPUTSIZE]; // The package that will be sent to the server, when filled + int len = CreateMessage(MessageType::Event, m_NextSnapshot.inputRight, dataPackage); + m_Socket.send_to(boost::asio::buffer( + dataPackage, + len), + m_ReceiverEndpoint, 0); } } @@ -240,33 +273,18 @@ bool Client::OnKeyDown(const Events::KeyDown& event) { char* dataPackage = new char[INPUTSIZE]; // The package that will be sent to the server, when filled if (event.KeyCode == GLFW_KEY_W) { - int len = CreateMessage(MessageType::Event, "+Forward", dataPackage); - m_Socket.send_to(boost::asio::buffer( - dataPackage, - len), - m_ReceiverEndpoint, 0); + m_NextSnapshot.inputForward = "+Forward"; } if (event.KeyCode == GLFW_KEY_A) { - int len = CreateMessage(MessageType::Event, "-Right", dataPackage); - m_Socket.send_to(boost::asio::buffer( - dataPackage, - len), - m_ReceiverEndpoint, 0); + m_NextSnapshot.inputRight = "-Right"; } if (event.KeyCode == GLFW_KEY_S) { - int len = CreateMessage(MessageType::Event, "-Forward", dataPackage); - m_Socket.send_to(boost::asio::buffer( - dataPackage, - len), - m_ReceiverEndpoint, 0); + m_NextSnapshot.inputForward = "-Forward"; } if (event.KeyCode == GLFW_KEY_D) { - int len = CreateMessage(MessageType::Event, "+Right", dataPackage); - m_Socket.send_to(boost::asio::buffer( - dataPackage, - len), - m_ReceiverEndpoint, 0); + m_NextSnapshot.inputRight = "+Right"; } + if (event.KeyCode == GLFW_KEY_V) { Disconnect(); } @@ -281,6 +299,19 @@ bool Client::OnKeyDown(const Events::KeyDown& event) return true; } +bool Client::OnKeyUp(const Events::KeyUp & e) +{ + if (e.KeyCode == GLFW_KEY_W || e.KeyCode == GLFW_KEY_S) { + m_NextSnapshot.inputForward = ""; + return true; + } + if (e.KeyCode == GLFW_KEY_A || e.KeyCode == GLFW_KEY_D) { + m_NextSnapshot.inputRight = ""; + return true; + } + return false; +} + void Client::CreateNewPlayer(int i) { m_PlayerDefinitions[i].EntityID = m_World->CreateEntity();