From 7bb5e8ce0dbf2d6090b91b2ba68037ad09970653 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sun, 2 Mar 2014 23:20:37 +1100 Subject: [PATCH] Moving client and player data into manager classes Remember: anything with "manager" in its name organizes a number of other objects, as far as I'm concerned. I'll eventually have a database connection in the PlayerManager class; this'll make it easier to manage the database. --- server/client_manager.cpp | 58 ++++++++++++++++++++++ server/{client.hpp => client_manager.hpp} | 25 +++++++--- server/{player.hpp => player_manager.cpp} | 44 ++++++++++------- server/player_manager.hpp | 59 +++++++++++++++++++++++ 4 files changed, 161 insertions(+), 25 deletions(-) create mode 100644 server/client_manager.cpp rename server/{client.hpp => client_manager.hpp} (70%) rename server/{player.hpp => player_manager.cpp} (57%) create mode 100644 server/player_manager.hpp diff --git a/server/client_manager.cpp b/server/client_manager.cpp new file mode 100644 index 0000000..f17faec --- /dev/null +++ b/server/client_manager.cpp @@ -0,0 +1,58 @@ +/* Copyright: (c) Kayne Ruse 2014 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#include "client_manager.hpp" + +int ClientManager::HandleConnection(IPaddress add) { + ClientEntry c; + c.address = add; + clientMap[counter] = c; + return counter++; +} + +int ClientManager::HandleDisconnection(int i) { + for (auto& it : clientMap) { + if (it.first == i) { + clientMap.erase(it.first); + return 0; + } + } + return -1; +} + +ClientEntry* ClientManager::GetClient(int i) { + for (auto& it : clientMap) { + if (it.first == i) { + return &it.second; + } + } + return nullptr; +} + +ClientEntry* ClientManager::GetClient(IPaddress add) { + for (auto& it : clientMap) { + if (it.second.address.host == add.host && + it.second.address.port == add.port) { + return &it.second; + } + } + return nullptr; +} diff --git a/server/client.hpp b/server/client_manager.hpp similarity index 70% rename from server/client.hpp rename to server/client_manager.hpp index c2d2194..36a5f23 100644 --- a/server/client.hpp +++ b/server/client_manager.hpp @@ -1,4 +1,4 @@ -/* Copyright: (c) Kayne Ruse 2013 +/* Copyright: (c) Kayne Ruse 2014 * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages @@ -19,20 +19,29 @@ * 3. This notice may not be removed or altered from any source * distribution. */ -#ifndef CLIENT_HPP_ -#define CLIENT_HPP_ +#ifndef CLIENTMANAGER_HPP_ +#define CLIENTMANAGER_HPP_ #include "SDL/SDL_net.h" #include -/* Hold the client info. -*/ - -struct Client { +struct ClientEntry { IPaddress address; }; -typedef std::map ClientMap; +class ClientManager { +public: + //returns the internal index + int HandleConnection(IPaddress); + int HandleDisconnection(int i); + + //accessors + ClientEntry* GetClient(int i); + ClientEntry* GetClient(IPaddress); +private: + std::map clientMap; + int counter = 0; +}; #endif diff --git a/server/player.hpp b/server/player_manager.cpp similarity index 57% rename from server/player.hpp rename to server/player_manager.cpp index e709ba4..a708874 100644 --- a/server/player.hpp +++ b/server/player_manager.cpp @@ -1,4 +1,4 @@ -/* Copyright: (c) Kayne Ruse 2013 +/* Copyright: (c) Kayne Ruse 2014 * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages @@ -19,25 +19,35 @@ * 3. This notice may not be removed or altered from any source * distribution. */ -#ifndef PLAYER_HPP_ -#define PLAYER_HPP_ +#include "player_manager.hpp" -#include "vector2.hpp" +int PlayerManager::HandlePlayerCreation(std::string name, std::string avatar) { + // +} -#include -#include +int PlayerManager::HandlePlayerDeletion(int uniqueID) { + // +} -/* Hold the player info. -*/ +int PlayerManager::HandlePlayerLoad(int uniqueID, int clientIndex) { + // +} -struct Player { - int clientIndex; - std::string handle; - std::string avatar; - Vector2 position; - Vector2 motion; -}; +int PlayerManager::HandlePlayerUnload(int uniqueID) { + // +} -typedef std::map PlayerMap; +PlayerEntry* PlayerManager::GetPlayer(int uniqueID) { + for (auto& it : playerMap) { + if (it.first == uniqueID) { + return &it.second; + } + } + return nullptr; +} -#endif +void PlayerManager::Update(double delta) { + for (auto& it : playerMap) { + it.second.position += it.second.motion * delta; + } +} diff --git a/server/player_manager.hpp b/server/player_manager.hpp new file mode 100644 index 0000000..50ba849 --- /dev/null +++ b/server/player_manager.hpp @@ -0,0 +1,59 @@ +/* Copyright: (c) Kayne Ruse 2014 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#ifndef PLAYERMANAGER_HPP_ +#define PLAYERMANAGER_HPP_ + +#include "vector2.hpp" + +#include +#include + +struct PlayerEntry { + int clientIndex; + int mapIndex; + Vector2 position; + Vector2 motion; +}; + +class PlayerManager { +public: + //These functions interact with the database + //*Deletion, *Load and *Unload returns: 0 success, -1 failure + //*Creation returns the uniqueID, but doesn't load + // that object; call *Load directly afterward + + int HandlePlayerCreation (std::string name, std::string avatar); + int HandlePlayerDeletion (int uniqueID); + int HandlePlayerLoad (int uniqueID, int clientIndex); + int HandlePlayerUnload (int uniqueID); + + //basic accessor + PlayerEntry* GetPlayer (int uniqueID); + + //update each player's position + void Update(double delta); +private: + std::map playerMap; + //database connection here +}; + +#endif