Server accepts and creates the character's data
This commit is contained in:
@@ -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
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user