From 58a9d38e266344776aeda44fccbdb512b9aea4b9 Mon Sep 17 00:00:00 2001 From: Jocke Date: Wed, 16 Dec 2015 14:56:53 +0100 Subject: [PATCH] Added a class that client and server inherits from. Class and server now share the same pointer i game. You are now able to start a client and a server on the same computer. --- include/Engine/Network/Client.h | 4 ++-- include/Engine/Network/Network.h | 19 +++++++++++++++ include/Engine/Network/Server.h | 3 ++- include/Game/Game.h | 6 ++--- src/Engine/Network/Client.cpp | 2 +- src/Engine/Network/Network.cpp | 13 +++++++++++ src/Game/Game.cpp | 40 +++++++++++++++++++------------- 7 files changed, 64 insertions(+), 23 deletions(-) create mode 100644 include/Engine/Network/Network.h create mode 100644 src/Engine/Network/Network.cpp diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 80958142..21f6ec61 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -17,9 +17,9 @@ #include "Core/EKeyDown.h" #include "Core/EKeyUp.h" #include "Input/EInputCommand.h" +#include "Network/Network.h" - -class Client +class Client : public Network { public: Client(); diff --git a/include/Engine/Network/Network.h b/include/Engine/Network/Network.h new file mode 100644 index 00000000..e3b9c1ce --- /dev/null +++ b/include/Engine/Network/Network.h @@ -0,0 +1,19 @@ +#ifndef Network_h__ +#define Network_h__ + +#include "Core/World.h" +#include "Core/EventBroker.h" +#include "Network/Package.h" + +class Network +{ +public: + Network(); + ~Network(); + virtual void Start(World* m_world, EventBroker *eventBroker); + virtual void Update(); +protected: + +}; + +#endif \ No newline at end of file diff --git a/include/Engine/Network/Server.h b/include/Engine/Network/Server.h index a9ddceb0..fb49e707 100644 --- a/include/Engine/Network/Server.h +++ b/include/Engine/Network/Server.h @@ -14,8 +14,9 @@ #include "Core/World.h" #include "Core/EventBroker.h" #include "Game/ECreatePlayer.h" +#include "Network/Network.h" -class Server +class Server : public Network { public: Server(); diff --git a/include/Game/Game.h b/include/Game/Game.h index 2ff1d770..1b8f9bcf 100644 --- a/include/Game/Game.h +++ b/include/Game/Game.h @@ -21,6 +21,7 @@ // Network #include +#include "Network/Network.h" #include "Network/Server.h" #include "Network/Client.h" @@ -50,9 +51,8 @@ private: // Network methods void NetworkFunction(); - Client m_Client; - Server m_Server; - bool m_IsClient = false; + Network* m_ClientOrServer; + bool m_IsClientOrServer = false; EventRelay m_EInputCommand; bool debugOnInputCommand(const Events::InputCommand& e); diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 01bc9cba..a4199b8e 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -5,8 +5,8 @@ using namespace boost::asio::ip; Client::Client() : m_Socket(m_IOService) { - // Set up network stream m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string("192.168.1.6"), 13); + // Set up network stream m_NextSnapshot.InputForward = ""; m_NextSnapshot.InputRight = ""; } diff --git a/src/Engine/Network/Network.cpp b/src/Engine/Network/Network.cpp new file mode 100644 index 00000000..51a93407 --- /dev/null +++ b/src/Engine/Network/Network.cpp @@ -0,0 +1,13 @@ +#include "Network/Network.h" + +Network::Network() +{ } + +Network::~Network() +{ } + +void Network::Start(World * m_world, EventBroker * eventBroker) +{ } + +void Network::Update() +{ } \ No newline at end of file diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index a242f64d..6080b8f5 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -20,7 +20,7 @@ Game::Game(int argc, char* argv[]) m_Renderer = new Renderer(m_EventBroker); m_Renderer->SetFullscreen(m_Config->Get("Video.Fullscreen", false)); m_Renderer->SetVSYNC(m_Config->Get("Video.VSYNC", false)); - m_Renderer->SetResolution(Rectangle::Rectangle( + m_Renderer->SetResolution(Rectangle::Rectangle( 0, 0, m_Config->Get("Video.Width", 1280), @@ -53,9 +53,9 @@ Game::Game(int argc, char* argv[]) m_SystemPipeline->AddSystem(); m_SystemPipeline->AddSystem(); m_SystemPipeline->AddSystem(); - // Invoke network - if(m_Config->Get("Networking.StartNetwork", false) == true) - 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(); debugInitialize(); @@ -90,7 +90,9 @@ void Game::Tick() m_EventBroker->Swap(); // Update network - m_IsClient ? m_Client.Update() : m_Server.Update(); + if (m_IsClientOrServer) + m_ClientOrServer->Update(); + // Iterate through systems and update world! m_SystemPipeline->Update(m_World, dt); @@ -133,16 +135,22 @@ void Game::debugTick(double dt) } 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_IsClient = true; - m_Client.Start(m_World, m_EventBroker); - } - if (inputMessage == "s" || inputMessage == "S") { - m_IsClient = false; - m_Server.Start(m_World, m_EventBroker); +{ + std::string inputMessage; + std::cout << "Start client or server? (c/s)" << std::endl; + std::cin >> inputMessage; + if (inputMessage == "c" || inputMessage == "C") { + m_IsClientOrServer = true; + m_ClientOrServer = new Client(); } + if (inputMessage == "s" || inputMessage == "S") { + m_IsClientOrServer = true; + m_ClientOrServer = new Server(); + } + m_ClientOrServer->Start(m_World, m_EventBroker); + // I don't think we are reaching this part of the code right now. + // When server or client is done set it to false. + m_IsClientOrServer = false; + // Destroy it! (with fire) + delete m_ClientOrServer; } \ No newline at end of file