|
@@ -7,6 +7,8 @@
|
|
|
#include <enet.h>
|
|
|
#include <string.h>
|
|
|
|
|
|
+#include "ErrorSimulator.h"
|
|
|
+
|
|
|
typedef CoreOutPacket OutPacket;
|
|
|
|
|
|
void coreInitInPacket(CoreInPacket* in, const void* data, size_t n) {
|
|
@@ -188,7 +190,7 @@ OutPacket* coreOutPacketWrite(OutPacket* out, const void* buffer, size_t n) {
|
|
|
static int enetCounter = 0;
|
|
|
|
|
|
static bool addENet(void) {
|
|
|
- if(enetCounter == 0 && enet_initialize() != 0) {
|
|
|
+ if(enetCounter == 0 && CORE_FAIL(enet_initialize() != 0, true)) {
|
|
|
return true;
|
|
|
}
|
|
|
enetCounter++;
|
|
@@ -233,7 +235,7 @@ bool coreClientStart(void) {
|
|
|
CORE_LOG_ERROR("Client cannot initialize enet");
|
|
|
return true;
|
|
|
}
|
|
|
- client.client = enet_host_create(nullptr, 1, 2, 0, 0);
|
|
|
+ client.client = CORE_FAIL(enet_host_create(nullptr, 1, 2, 0, 0), nullptr);
|
|
|
if(client.client == nullptr) {
|
|
|
coreClientStop();
|
|
|
CORE_LOG_ERROR("Cannot create enet client host");
|
|
@@ -270,7 +272,8 @@ bool coreClientConnect(const char* server, CorePort port, int timeoutTicks) {
|
|
|
enet_address_set_host(&address, server);
|
|
|
address.port = port;
|
|
|
|
|
|
- client.connection = enet_host_connect(client.client, &address, 3, 0);
|
|
|
+ client.connection =
|
|
|
+ CORE_FAIL(enet_host_connect(client.client, &address, 3, 0), nullptr);
|
|
|
if(client.connection == nullptr) {
|
|
|
CORE_LOG_ERROR("Cannot create connection");
|
|
|
return true;
|
|
@@ -280,6 +283,12 @@ bool coreClientConnect(const char* server, CorePort port, int timeoutTicks) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+void coreClientTimeout(u32 timeout, u32 timeoutMin, u32 timeoutMax) {
|
|
|
+ if(client.connection != nullptr) {
|
|
|
+ enet_peer_timeout(client.connection, timeout, timeoutMin, timeoutMax);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void coreClientDisconnect(int timeoutTicks) {
|
|
|
if(client.connection == nullptr) {
|
|
|
return;
|
|
@@ -302,12 +311,9 @@ void coreClientSend(const OutPacket* p, CorePacketSendMode mode) {
|
|
|
enet_packet_create(p->data.buffer, p->data.size, flags[i]));
|
|
|
}
|
|
|
|
|
|
-void coreClientTick(void) {
|
|
|
- if(client.client == nullptr) {
|
|
|
- return;
|
|
|
- }
|
|
|
+static void tickClientEvents(void) {
|
|
|
ENetEvent e;
|
|
|
- while(enet_host_service(client.client, &e, 0) > 0) {
|
|
|
+ while(enet_host_service(client.client, &e, 0) >= 0) {
|
|
|
switch(e.type) {
|
|
|
case ENET_EVENT_TYPE_CONNECT:
|
|
|
client.connectTicks = -1;
|
|
@@ -316,10 +322,10 @@ void coreClientTick(void) {
|
|
|
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
|
|
|
case ENET_EVENT_TYPE_DISCONNECT:
|
|
|
client.disconnectTicks = 0;
|
|
|
+ client.connectTicks = 0;
|
|
|
client.onDisconnect();
|
|
|
client.connection = nullptr;
|
|
|
break;
|
|
|
- case ENET_EVENT_TYPE_NONE: return;
|
|
|
case ENET_EVENT_TYPE_RECEIVE: {
|
|
|
CoreInPacket in;
|
|
|
coreInitInPacket(&in, e.packet->data, e.packet->dataLength);
|
|
@@ -327,8 +333,16 @@ void coreClientTick(void) {
|
|
|
enet_packet_destroy(e.packet);
|
|
|
break;
|
|
|
}
|
|
|
+ case ENET_EVENT_TYPE_NONE: return;
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+void coreClientTick(void) {
|
|
|
+ if(client.client == nullptr) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ tickClientEvents();
|
|
|
if(client.connectTicks >= 1 &&
|
|
|
++client.connectTicks > client.connectTimeoutTicks) {
|
|
|
client.connectTicks = 0;
|
|
@@ -402,7 +416,8 @@ bool coreServerStart(CorePort port, size_t maxClients) {
|
|
|
}
|
|
|
|
|
|
ENetAddress address = {.host = ENET_HOST_ANY, .port = port};
|
|
|
- server.server = enet_host_create(&address, maxClients, 3, 0, 0);
|
|
|
+ server.server =
|
|
|
+ CORE_FAIL(enet_host_create(&address, maxClients, 3, 0, 0), nullptr);
|
|
|
if(server.server == nullptr) {
|
|
|
coreServerStop();
|
|
|
CORE_LOG_ERROR("Cannot create enet server host");
|
|
@@ -518,6 +533,9 @@ void coreServerSend(CoreClient clientId, const CoreOutPacket* p,
|
|
|
}
|
|
|
|
|
|
void coreServerDisconnect(CoreClient clientId) {
|
|
|
+ if(server.server == nullptr) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
ENetPeer** peer = coreHashMapSearchPointer(&server.clients, &clientId);
|
|
|
if(peer != nullptr) {
|
|
|
enet_peer_disconnect(*peer, 0);
|