00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00031
00032 #pragma once
00033
00034 #include "event.h"
00035 #include <map>
00036 #include "../../Core/Signals/callback_v3.h"
00037
00038 template<typename ContextParam1, typename ContextParam2>
00042 class CL_NetGameEventDispatcher_v2
00043 {
00044 public:
00045 typedef CL_Callback_v3<const CL_NetGameEvent &, ContextParam1, ContextParam2> CallbackClass;
00046
00047 CallbackClass &func_event(const CL_String &name) { return event_handlers[name]; }
00048
00056 bool dispatch(const CL_NetGameEvent &game_event, ContextParam1 context1, ContextParam2 context2);
00057
00058 private:
00059 std::map<CL_String, CallbackClass> event_handlers;
00060 };
00061
00062 template<typename ContextParam1, typename ContextParam2>
00063 bool CL_NetGameEventDispatcher_v2<ContextParam1, ContextParam2>::dispatch(const CL_NetGameEvent &game_event, ContextParam1 context1, ContextParam2 context2)
00064 {
00065 typename std::map<CL_String, CallbackClass>::iterator it;
00066 it = event_handlers.find(game_event.get_name());
00067 if (it != event_handlers.end() && !it->second.is_null())
00068 {
00069 it->second.invoke(game_event, context1, context2);
00070 return true;
00071 }
00072 else
00073 {
00074 return false;
00075 }
00076 }
00077
00079