123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #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;
- }
|