kpmpgsmkii/shared/thirdparty/enet/test/build.C

108 lines
3.1 KiB
C

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define ENET_IMPLEMENTATION
#include "enet.h"
#include <stdio.h>
typedef struct {
ENetHost *host;
ENetPeer *peer;
} Client;
void host_server(ENetHost *server) {
ENetEvent event;
while (enet_host_service(server, &event, 2) > 0) {
switch (event.type) {
case ENET_EVENT_TYPE_CONNECT:
printf("A new client connected from ::1:%u.\n", event.peer->address.port);
/* Store any relevant client information here. */
event.peer->data = "Client information";
break;
case ENET_EVENT_TYPE_RECEIVE:
printf("A packet of length %zu containing %s was received from %s on channel %u.\n",
event.packet->dataLength,
event.packet->data,
(char *)event.peer->data,
event.channelID);
/* Clean up the packet now that we're done using it. */
enet_packet_destroy (event.packet);
break;
case ENET_EVENT_TYPE_DISCONNECT:
printf ("%s disconnected.\n", (char *)event.peer->data);
/* Reset the peer's client information. */
event.peer->data = NULL;
break;
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
printf ("%s timeout.\n", (char *)event.peer->data);
event.peer->data = NULL;
break;
case ENET_EVENT_TYPE_NONE: break;
}
}
}
int main() {
if (enet_initialize() != 0) {
printf("An error occurred while initializing ENet.\n");
return 1;
}
#define MAX_CLIENTS 32
int i = 0;
ENetHost *server;
Client clients[MAX_CLIENTS];
ENetAddress address = {0};
address.host = ENET_HOST_ANY; /* Bind the server to the default localhost. */
address.port = 7777; /* Bind the server to port 7777. */
/* create a server */
printf("starting server...\n");
server = enet_host_create(&address, MAX_CLIENTS, 2, 0, 0);
if (server == NULL) {
printf("An error occurred while trying to create an ENet server host.\n");
return 1;
}
printf("starting clients...\n");
for (i = 0; i < MAX_CLIENTS; ++i) {
enet_address_set_host(&address, "127.0.0.1");
clients[i].host = enet_host_create(NULL, 1, 2, 0, 0);
clients[i].peer = enet_host_connect(clients[i].host, &address, 2, 0);
if (clients[i].peer == NULL) {
printf("coundlnt connect\n");
return 1;
}
}
// program will make N iterations, and then exit
static int counter = 1000;
do {
host_server(server);
ENetEvent event;
for (i = 0; i < MAX_CLIENTS; ++i) {
enet_host_service(clients[i].host, &event, 0);
}
counter--;
} while (counter > 0);
for (i = 0; i < MAX_CLIENTS; ++i) {
enet_peer_disconnect_now(clients[i].peer, 0);
enet_host_destroy(clients[i].host);
}
host_server(server);
enet_host_destroy(server);
enet_deinitialize();
return 0;
}