![]() |
Shadowrun: Awakened 29 September 2011 - Build 871
|
#include <CreateCharacterMessage.h>
Inheritance diagram for SraNetwork::CreateCharacterMessage:Public Member Functions | |
| CreateCharacterMessage (void) | |
| virtual SraPacket * | createPacketFromData (const unsigned char *data) |
| virtual void | process (MessageData *message) |
| ~CreateCharacterMessage (void) | |
Definition at line 6 of file CreateCharacterMessage.h.
| SraNetwork::CreateCharacterMessage::CreateCharacterMessage | ( | void | ) |
Definition at line 9 of file CreateCharacterMessage.cpp.
{
}
| SraNetwork::CreateCharacterMessage::~CreateCharacterMessage | ( | void | ) |
Definition at line 14 of file CreateCharacterMessage.cpp.
{
}
| SraPacket * SraNetwork::CreateCharacterMessage::createPacketFromData | ( | const unsigned char * | data | ) | [virtual] |
Implements SraNetwork::SraBaseMessage.
Definition at line 18 of file CreateCharacterMessage.cpp.
{
return (CreateCharacterPacket*)data;
}
| void SraNetwork::CreateCharacterMessage::process | ( | MessageData * | message | ) | [virtual] |
Implements SraNetwork::SraBaseMessage.
Definition at line 23 of file CreateCharacterMessage.cpp.
References SraNetwork::MessageData::address, RakNet::RakString::C_String(), SraNetwork::CreateCharacterPacket::characterInfo, SraNetwork::ClientRegister::checkForValidCharacterInfo(), SraNetwork::SraClientData::clientID, SraNetwork::ClientRegister::createCharacterForPlayer(), SraNetwork::CreateCharacterPacket::Deserialize(), SraNetwork::ReplyPacket::FAIL, SraNetwork::ClientRegister::getClientFromAddress(), SraNetwork::WorldServer::getClientInterface(), SraNetwork::ClientRegister::getInstance(), SraNetwork::ID_CREATE_CHAR, MEDIUM_PRIORITY, SraNetwork::ReplyPacket::messageOpCode, SraNetwork::ReplyPacket::OK, packet, SraNetwork::BasicCharacterInfo::raceId, RELIABLE_ORDERED, SraNetwork::ReplyPacket::replyCode, SraNetwork::ReplyPacket::replyMessage, RakNet::RakPeerInterface::Send(), SraNetwork::ReplyPacket::Serialize(), RakNet::RakString::Serialize(), stream, and SraNetwork::MessageData::stream.
{
printf("Processing a CreateCharacterMessage\n");
RakNet::RakPeerInterface *clientI = SraNetwork::WorldServer::getClientInterface();
if (clientI == NULL)
{
printf("Error: A non existing client is used in CreateCharacterMessage::process\n");
return;
}
ClientRegister* reg = ClientRegister::getInstance();
const SraClientData* client = reg->getClientFromAddress( message->address );
if (client == NULL)
{
printf("Error: A non existing client is used in CreateCharacterMessage::process\n");
return;
}
// The client wants to create a new character
CreateCharacterPacket packet;
packet.Deserialize(&message->stream);
// First check if the data is valid.
RakString resultMessage = "";
BitStream stream;
if (!reg->checkForValidCharacterInfo(&packet.characterInfo, &resultMessage))
{
printf("Failed to crate a character because: %s\n", resultMessage.C_String());
ReplyPacket rp;
rp.replyCode = ReplyPacket::FAIL;
rp.messageOpCode = ID_CREATE_CHAR;
rp.replyMessage = resultMessage;
rp.Serialize(&stream);
clientI->Send( &stream, MEDIUM_PRIORITY,
RELIABLE_ORDERED, 0, message->address, false);
return;
}
// Now try to create the character.
int cId = reg->createCharacterForPlayer( packet.characterInfo.raceId,
message->address, client->clientID);
if (cId == -1)
{
//TODO: We could use a more detailed message here ;)
printf("Failed to create a character without a reason\n");
ReplyPacket rp;
rp.replyCode = ReplyPacket::FAIL;
rp.messageOpCode = ID_CREATE_CHAR;
rp.replyMessage = "Failed to create the character\n";
rp.Serialize(&stream);
clientI->Send( &stream, MEDIUM_PRIORITY,
RELIABLE_ORDERED, 0, message->address, false);
return;
}
else
{
printf("Successfully created a character\n");
// We don't need any message when returning OK
ReplyPacket rp;
rp.replyCode = ReplyPacket::OK;
rp.messageOpCode = ID_CREATE_CHAR;
rp.replyMessage = "";
rp.Serialize(&stream);
clientI->Send( &stream, MEDIUM_PRIORITY,
RELIABLE_ORDERED, 0, message->address, false);
return;
}
}
Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.