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