45static std::map<unsigned short, MessageHandler *> mMessageHandlers;
49 if (enet_initialize())
51 Log::critical(
"Failed to initialize ENet.");
54 client = enet_host_create(
nullptr, 3, 0, 0, 0);
58 Log::critical(
"Failed to create the local host.");
69 Log::critical(
"Tried to shutdown the network subsystem while there "
70 "are network connections left!");
81 Log::critical(
"Tried to instantiate a network object before "
82 "initializing the network subsystem!");
91 mMessageHandlers[*i] = handler;
97 mMessageHandlers.erase(*i);
102 mMessageHandlers.clear();
112 void dispatchMessage(ENetPacket *packet)
114 MessageIn msg((
const char *)packet->data, packet->dataLength);
116 auto iter = mMessageHandlers.find(msg.getId());
118 if (iter != mMessageHandlers.end())
122 iter->second->handleMessage(msg);
127 msg.getId(), msg.getLength());
131 enet_packet_destroy(packet);
140 while (enet_host_service(client, &event, 0) > 0)
144 case ENET_EVENT_TYPE_CONNECT:
145 Log::info(
"Connected to port %d.", event.peer->address.port);
147 event.peer->data =
nullptr;
150 case ENET_EVENT_TYPE_RECEIVE:
151 dispatchMessage(event.packet);
154 case ENET_EVENT_TYPE_DISCONNECT:
157 event.peer->data =
nullptr;
160 case ENET_EVENT_TYPE_NONE:
const uint16_t * handledMessages
void info(const char *log_text,...) LOG_PRINTF_ATTR
void clearNetworkHandlers()
Clears all registered message handlers.
Connection * getConnection()
Returns a new Connection object.
void initialize()
Initializes the network subsystem.
void registerHandler(MessageHandler *handler)
Registers a message handler.
void finalize()
Finalizes the network subsystem.
void unregisterHandler(MessageHandler *handler)
Unregisters a message handler.