From 5a5defa5dff4c63750beeced7ec737e5ae50b240 Mon Sep 17 00:00:00 2001 From: Marek Kraus Date: Wed, 19 May 2021 20:48:01 +0200 Subject: [PATCH] Fixed typo + added client example --- README.md | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d60dbc2..f3c6029 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add include path to the library `node_modules/enet.c/include` to your makefile/ ## Installation (manually) -Dowload file [include/enet.h](https://raw.githubusercontent.com/zpl-c/enet/master/include/enet.h) and just add to your project. +Download file [include/enet.h](https://raw.githubusercontent.com/zpl-c/enet/master/include/enet.h) and just add to your project. ## Usage (Shared library) @@ -132,7 +132,9 @@ In this case, library will be embedded to the project itself. Make sure you add a define for `ENET_IMPLEMENTATION` exactly in one source file before including the `enet.h`. -Here is a simple server demo, it will wait 1 second for events, and then exit if none were found: +Here is a simple server and client demo, it will wait 1 second for events, and then exit if none were found: + +Server: ```c #define ENET_IMPLEMENTATION @@ -207,6 +209,88 @@ int main() { ``` +Client: + +```c +#include +#define ENET_IMPLEMENTATION +#include "enet.h" + +int main() { + if (enet_initialize() != 0) { + fprintf(stderr, "An error occurred while initializing ENet.\n"); + return EXIT_FAILURE; + } + + ENetHost* client = { 0 }; + client = enet_host_create(NULL /* create a client host */, + 1 /* only allow 1 outgoing connection */, + 2 /* allow up 2 channels to be used, 0 and 1 */, + 0 /* assume any amount of incoming bandwidth */, + 0 /* assume any amount of outgoing bandwidth */); + if (client == NULL) { + fprintf(stderr, + "An error occurred while trying to create an ENet client host.\n"); + exit(EXIT_FAILURE); + } + + ENetAddress address = { 0 }; + ENetEvent event = { 0 }; + ENetPeer* peer = { 0 }; + /* Connect to some.server.net:1234. */ + enet_address_set_host(&address, "127.0.0.1"); + address.port = 7777; + /* Initiate the connection, allocating the two channels 0 and 1. */ + peer = enet_host_connect(client, &address, 2, 0); + if (peer == NULL) { + fprintf(stderr, + "No available peers for initiating an ENet connection.\n"); + exit(EXIT_FAILURE); + } + /* Wait up to 5 seconds for the connection attempt to succeed. */ + if (enet_host_service(client, &event, 5000) > 0 && + event.type == ENET_EVENT_TYPE_CONNECT) { + puts("Connection to some.server.net:1234 succeeded."); + } else { + /* Either the 5 seconds are up or a disconnect event was */ + /* received. Reset the peer in the event the 5 seconds */ + /* had run out without any significant event. */ + enet_peer_reset(peer); + puts("Connection to some.server.net:1234 failed."); + } + + // Receive some events + enet_host_service(client, &event, 5000); + + // Disconnect + enet_peer_disconnect(peer, 0); + + uint8_t disconnected = false; + /* Allow up to 3 seconds for the disconnect to succeed + * and drop any packets received packets. + */ + while (enet_host_service(client, &event, 3000) > 0) { + switch (event.type) { + case ENET_EVENT_TYPE_RECEIVE: + enet_packet_destroy(event.packet); + break; + case ENET_EVENT_TYPE_DISCONNECT: + puts("Disconnection succeeded."); + disconnected = true; + break; + } + } + + // Drop connection, since disconnection didn't successed + if (!disconnected) { + enet_peer_reset(peer); + } + + enet_host_destroy(client); + enet_deinitialize(); +} +``` + ## Tutorials More information, examples and tutorials can be found at the official site: http://enet.bespin.org/