//
// Created by koncord on 16.04.17.
//

#ifndef OPENMW_WORLDPROCESSSOR_HPP
#define OPENMW_WORLDPROCESSSOR_HPP

#include <boost/unordered_map.hpp>
#include <boost/shared_ptr.hpp>

#include <components/openmw-mp/Log.hpp>
#include <components/openmw-mp/NetworkMessages.hpp>
#include <components/openmw-mp/Packets/World/WorldPacket.hpp>
#include "WorldEvent.hpp"
#include "LocalPlayer.hpp"
#include "DedicatedPlayer.hpp"
#include "BaseClientPacketProcessor.hpp"

namespace mwmp
{
    class WorldProcessor : public BaseClientPacketProcessor
    {
    public:
        virtual void Do(WorldPacket &packet, WorldEvent &event) = 0;

        static bool Process(RakNet::Packet &packet, WorldEvent &event);
        static void AddProcessor(WorldProcessor *processor);

        typedef boost::unordered_map<unsigned char, boost::shared_ptr<WorldProcessor> > processors_t;

    private:
        static processors_t processors;
    };
}


#endif //OPENMW_WORLDPROCESSSOR_HPP