From e92119c99ea77765e3391aec483b386d209ae91e Mon Sep 17 00:00:00 2001 From: stiffly Date: Tue, 8 Dec 2015 16:13:53 +0100 Subject: [PATCH 1/2] WIP trying to get Eventsystem to work in client. --- include/Engine/Network/Client.h | 9 ++++++++- include/Game/Game.h | 2 ++ src/Engine/Network/Client.cpp | 19 ++++++++++++++++--- src/Game/Game.cpp | 16 +++++++++------- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index f1d60c16..83ec0535 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -10,6 +10,8 @@ #include "Network/MessageType.h" #include "Network/NetworkDefines.h" +#include "Core/EventBroker.h" +#include "Core/EKeyDown.h" class Client @@ -17,7 +19,7 @@ class Client public: Client(); ~Client(); - void Start(); + void Start(EventBroker* eventBroker); void Close(); private: @@ -54,6 +56,11 @@ private: bool m_ShouldDrawGameBoard = true; std::string m_PlayerName; bool m_ThreadIsRunning = true; + + // Events + EventBroker* m_EventBroker; + EventRelay m_EKeyDown; + bool OnKeyDown(const Events::KeyDown &e); }; #endif diff --git a/include/Game/Game.h b/include/Game/Game.h index 04c5cc9d..bb1e3b49 100644 --- a/include/Game/Game.h +++ b/include/Game/Game.h @@ -37,6 +37,8 @@ private: // Network methods void NetworkFunction(); + // Network events + EventRelay m_EKeyDown; }; diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 53ec3d9f..602cdbe5 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -5,9 +5,12 @@ using namespace boost::asio::ip; Client::Client() : m_Socket(m_IOService) { + //m_EventBroker = eventBroker; // Set up network stream m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string("192.168.1.6"), 13); - //Start(); // All logic happens here + + + //EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &Client::OnKeyDown); } Client::~Client() @@ -15,8 +18,12 @@ Client::~Client() } -void Client::Start() +void Client::Start(EventBroker* eventBroker) { + // Subscribe to events + m_EventBroker = eventBroker; + m_EKeyDown = decltype(m_EKeyDown)(std::bind(&Client::OnKeyDown, this, std::placeholders::_1)); + m_EventBroker->Subscribe(m_EKeyDown); std::cout << "Please enter you name: "; std::cin >> m_PlayerName; while (m_PlayerName.size() > 7) { @@ -91,7 +98,7 @@ void Client::DisplayLoop() } } if (m_ShouldDrawGameBoard) - DrawBoard(); + //DrawBoard(); boost::this_thread::sleep(boost::posix_time::millisec(100)); } } @@ -331,4 +338,10 @@ void Client::SendInput() memset(dataPackage, 0, INPUTSIZE); delete[] dataPackage; +} + +bool Client::OnKeyDown(const Events::KeyDown& event) +{ + std::cout << event.KeyCode; + return true; } \ No newline at end of file diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index 4f2f0bc5..9c523c4b 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -39,7 +39,8 @@ Game::Game(int argc, char* argv[]) m_World = new HardcodedTestWorld(); // TEMP: Invoke network - boost::thread workerThread(&Game::NetworkFunction, this); + + boost::thread workerThread(&Game::NetworkFunction, this); m_LastTime = glfwGetTime(); } @@ -56,6 +57,7 @@ void Game::Tick() double currentTime = glfwGetTime(); double dt = currentTime - m_LastTime; m_LastTime = currentTime; + m_EventBroker->Process(); m_EventBroker->Swap(); m_InputManager->Update(dt); @@ -74,10 +76,10 @@ void Game::Tick() void Game::NetworkFunction() { - std::string inputMessage; - std::cout << "Start client or server? (c/s)" << std::endl; - std::cin >> inputMessage; - if (inputMessage == "c" || inputMessage == "C") { - m_Client.Start(); - } + std::string inputMessage; + std::cout << "Start client or server? (c/s)" << std::endl; + std::cin >> inputMessage; + if (inputMessage == "c" || inputMessage == "C") { + m_Client.Start(m_EventBroker); + } } \ No newline at end of file From 27b44d2511e1ce4ad3506f529ba86e090d05a165 Mon Sep 17 00:00:00 2001 From: stiffly Date: Tue, 8 Dec 2015 16:41:48 +0100 Subject: [PATCH 2/2] Input events for Client done. Instead of windows getAsyncKeyState(); --- include/Engine/Network/Client.h | 3 +- src/Engine/Network/Client.cpp | 89 +++++++++++++++------------------ src/Game/Game.cpp | 7 +-- 3 files changed, 46 insertions(+), 53 deletions(-) diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 54d83355..b9c1abcc 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -7,6 +7,7 @@ #include #include #include +#include // For input event #include "Network/MessageType.h" #include "Network/NetworkDefines.h" @@ -40,7 +41,7 @@ private: void ParsePing(); void ParseServerPing(); void ParseSnapshot(char* data, size_t length); - void SendInput(); + //void SendInput(); void SendDebugInput(); void DrawBoard(); diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 7ef2c210..9e9e6ed4 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -51,7 +51,7 @@ void Client::Start(EventBroker* eventBroker) threads.create_thread(boost::bind(&Client::DisplayLoop, this)); threads.create_thread(boost::bind(&Client::ReadFromServer, this)); - threads.create_thread(boost::bind(&Client::InputLoop, this)); + //threads.create_thread(boost::bind(&Client::InputLoop, this)); threads.join_all(); } @@ -82,7 +82,7 @@ void Client::InputLoop() int testTimeShit2 = (1000 * (currentTime - previousInputTime) / (double)CLOCKS_PER_SEC); if (intervallMs < (1000 * (currentTime - previousInputTime) / (double)CLOCKS_PER_SEC)) { if (m_PlayerID != -1) { - SendInput(); + //SendInput(); } previousInputTime = currentTime; } @@ -300,58 +300,49 @@ void Client::SendDebugInput() m_ReceiverEndpoint, 0); } - if (GetAsyncKeyState('C')) { - Connect(); - } - - if (GetAsyncKeyState('Q')) { - Disconnect(); - } - memset(dataPackage, 0, INPUTSIZE); - delete[] dataPackage; -} - -void Client::SendInput() -{ - char* dataPackage = new char[INPUTSIZE]; // The package that will be sent to the server, when filled - if (GetAsyncKeyState('W')) { - int len = CreateMessage(MessageType::Event, "+Forward", dataPackage); - m_Socket.send_to(boost::asio::buffer( - dataPackage, - len), - m_ReceiverEndpoint, 0); - } - if (GetAsyncKeyState('A')) { - int len = CreateMessage(MessageType::Event, "-Right", dataPackage); - m_Socket.send_to(boost::asio::buffer( - dataPackage, - len), - m_ReceiverEndpoint, 0); - } - if (GetAsyncKeyState('S')) { - int len = CreateMessage(MessageType::Event, "-Forward", dataPackage); - m_Socket.send_to(boost::asio::buffer( - dataPackage, - len), - m_ReceiverEndpoint, 0); - } - if (GetAsyncKeyState('D')) { - int len = CreateMessage(MessageType::Event, "+Right", dataPackage); - m_Socket.send_to(boost::asio::buffer( - dataPackage, - len), - m_ReceiverEndpoint, 0); - } - if (GetAsyncKeyState('V')) { - Disconnect(); - } - memset(dataPackage, 0, INPUTSIZE); delete[] dataPackage; } bool Client::OnKeyDown(const Events::KeyDown& event) { - std::cout << event.KeyCode; + 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); + } + 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); + } + 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); + } + 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); + } + if (event.KeyCode == GLFW_KEY_V) { + Disconnect(); + } + if (event.KeyCode == GLFW_KEY_C) { + Connect(); + } + + memset(dataPackage, 0, INPUTSIZE); + delete[] dataPackage; return true; } \ No newline at end of file diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index 53f591ba..b9886c18 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -57,15 +57,16 @@ void Game::Tick() double currentTime = glfwGetTime(); double dt = currentTime - m_LastTime; m_LastTime = currentTime; - m_EventBroker->Process(); m_EventBroker->Swap(); m_InputManager->Update(dt); - m_Renderer->Update(dt); m_EventBroker->Swap(); - m_RenderQueueFactory->Update(m_World); + // DO SYSTEM SHIT HERE + m_EventBroker->Process(); + m_Renderer->Update(dt); + m_RenderQueueFactory->Update(m_World); m_Renderer->Draw(m_RenderQueueFactory->RenderQueues()); m_EventBroker->Swap();