Shadowrun: Awakened 29 September 2011 - Build 871
Public Member Functions
SraNetwork::CreateCharacterMessage Class Reference

#include <CreateCharacterMessage.h>

Inheritance diagram for SraNetwork::CreateCharacterMessage:

List of all members.

Public Member Functions

 CreateCharacterMessage (void)
virtual SraPacketcreatePacketFromData (const unsigned char *data)
virtual void process (MessageData *message)
 ~CreateCharacterMessage (void)

Detailed Description

Definition at line 6 of file CreateCharacterMessage.h.


Constructor & Destructor Documentation

SraNetwork::CreateCharacterMessage::CreateCharacterMessage ( void  )

Definition at line 9 of file CreateCharacterMessage.cpp.

    {
    }
SraNetwork::CreateCharacterMessage::~CreateCharacterMessage ( void  )

Definition at line 14 of file CreateCharacterMessage.cpp.

    {
    }

Member Function Documentation

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;
        }
    }

The documentation for this class was generated from the following files:

Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.

GNU Lesser General Public License 3 Sourceforge.net