forked from mirror/openmw-tes3mp
		
	
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//
 | 
						|
// Created by koncord on 26.02.18.
 | 
						|
//
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
 | 
						|
#include <RakNetTypes.h>
 | 
						|
#include <unordered_map>
 | 
						|
#include <memory>
 | 
						|
 | 
						|
namespace mwmp
 | 
						|
{
 | 
						|
    template<typename PacketT>
 | 
						|
    class BasePacketController
 | 
						|
    {
 | 
						|
    public:
 | 
						|
        bool ContainsPacket(RakNet::MessageID id) const
 | 
						|
        {
 | 
						|
            return packets.count(id) == 1;
 | 
						|
        }
 | 
						|
 | 
						|
        PacketT *GetPacket(RakNet::MessageID id)
 | 
						|
        {
 | 
						|
            return packets.at(id).get(); //operator[] calls rehash() if key not found, that not applicable here.
 | 
						|
        }
 | 
						|
 | 
						|
        void SetStream(RakNet::BitStream *inStream, RakNet::BitStream *outStream)
 | 
						|
        {
 | 
						|
            for (const auto &packet : packets)
 | 
						|
                packet.second->SetStreams(inStream, outStream);
 | 
						|
        }
 | 
						|
 | 
						|
        typedef std::unordered_map<RakNet::MessageID, std::unique_ptr<PacketT> > packets_t;
 | 
						|
 | 
						|
    protected:
 | 
						|
        template <typename T>
 | 
						|
        inline void static AddPacket(packets_t *packets, RakNet::RakPeerInterface *peer)
 | 
						|
        {
 | 
						|
            auto packet = new T(peer);
 | 
						|
            RakNet::MessageID packetId = packet->GetPacketID();
 | 
						|
            packets->emplace(packetId, packet);
 | 
						|
        }
 | 
						|
 | 
						|
    protected:
 | 
						|
        packets_t packets;
 | 
						|
    };
 | 
						|
}
 |