コード例 #1
0
ファイル: WorldSocket.cpp プロジェクト: gogo111007/Server
int32 WorldSocket::SendPacket(const WorldPacket &sendPacket)
{
    if (!m_pSHSocket || m_pSHSocket->disconnected())
        return -1;

    try
    {
        m_pSendHeader->Reset(sendPacket.Size(), sendPacket.getMsgCode());

        size_t len = m_pSendHeader->size() + sendPacket.Size();

        m_sendDataHolder.resize(len);

        memset(&m_sendDataHolder[0], 0, len);
        memcpy(&m_sendDataHolder[0], m_pSendHeader->header(), m_pSendHeader->size());
        memcpy(&m_sendDataHolder[m_pSendHeader->size()], sendPacket.Contents(), sendPacket.Size());

        m_pSHSocket->Send(&m_sendDataHolder[0], len);

        m_sendDataHolder.clear();

        return 1;
    }
    catch (SHException e)
    {
        cout << e.what() << endl;
        return 0;
    }
}
コード例 #2
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandleChatMessage(WorldPacket &recvPacket)
{
    cout << "Handle " << LookupMsgCodeName(recvPacket.getMsgCode()) << ", size: " << recvPacket.Size() << endl;

    string s = recvPacket.ReadString();

    sWorld.SendWorldMessage(s, m_pPlayer->getID());
}
コード例 #3
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandleMoveStateChanged(WorldPacket &recvPacket)
{
    cout << "Handle " << LookupMsgCodeName(recvPacket.getMsgCode()) << ", size: " << recvPacket.Size() << endl;

    uint32 id = recvPacket.ReadUInt32();

    WorldPacket data(SMSG_MOVESTATE_CHANGED, 4);

    data << id;

    sWorld.SendGlobalWorldPacket(data);
}
コード例 #4
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandleMovementInfo(WorldPacket &recvPacket)
{
    cout << "Handle " << LookupMsgCodeName(recvPacket.getMsgCode()) << ", size: " << recvPacket.Size() << endl;

    uint32 id    = recvPacket.ReadUInt32();

    WorldPacket data(SMSG_MOVEMENT_INFO, 4);

    data << id;

    sWorld.SendGlobalWorldPacket(data);
}
コード例 #5
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandleMoveStartBackward(WorldPacket &recvPacket)
{
    cout << "Handle " << LookupMsgCodeName(recvPacket.getMsgCode()) << ", size: " << recvPacket.Size() << endl;

    uint32 id = recvPacket.ReadUInt32();

    WorldPacket data(SMSG_PLAYER_MOVE, 4);

    data << id;

    sWorld.SendGlobalWorldPacket(data);
}
コード例 #6
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandleEnumCharacters(WorldPacket &recvPacket)
{
    cout << "Handle " << LookupMsgCodeName(recvPacket.getMsgCode()) << ", size: " << recvPacket.Size() << endl;

    WorldPacket data(SMSG_ENUM_CHARACTERS, sizeof(PlayerInfo));

    data << playerInfo[m_accountID].name
         << playerInfo[m_accountID].guid
         << playerInfo[m_accountID].id
         << playerInfo[m_accountID].level
         << playerInfo[m_accountID].race
         << playerInfo[m_accountID].classs
         << playerInfo[m_accountID].health
         << playerInfo[m_accountID].mana
         << playerInfo[m_accountID].speed;

    SendPacket(&data);
}
コード例 #7
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandlePlayerInfo(WorldPacket &recvPacket)
{
    cout << "Handle " << LookupMsgCodeName(recvPacket.getMsgCode()) << ", size: " << recvPacket.Size() << endl;

    uint32 id;
    recvPacket >> id;

    if (id < 10)
    {
        WorldPacket data(SMSG_PLAYER_INFO, sizeof(PlayerInfo));

        data << playerInfo[id].name
             << playerInfo[id].guid
             << playerInfo[id].id
             << playerInfo[id].level
             << playerInfo[id].race
             << playerInfo[id].classs
             << playerInfo[id].health
             << playerInfo[id].mana
             << playerInfo[id].speed;

        SendPacket(&data);
    }
}
コード例 #8
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandlePlayerLogin(WorldPacket &recvPacket)
{
    cout << "Handle " << LookupMsgCodeName(recvPacket.getMsgCode()) << ", size: " << recvPacket.Size() << endl;

    uint32 id = recvPacket.ReadUInt32();

    Player *pPlayer = new Player(this);
    pPlayer->Create(playerInfo[m_accountID].name, playerInfo[m_accountID].guid, playerInfo[m_accountID].id, playerInfo[m_accountID].level, playerInfo[m_accountID].race,
        playerInfo[m_accountID].classs, playerInfo[m_accountID].health, playerInfo[m_accountID].mana, playerInfo[m_accountID].speed);

    pPlayer->setPosition(id * 103.5f, id * 25.3f, 0);

    setPlayer(pPlayer);

    WorldPacket data(SMSG_HELLO);

    string msg = "欢迎登陆蘑菇王子服务器!@~~";

    data << m_accountID;
    data << sWorld.GetActivedSessionCount();
    data << msg;

    SendPacket(&data);

    sMapManager.LoadMap(pPlayer->getMapID())->Add(pPlayer);

    msg = "有玩家登陆啦~!@@@";

    data.Initialize(SMSG_PLAYER_LOGIN, sizeof(uint32) + msg.size() + m_pPlayer->getName().size());

    data << id;
    data << m_pPlayer->getName();
    data << msg;

    sWorld.SendGlobalWorldPacket(data);
}
コード例 #9
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandleTest(WorldPacket &recvPacket)
{
    cout << "Handle " << LookupMsgCodeName(recvPacket.getMsgCode()) << ", size: " << recvPacket.Size() << endl;
}
コード例 #10
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandleServerSide(WorldPacket &recvPacket)
{
    cout << "ERROR: Handler ServerSide MsgCode " << recvPacket.getMsgCode() << "(" << LookupMsgCodeName(recvPacket.getMsgCode()) << ")" << endl;
}
コード例 #11
0
ファイル: WorldSession.cpp プロジェクト: gogo111007/Server
void WorldSession::HandleEarlyProccess(WorldPacket &recvPacket)
{
    cout << "ERROR: Handle EarlyProccess MsgCode " << recvPacket.getMsgCode() << "(" << LookupMsgCodeName(recvPacket.getMsgCode()) << ")" << endl;
}
コード例 #12
0
ファイル: Client.cpp プロジェクト: gogo111007/Server
void ParsePacket()
{
    try
    {
        bool locked = false;
        while (!disconnect)
        {
            Sleep(1);

            if (locked || packetQueueIn.empty())
                continue;
            else
                locked = true;

            WorldPacket data = packetQueueIn.front();
            packetItr itr = packetQueueIn.begin();
            packetQueueIn.erase(itr);

            uint32 msgCode = data.getMsgCode();

            switch (msgCode)
            {
                case MSG_CONNECTION:
                {
                    string msg;
                    data >> msg;

                    cout << "[System]: Chanllenge OK: " << msg << endl;
                    challengeOK = true;
                    break;
                }
                case SMSG_AUTH_CHALLENGE:
                {
                    if (challengeOK)
                    {
                        WorldPacket data(CMSG_AUTH_SESSION);
                        data << username;
                        data << password;

                        SendPacket(data);
                    }
                    else
                        cout << "[System]: Client not prepared!" << endl;
                    break;
                }
                case SMSG_AUTH_RESPONSE:
                {
                    string msg;

                    data >> authed;
                    data >> msg;

                    cout << "[System]: " << msg << endl;

                    WorldPacket sData;

                    if (!authed)
                    {
                        cin >> username >> password;

                        sData.Initialize(CMSG_AUTH_SESSION);
                        sData << username;
                        sData << password;

                        SendPacket(sData);
                    }
                    else
                    {
                        sData.Initialize(CMSG_ENUM_CHARACTERS);
                        sData << uint8(0);
                        SendPacket(sData);
                    }
                    break;
                }
                case SMSG_HELLO:
                {
                    uint32 onLinePlayer;
                    string msg;

                    data >> accountID;
                    data >> onLinePlayer;
                    data >> msg;

                    cout << "[System]: " << "AccountID: " << accountID << ", Name: " << player.name << ", Online Players: " << onLinePlayer << "\n[System]: " << msg << endl;

                    break;
                }
                case SMSG_ENUM_CHARACTERS:
                {
                    data >> player.name
                         >> player.guid
                         >> player.id
                         >> player.level
                         >> player.race
                         >> player.classs
                         >> player.health
                         >> player.mana
                         >> player.speed;

                    uint32 id;
                    while (true)
                    {
                        cout << "[System]: Choose your character: " << player.id << endl;
                        cin >> id;

                        if (id == player.id)
                            break;

                        cout << "[System]: You don't have that character!" << endl;
                    }

                    playerMap[player.id] = player.name;

                    loggedIn = true;

                    WorldPacket sData(CMSG_PLAYER_LOGIN);
                    sData << player.id;

                    SendPacket(sData);

                    break;
                }
                case SMSG_PLAYER_LOGIN:
                {
                    uint32 id;
                    string name;
                    string msg;

                    data >> id;
                    data >> name;
                    data >> msg;

                    if (id != accountID)
                    {
                        cout << "[System]: " << msg << ", ID: " << id << ", Name: " << name << endl;
                        playerMap[id] = name;
                    }
                    break;
                }
                case SMSG_PLAYER_INFO:
                {
                    PlayerInfo *info = new PlayerInfo();

                    data >> info->name
                         >> info->guid
                         >> info->id
                         >> info->level
                         >> info->race
                         >> info->classs
                         >> info->health
                         >> info->mana
                         >> info->speed;

                    cout << "Player:[Name:" << info->name << ", GUID:" << info->guid << ", ID:" << info->id << ", LV:" << uint32(info->level)
                         << ", R:" << uint32(info->race) << ", C:" << uint32(info->classs) << ", HP:" << info->health << ", MP:" << info->mana << ", S:" << info->speed << "]" << endl;

                    if (playerMap[info->id] == "")
                        playerMap[info->id] = info->name;

                    SAFE_DELETE(info);

                    break;
                }
                case SMSG_CHATMESSAGE:
                {
                    int32  sender;
                    string msg;
                    data >> sender;
                    data >> msg;

                    if (sender < 0)
                        cout << "[System]: " << msg << endl;
                    else
                    {
                        if (playerMap[sender] == "")
                        {
                            WorldPacket sData(CMSG_PLAYER_INFO);
                            sData << sender;
                            SendPacket(sData);
                            break;
                        }

                        if (sender == player.id)
                            SetInputPos(inputPosX, inputPosY);

                        cout << "[" << playerMap[sender] << "]: " << msg << endl;
                    }
                    break;
                }
                case SMSG_PLAYER_LOGOUT:
                {
                    uint32 id = data.ReadUInt32();
                    if (playerMap[id] != "")
                        cout << "[System]: Player [" << playerMap[id] << "] Logged out!" << endl;

                    break;
                }
                default:
                    cout << "[System]: Get UnHandled MsgCode: " << msgCode << endl;
            }

            GetInputPos(&inputPosX, &inputPosY);
            locked = false;
        }