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_v4.h"
00037
00038 template<typename ContextParam1, typename ContextParam2, typename ContextParam3>
00042 class CL_NetGameEventDispatcher_v3
00043 {
00044 public:
00045 typedef CL_Callback_v4<const CL_NetGameEvent &, ContextParam1, ContextParam2, ContextParam3> CallbackClass;
00046
00047 CallbackClass &func_event(const CL_String &name) { return event_handlers[name]; }
00048
00057 bool dispatch(const CL_NetGameEvent &game_event, ContextParam1 context1, ContextParam2 context2, ContextParam3 context3);
00058
00059 private:
00060 std::map<CL_String, CallbackClass> event_handlers;
00061 };
00062
00063 template<typename ContextParam1, typename ContextParam2, typename ContextParam3>
00064 bool CL_NetGameEventDispatcher_v3<ContextParam1, ContextParam2, ContextParam3>::dispatch(const CL_NetGameEvent &game_event, ContextParam1 context1, ContextParam2 context2, ContextParam3 context3)
00065 {
00066 typename std::map<CL_String, CallbackClass>::iterator it;
00067 it = event_handlers.find(game_event.get_name());
00068 if (it != event_handlers.end() && !it->second.is_null())
00069 {
00070 it->second.invoke(game_event, context1, context2, context3);
00071 return true;
00072 }
00073 else
00074 {
00075 return false;
00076 }
00077 }
00078
00080