diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index fbd590ff..b9c1abcc 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -7,10 +7,13 @@ #include #include #include +#include // For input event #include "Network/MessageType.h" #include "Network/NetworkDefines.h" #include "Network/WinLeakCheck.h" +#include "Core/EventBroker.h" +#include "Core/EKeyDown.h" class Client @@ -18,7 +21,7 @@ class Client public: Client(); ~Client(); - void Start(); + void Start(EventBroker* eventBroker); void Close(); private: @@ -38,7 +41,7 @@ private: void ParsePing(); void ParseServerPing(); void ParseSnapshot(char* data, size_t length); - void SendInput(); + //void SendInput(); void SendDebugInput(); void DrawBoard(); @@ -56,6 +59,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 2931348a..2763b4dd 100644 --- a/include/Game/Game.h +++ b/include/Game/Game.h @@ -40,6 +40,8 @@ private: Client m_Client; // Network methods void NetworkFunction(); + // Network events + EventRelay m_EKeyDown; }; diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 8d4088d3..9e9e6ed4 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() @@ -16,8 +19,12 @@ Client::~Client() _CrtDumpMemoryLeaks(); } -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) { @@ -44,7 +51,7 @@ void Client::Start() 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(); } @@ -75,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; } @@ -92,7 +99,7 @@ void Client::DisplayLoop() } } if (m_ShouldDrawGameBoard) - DrawBoard(); + //DrawBoard(); boost::this_thread::sleep(boost::posix_time::millisec(100)); } } @@ -293,52 +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() +bool Client::OnKeyDown(const Events::KeyDown& event) { char* dataPackage = new char[INPUTSIZE]; // The package that will be sent to the server, when filled - if (GetAsyncKeyState('W')) { + 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 (GetAsyncKeyState('A')) { + 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 (GetAsyncKeyState('S')) { + 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 (GetAsyncKeyState('D')) { + 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 (GetAsyncKeyState('V')) { - Disconnect(); + 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 670d2d13..36ef8877 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(); } @@ -59,11 +60,13 @@ void Game::Tick() 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(); @@ -74,12 +77,12 @@ 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); + } if (inputMessage == "s" || inputMessage == "S") { m_Server.Start(m_World); }