Example #1
0
    void NetManager::readSpriteResponse(ENetPacket* packet, size_t& position)
    {
        size_t numSprites;
        readFromPacket(packet, position, numSprites);

        auto renderer = FARender::Renderer::get();

        for(size_t i = 0; i < numSprites; i++)
        {
            size_t index;
            readFromPacket(packet, position, index);

            std::string path;

            char c = 0;

            do
            {
                readFromPacket(packet, position, c);

                if(c)
                    path += c;
            } while(c);

            renderer->fillServerSprite(index, path);

            std::cout << "response recieved " << index << " " << path << std::endl;
        }
    }
Example #2
0
    void NetManager::readSpriteRequest(ENetPacket* packet, ENetPeer* peer, size_t& position)
    {
        size_t numSprites;
        readFromPacket(packet, position, numSprites);

        std::vector<size_t> requestedSprites(numSprites);

        for(size_t i = 0; i < numSprites; i++)
            readFromPacket(packet, position, requestedSprites[i]);

        std::vector<std::string> paths(numSprites);

        auto renderer = FARender::Renderer::get();

        size_t size = 0;

        for(size_t i = 0; i < numSprites; i++)
        {
            paths[i] = renderer->getPathForIndex(requestedSprites[i]);
            size += paths[i].size();
            size += 1; // null terminator

            std::cout << "responding to: " << requestedSprites[i] << " " << paths[i] << std::endl;

        }

        size += numSprites * sizeof(size_t);
        size += sizeof(int32_t); // type header
        size += sizeof(size_t); // numSprites count

        int32_t typeHeader = ReliableMessageKind::Sprite;

        ENetPacket* responsePacket = enet_packet_create(NULL, size, ENET_PACKET_FLAG_RELIABLE);
        size_t writePosition = 0;

        writeToPacket(responsePacket, writePosition, typeHeader);
        writeToPacket(responsePacket, writePosition, numSprites);

        for(size_t i = 0; i < numSprites; i++)
        {
            writeToPacket(responsePacket, writePosition, requestedSprites[i]);

            std::string& path = paths[i];
            char c;

            for(size_t j = 0; j < path.size(); j++)
            {
                c = path[j];
                writeToPacket(responsePacket, writePosition, c);
            }

            c = 0;
            writeToPacket(responsePacket, writePosition, c);
        }

        enet_peer_send(peer, RELIABLE_CHANNEL_ID, responsePacket);
    }
Example #3
0
    void NetManager::readServerPacket(ENetEvent& event)
    {
        FAWorld::World& world = *FAWorld::World::get();

        size_t position = 0;

        ServerPacketHeader header;
        readFromPacket(event.packet, position, header);

        if(header.tick > mLastServerTickProcessed)
        {
            for(size_t i = 0; i < header.numPlayers; i++)
            {
                uint32_t playerId;
                readFromPacket<uint32_t>(event.packet, position, playerId);

                auto player = world.getPlayer(playerId);
                if(player == NULL)
                {
                    spawnPlayer(playerId);
                    player = world.getPlayer(playerId);
                }

                position = player->readFrom(event.packet, position);
            }
        }
    }
Example #4
0
    void NetManager::readClientPacket(ENetEvent& event)
    {
        if(event.packet->flags & ENET_PACKET_FLAG_RELIABLE)
        {
            int32_t typeHeader;
            size_t position = 0;
            readFromPacket(event.packet, position, typeHeader);

            switch(typeHeader)
            {
                case ReliableMessageKind::Sprite:
                {
                    readSpriteRequest(event.packet, event.peer, position);
                    break;
                }
            }
        }
        else
        {
            ClientPacket data;

            size_t position = 0;
            readFromPacket(event.packet, position, data);

            auto world = FAWorld::World::get();

            auto player = mServerPlayerList[event.peer->connectID];

            player->destination().first = data.destX;
            player->destination().second = data.destY;

            if(data.levelIndex != -1 && (player->getLevel() == NULL || data.levelIndex != (int32_t)player->getLevel()->getLevelIndex()))
            {
                auto level = world->getLevel(data.levelIndex);

                if(player->getLevel() != NULL && data.levelIndex < (int32_t)player->getLevel()->getLevelIndex())
                    player->mPos = FAWorld::Position(level->downStairsPos().first, level->downStairsPos().second);
                else
                    player->mPos = FAWorld::Position(level->upStairsPos().first, level->upStairsPos().second);

                player->setLevel(level);
            }
        }
    }
UserRight::UserRight( const Packet* p, int& pos ) 
      : UserElement( UserConstants::TYPE_RIGHT )
{
   readFromPacket( p, pos );
}
Example #6
0
    void NetManager::readServerPacket(ENetEvent& event)
    {
        if(event.packet->flags & ENET_PACKET_FLAG_RELIABLE)
        {
            size_t position = 0;

            if(mClientRecievedId == false)
            {
                mClientRecievedId = true;

                size_t playerId;
                readFromPacket(event.packet, position, playerId);

                FAWorld::World::get()->getCurrentPlayer()->mId = playerId;

                return;
            }
            int32_t typeHeader;
            readFromPacket(event.packet, position, typeHeader);

            switch(typeHeader)
            {
                case ReliableMessageKind::Level:
                {
                    readLevel(event.packet, position);
                    FAWorld::World::get()->setLevel(0);
                    break;
                }

                case ReliableMessageKind::Sprite:
                {
                    readSpriteResponse(event.packet, position);
                    break;
                }
            }
        }
        else
        {
            FAWorld::World& world = *FAWorld::World::get();

            size_t position = 0;

            ServerPacketHeader header;
            readFromPacket(event.packet, position, header);

            if(header.tick > mLastServerTickProcessed)
            {
                for(size_t i = 0; i < header.numPlayers; i++)
                {
                    int32_t classId;
                    int32_t actorId;
                    readFromPacket(event.packet, position, classId);
                    readFromPacket(event.packet, position, actorId);

                    FAWorld::Actor* actor = world.getActorById(actorId);
                    if(actor == NULL)
                    {
                        actor = dynamic_cast<FAWorld::Actor*>(FAWorld::NetObject::construct(classId));
                        actor->mId = actorId;
                    }

                    actor->readFrom(event.packet, position);
                }
            }
        }
    }