Server accepts and creates the character's data

This commit is contained in:
Kayne Ruse
2014-12-02 23:11:08 +11:00
parent f50406d69f
commit 0e666d3203
4 changed files with 72 additions and 37 deletions
+10 -1
View File
@@ -73,10 +73,19 @@ InWorld::InWorld(int* const argClientIndex, int* const argAccountIndex):
shutDownButton.SetText("Shut Down"); shutDownButton.SetText("Shut Down");
//load the tilesheet //load the tilesheet
//TODO: add the tilesheet to the map system? //TODO: add the tilesheet to the map system
//TODO: Tile size and tile sheet should be loaded elsewhere //TODO: Tile size and tile sheet should be loaded elsewhere
tileSheet.Load(config["dir.tilesets"] + "overworld.bmp", 32, 32); tileSheet.Load(config["dir.tilesets"] + "overworld.bmp", 32, 32);
//Send the character data
//TODO: login scene, prompt, etc.
CharacterPacket newPacket;
newPacket.type = SerialPacketType::CHARACTER_LOAD;
strncpy(newPacket.handle, config["client.handle"].c_str(), PACKET_STRING_SIZE);
strncpy(newPacket.avatar, config["client.avatar"].c_str(), PACKET_STRING_SIZE);
newPacket.accountIndex = accountIndex;
network.SendTo(Channels::SERVER, &newPacket);
//debug //debug
// //
} }
+4 -3
View File
@@ -92,9 +92,10 @@ private:
void SaveServerState(); void SaveServerState();
//character management //character management
// void HandleCharacterNew(CharacterPacket* const); void HandleCharacterCreate(CharacterPacket* const);
// void HandleCharacterDelete(CharacterPacket* const); void HandleCharacterDelete(CharacterPacket* const);
// void HandleCharacterUpdate(CharacterPacket* const); void HandleCharacterLoad(CharacterPacket* const);
void HandleCharacterUnload(CharacterPacket* const);
//mismanagement //mismanagement
// void HandleSynchronize(ClientPacket* const); // void HandleSynchronize(ClientPacket* const);
+14 -14
View File
@@ -274,6 +274,20 @@ void ServerApplication::HandlePacket(SerialPacket* const argPacket) {
HandleRegionRequest(static_cast<RegionPacket*>(argPacket)); HandleRegionRequest(static_cast<RegionPacket*>(argPacket));
break; break;
//character management
case SerialPacketType::CHARACTER_CREATE:
HandleCharacterCreate(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::CHARACTER_DELETE:
HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::CHARACTER_LOAD:
HandleCharacterLoad(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::CHARACTER_UNLOAD:
HandleCharacterUnload(static_cast<CharacterPacket*>(argPacket));
break;
/* /*
case SerialPacketType::QUERY_CHARACTER_EXISTS: case SerialPacketType::QUERY_CHARACTER_EXISTS:
// HandleCharacterStatsRequest(static_cast<RegionPacket*>(argPacket)); // HandleCharacterStatsRequest(static_cast<RegionPacket*>(argPacket));
@@ -288,20 +302,6 @@ void ServerApplication::HandlePacket(SerialPacket* const argPacket) {
// HandleCharacterStatsRequest(static_cast<RegionPacket*>(argPacket)); // HandleCharacterStatsRequest(static_cast<RegionPacket*>(argPacket));
break; break;
//character management
case SerialPacketType::CHARACTER_CREATE:
// HandleCharacterNew(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::CHARACTER_DELETE:
// HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::CHARACTER_LOAD:
// HandleCharacterNew(static_cast<CharacterPacket*>(argPacket));
break;
case SerialPacketType::CHARACTER_UNLOAD:
// HandleCharacterDelete(static_cast<CharacterPacket*>(argPacket));
break;
//character movement //character movement
case SerialPacketType::CHARACTER_SET_ROOM: case SerialPacketType::CHARACTER_SET_ROOM:
// HandleCharacterUpdate(static_cast<CharacterPacket*>(argPacket)); // HandleCharacterUpdate(static_cast<CharacterPacket*>(argPacket));
+44 -19
View File
@@ -306,45 +306,70 @@ void ServerApplication::HandleRegionRequest(RegionPacket* const argPacket) {
network.SendTo(argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket)); network.SendTo(argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket));
} }
/*
//------------------------- //-------------------------
//Character Management //Character Management
//------------------------- //-------------------------
//SET: entities void ServerApplication::HandleCharacterCreate(CharacterPacket* const argPacket) {
void ServerApplication::HandleCharacterNew(CharacterPacket* const argPacket) { int characterIndex = characterMgr.Create(argPacket->accountIndex, argPacket->handle, argPacket->avatar);
//NOTE: misnomer, try to load the character first
int characterIndex = characterMgr.Load(argPacket->accountIndex, argPacket->handle, argPacket->avatar);
//cannot load or create
if (characterIndex < 0) { if (characterIndex < 0) {
//build the error message //build the error message
std::ostringstream msg; std::ostringstream msg;
if (characterIndex == -1) { msg << "Character already exists: " << argPacket->handle;
msg << "Character already loaded: ";
}
else if (characterIndex == -2) {
msg << "Character already exists: ";
}
msg << argPacket->handle;
//create, fill and send the packet //build & send the packet
TextPacket newPacket; TextPacket newPacket;
newPacket.type = SerialPacketType::CHARACTER_REJECTION; newPacket.type = SerialPacketType::CHARACTER_REJECTION;
memset(newPacket.name, 0, PACKET_STRING_SIZE);
strncpy(newPacket.text, msg.str().c_str(), PACKET_STRING_SIZE); strncpy(newPacket.text, msg.str().c_str(), PACKET_STRING_SIZE);
network.SendTo(argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket)); network.SendTo(argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket));
return; return;
} }
//send this new character to all clients //send this character to the player
CharacterPacket newPacket; CharacterPacket newPacket;
newPacket.type = SerialPacketType::CHARACTER_CREATE; newPacket.type = SerialPacketType::CHARACTER_CREATE;
CopyCharacterToPacket(&newPacket, characterIndex); //TODO?
PumpPacket(&newPacket);
} }
void ServerApplication::HandleCharacterDelete(CharacterPacket* const argPacket) {
//TODO
}
void ServerApplication::HandleCharacterLoad(CharacterPacket* const argPacket) {
int characterIndex = characterMgr.Load(argPacket->accountIndex, argPacket->handle, argPacket->avatar);
if (characterIndex < 0) {
//build the error message
std::ostringstream msg;
if (characterIndex == -1)
msg << "Character already loaded: ";
if (characterIndex == -1)
msg << "Character name is taken: ";
msg << argPacket->handle;
//build & send the packet
TextPacket newPacket;
newPacket.type = SerialPacketType::CHARACTER_REJECTION;
strncpy(newPacket.text, msg.str().c_str(), PACKET_STRING_SIZE);
network.SendTo(argPacket->srcAddress, static_cast<SerialPacket*>(&newPacket));
return;
}
//send this character to the player
CharacterPacket newPacket;
newPacket.type = SerialPacketType::CHARACTER_CREATE;
//TODO?
}
void ServerApplication::HandleCharacterUnload(CharacterPacket* const argPacket) {
//TODO
}
/*
//SET: entities //SET: entities
void ServerApplication::HandleCharacterDelete(CharacterPacket* const argPacket) { void ServerApplication::HandleCharacterDelete(CharacterPacket* const argPacket) {
//NOTE: Disconnecting only unloads a character, this explicitly deletes it //NOTE: Disconnecting only unloads a character, this explicitly deletes it