forked from mirror/openmw-tes3mp
[General] Move similar functions to BasePacketController
Simplify ContainsPacket and fix GetPacketsol2-server-rewrite
parent
24ba4ae404
commit
6f7771d97e
@ -0,0 +1,48 @@
|
||||
//
|
||||
// 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;
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue