Rearranged the methods

This commit is contained in:
Kayne Ruse
2014-06-06 22:57:10 +10:00
parent 973a2be16b
commit 5c8572d811
2 changed files with 94 additions and 64 deletions
+61 -35
View File
@@ -29,7 +29,7 @@
#include <string> #include <string>
//------------------------- //-------------------------
//Define the public members //public methods
//------------------------- //-------------------------
void ServerApplication::Init(int argc, char** argv) { void ServerApplication::Init(int argc, char** argv) {
@@ -75,17 +75,13 @@ void ServerApplication::Init(int argc, char** argv) {
//Setup the objects //Setup the objects
//------------------------- //-------------------------
//setup the map object accountMgr.SetDatabase(database);
regionPager.GetAllocator()->SetLuaState(luaState); characterMgr.SetDatabase(database);
regionPager.GetFormat()->SetLuaState(luaState);
regionPager.GetFormat()->SetSaveDir(config["dir.maps"] + config["map.savename"]);
std::cout << "Prepared the map system" << std::endl;
//push the pager onto the lua registry combatMgr.SetLuaState(luaState);
lua_pushstring(luaState, "pager"); roomMgr.SetLuaState(luaState);
lua_pushlightuserdata(luaState, reinterpret_cast<void*>(&regionPager));
lua_settable(luaState, LUA_REGISTRYINDEX); std::cout << "Internal managers ready" << std::endl;
std::cout << "Registered the map system in lua" << std::endl;
//------------------------- //-------------------------
//Run the startup scripts //Run the startup scripts
@@ -103,16 +99,21 @@ void ServerApplication::Init(int argc, char** argv) {
} }
std::cout << "Completed lua's setup script" << std::endl; std::cout << "Completed lua's setup script" << std::endl;
//-------------------------
//debug output //debug output
//-------------------------
std::cout << "Internal sizes:" << std::endl; std::cout << "Internal sizes:" << std::endl;
std::cout << "\tsizeof(SerialPacket): " << sizeof(SerialPacket) << std::endl; std::cout << "\tTile Size: " << sizeof(Region::type_t) << std::endl;
std::cout << "\tPACKET_BUFFER_SIZE: " << PACKET_BUFFER_SIZE << std::endl; std::cout << "\tRegion Format: " << REGION_WIDTH << ", " << REGION_HEIGHT << ", " << REGION_DEPTH << << std::endl;
std::cout << "\tRegion Content Footprint: " << REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH * sizeof(Region::type_t) << std::endl;
std::cout << "\tPACKET_BUFFER_SIZE (max size): " << PACKET_BUFFER_SIZE << std::endl;
//-------------------------
//finalize the startup //finalize the startup
std::cout << "Startup completed successfully" << std::endl; //-------------------------
//debugging std::cout << "Startup completed successfully" << std::endl;
//
} }
void ServerApplication::Proc() { void ServerApplication::Proc() {
@@ -156,7 +157,7 @@ void ServerApplication::Quit() {
} }
//------------------------- //-------------------------
//Define the network switch //handle incoming traffic
//------------------------- //-------------------------
void ServerApplication::HandlePacket(SerialPacket packet) { void ServerApplication::HandlePacket(SerialPacket packet) {
@@ -191,9 +192,7 @@ void ServerApplication::HandlePacket(SerialPacket packet) {
HandleCharacterDelete(packet); HandleCharacterDelete(packet);
break; break;
case SerialPacketType::CHARACTER_UPDATE: case SerialPacketType::CHARACTER_UPDATE:
HandleCharacterUpdate(packet); case SerialPacketType::CHARACTER_STATS_REQUEST: //TODO: ?
break;
case SerialPacketType::CHARACTER_STATS_REQUEST:
HandleCharacterUpdate(packet); HandleCharacterUpdate(packet);
break; break;
@@ -213,7 +212,7 @@ void ServerApplication::HandlePacket(SerialPacket packet) {
} }
//------------------------- //-------------------------
//Define the network handlers //basic connections
//------------------------- //-------------------------
void ServerApplication::HandleBroadcastRequest(SerialPacket packet) { void ServerApplication::HandleBroadcastRequest(SerialPacket packet) {
@@ -344,6 +343,37 @@ void ServerApplication::HandleShutdown(SerialPacket packet) {
std::cout << "Shutdown signal accepted" << std::endl; std::cout << "Shutdown signal accepted" << std::endl;
} }
//-------------------------
//map management
//-------------------------
void ServerApplication::HandleRegionRequest(SerialPacket packet) {
//TODO: this should be moved elsewhere
packet.meta.type = SerialPacket::Type::REGION_CONTENT;
packet.regionInfo.region = regionPager.GetRegion(packet.regionInfo.x, packet.regionInfo.y);
//send the content
network.SendTo(&packet.meta.srcAddress, &packet);
}
//-------------------------
//combat management
//-------------------------
//TODO: combat management
//-------------------------
//Character Management
//-------------------------
void ServerApplication::HandleCharacterNew(SerialPacket) {
//TODO: fill this
}
void ServerApplication::HandleCharacterDelete(SerialPacket) {
//TODO: fill this
}
void ServerApplication::HandleCharacterUpdate(SerialPacket packet) { void ServerApplication::HandleCharacterUpdate(SerialPacket packet) {
//TODO: this should be moved elsewhere //TODO: this should be moved elsewhere
if (characterMap.find(packet.characterInfo.characterIndex) == characterMap.end()) { if (characterMap.find(packet.characterInfo.characterIndex) == characterMap.end()) {
@@ -357,14 +387,17 @@ void ServerApplication::HandleCharacterUpdate(SerialPacket packet) {
PumpPacket(packet); PumpPacket(packet);
} }
void ServerApplication::HandleRegionRequest(SerialPacket packet) { //-------------------------
//TODO: this should be moved elsewhere //enemy management
packet.meta.type = SerialPacket::Type::REGION_CONTENT; //-------------------------
packet.regionInfo.region = regionPager.GetRegion(packet.regionInfo.x, packet.regionInfo.y);
//send the content //TODO: enemy management
network.SendTo(&packet.meta.srcAddress, &packet);
} //-------------------------
//utility methods
//-------------------------
//TODO: a function that only sends to characters in a certain proximity
void ServerApplication::PumpPacket(SerialPacket packet) { void ServerApplication::PumpPacket(SerialPacket packet) {
//NOTE: I don't really like this, but it'll do for now //NOTE: I don't really like this, but it'll do for now
@@ -380,10 +413,3 @@ void ServerApplication::PumpCharacterUnload(int uid) {
delPacket.characterInfo.characterIndex = uid; delPacket.characterInfo.characterIndex = uid;
PumpPacket(delPacket); PumpPacket(delPacket);
} }
//-------------------------
//Define the utility methods
//-------------------------
//TODO: utility methods
+33 -29
View File
@@ -24,22 +24,19 @@
//server specific stuff //server specific stuff
#include "client_data.hpp" #include "client_data.hpp"
#include "account_data.hpp" #include "account_manager.hpp"
#include "character_data.hpp" #include "character_manager.hpp"
#include "combat_data.hpp" #include "combat_manager.hpp"
#include "enemy_factory_generic.hpp" #include "room_manager.hpp"
//maps //maps
#include "map_allocator.hpp" #include "map_allocator.hpp"
#include "map_file_format.hpp" #include "map_file_format.hpp"
#include "region_pager.hpp" #include "region_pager.hpp"
//networking //common utilities
#include "udp_network_utility.hpp" #include "udp_network_utility.hpp"
//common
#include "config_utility.hpp" #include "config_utility.hpp"
#include "vector2.hpp"
//APIs //APIs
#include "lua/lua.hpp" #include "lua/lua.hpp"
@@ -51,10 +48,9 @@
#include <string> #include <string>
//The main application class //The main application class
//TODO: modulate this god class
class ServerApplication { class ServerApplication {
public: public:
//standard functions //public methods
ServerApplication() = default; ServerApplication() = default;
~ServerApplication() = default; ~ServerApplication() = default;
@@ -63,47 +59,55 @@ public:
void Quit(); void Quit();
private: private:
//handle incoming traffic
void HandlePacket(SerialPacket); void HandlePacket(SerialPacket);
//handle incoming traffic //basic connections
void HandleBroadcastRequest(SerialPacket); void HandleBroadcastRequest(SerialPacket);
void HandleJoinRequest(SerialPacket); void HandleJoinRequest(SerialPacket);
void HandleSynchronize(SerialPacket);
void HandleDisconnect(SerialPacket); void HandleDisconnect(SerialPacket);
void HandleShutdown(SerialPacket); void HandleShutdown(SerialPacket);
void HandleCharacterUpdate(SerialPacket);
//map management
void HandleRegionRequest(SerialPacket); void HandleRegionRequest(SerialPacket);
//combat management
//TODO: combat management
//character management
void HandleCharacterNew(SerialPacket);
void HandleCharacterDelete(SerialPacket);
void HandleCharacterUpdate(SerialPacket);
//enemy management
//TODO: enemy management
//mismanagement
void HandleSynchronize(SerialPacket);
//utility methods
//TODO: a function that only sends to characters in a certain proximity //TODO: a function that only sends to characters in a certain proximity
void PumpPacket(SerialPacket); void PumpPacket(SerialPacket);
void PumpCharacterUnload(int uid); void PumpCharacterUnload(int uid);
//TODO: Account management //APIs and utilities
//TODO: character management
//TODO: combat management
//APIs
UDPNetworkUtility network;
sqlite3* database = nullptr; sqlite3* database = nullptr;
lua_State* luaState = nullptr; lua_State* luaState = nullptr;
UDPNetworkUtility network;
ConfigUtility config;
//server tables //server tables
std::map<int, ClientData> clientMap; std::map<int, ClientData> clientMap;
std::map<int, CombatData> combatMap;
std::map<int, EnemyData> enemyMap;
//maps //managers
//TODO: I need to handle multiple map objects AccountManager accountMgr;
//TODO: Unload regions that are distant from any characters CharacterManager characterMgr;
RegionPager<LuaAllocator, LuaFormat> regionPager; CombatManager combatMgr;
EnemyFactoryGeneric enemyFactory; RoomManager roomMgr;
//misc //misc
bool running = true; bool running = true;
ConfigUtility config;
int clientUID = 0; int clientUID = 0;
int combatUID = 0;
int enemyUID = 0;
}; };
#endif #endif