Go to the documentation of this file.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 "../api_network.h"
00035 #include "event.h"
00036 #include <map>
00037 #include "../../Core/Signals/callback_v3.h"
00038
00039 template<typename ContextParam1, typename ContextParam2>
00043 class CL_API_NETWORK CL_NetGameEventDispatcher_v2
00044 {
00045 public:
00046 typedef CL_Callback_v3<const CL_NetGameEvent &, ContextParam1, ContextParam2> CallbackClass;
00047
00048 CallbackClass &func_event(const CL_String &name) { return event_handlers[name]; }
00049
00057 bool dispatch(const CL_NetGameEvent &game_event, ContextParam1 context1, ContextParam2 context2);
00058
00059 private:
00060 std::map<CL_String, CallbackClass> event_handlers;
00061 };
00062
00063 template<typename ContextParam1, typename ContextParam2>
00064 bool CL_NetGameEventDispatcher_v2<ContextParam1, ContextParam2>::dispatch(const CL_NetGameEvent &game_event, ContextParam1 context1, ContextParam2 context2)
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);
00071 return true;
00072 }
00073 else
00074 {
00075 return false;
00076 }
00077 }
00078
00080