I made this a while back as an example for someone. Also includes lua bindings...
https://fly.thruhere.net/projects/net_proxy/ On Thu, Nov 11, 2010 at 6:46 PM, Shafqat Bhuiyan <[email protected]> wrote: > Yeah the tutorial is quite nice. But having a totally working sample > is good to check against when your program doesn't work. > > I hope the developers of ENet would also make some simple sample > programs in future releases. > > On Fri, Nov 12, 2010 at 12:47 AM, fuzzy spoon <[email protected]> > wrote: > > The tutorials are more than enough usually (as you just experienced). > > I think samples are a good idea, though. They would just need to be a lot > > more documented and clearer code imo :) > > > > On Thu, Nov 11, 2010 at 1:41 PM, Shafqat Bhuiyan <[email protected]> > wrote: > >> > >> Thanks. > >> > >> It'd be great if there was an examples page on the website or maybe a > >> samples directory in the source distribution so it's easier for people > >> to learn. > >> > >> On Thu, Nov 11, 2010 at 11:28 PM, fuzzy spoon <[email protected]> > >> wrote: > >> > Thanks for taking the time to make an example :) > >> > Im sure it will help someone along the way. > >> > On Thu, Nov 11, 2010 at 12:21 PM, Shafqat Bhuiyan <[email protected] > > > >> > wrote: > >> >> > >> >> Hi, > >> >> > >> >> I was looking around for some example programs that use enet > >> >> but like others I couldn't find one. So I tried to make one myself. > >> >> > >> >> This is a simple chat program. Multiple clients can join the server > >> >> and write messages. Messages will be received by all clients > >> >> (including the one that sent it). > >> >> > >> >> Most of the code is a direct copy/paste from the enet tutorial. The > >> >> code is definitely not perfect but is suitable for a beginner to look > >> >> around in. > >> >> > >> >> > >> >> > >> >> /* server.cpp */ > >> >> #include <stdio.h> > >> >> #include <enet/enet.h> > >> >> > >> >> int main (int argc, char *argv[]) > >> >> { > >> >> ENetAddress address; > >> >> ENetHost *server; > >> >> ENetEvent event; > >> >> int serviceResult; > >> >> > >> >> puts ("Starting server"); > >> >> > >> >> if (enet_initialize () != 0) > >> >> { > >> >> puts ("Error initialising enet"); > >> >> exit (EXIT_FAILURE); > >> >> } > >> >> > >> >> > >> >> /* Bind the server to the default localhost. */ > >> >> /* A specific host address can be specified by */ > >> >> /* enet_address_set_host (& address, "x.x.x.x"); */ > >> >> address.host = ENET_HOST_ANY; > >> >> /* Bind the server to port 1234. */ > >> >> address.port = 1234; > >> >> > >> >> server = enet_host_create (&address, > >> >> 32, /* number of clients */ > >> >> 2, /* number of channels */ > >> >> 0, /* Any incoming bandwith */ > >> >> 0); /* Any outgoing bandwith */ > >> >> > >> >> if (server == NULL) > >> >> { > >> >> puts ("Could not create server host"); > >> >> exit (EXIT_FAILURE); > >> >> } > >> >> > >> >> > >> >> while (true) > >> >> { > >> >> serviceResult = 1; > >> >> > >> >> /* Keep doing host_service until no events are left */ > >> >> while (serviceResult > 0) > >> >> { > >> >> /* Wait up to 1000 milliseconds for an event. */ > >> >> serviceResult = enet_host_service (server, &event, 1000); > >> >> > >> >> if (serviceResult > 0) > >> >> { > >> >> > >> >> switch (event.type) > >> >> { > >> >> case ENET_EVENT_TYPE_CONNECT: > >> >> printf ("A new client connected from %x:%u.\n", > >> >> event.peer -> address.host, > >> >> event.peer -> address.port); > >> >> > >> >> /* Store any relevant client information here. */ > >> >> event.peer->data = (void*)"Client information"; > >> >> > >> >> break; > >> >> > >> >> case ENET_EVENT_TYPE_RECEIVE: > >> >> printf ("A packet of length %u containing '%s' was > " > >> >> "received from %s on channel %u.\n", > >> >> event.packet -> dataLength, > >> >> event.packet -> data, > >> >> event.peer -> data, > >> >> event.channelID); > >> >> > >> >> /* Tell all clients about this message */ > >> >> enet_host_broadcast (server, 0, event.packet); > >> >> > >> >> break; > >> >> > >> >> case ENET_EVENT_TYPE_DISCONNECT: > >> >> printf ("%s disconected.\n", event.peer -> data); > >> >> > >> >> /* Reset the peer's client information. */ > >> >> > >> >> event.peer -> data = NULL; > >> >> > >> >> break; > >> >> } > >> >> } > >> >> else if (serviceResult > 0) > >> >> { > >> >> puts ("Error with servicing the server"); > >> >> exit (EXIT_FAILURE); > >> >> } > >> >> } > >> >> > >> >> } > >> >> > >> >> enet_host_destroy (server); > >> >> enet_deinitialize (); > >> >> > >> >> return 0; > >> >> > >> >> } > >> >> > >> >> > >> >> > >> >> /************************************************/ > >> >> > >> >> > >> >> > >> >> /* client.cpp */ > >> >> #include <stdio.h> > >> >> #include <string.h> > >> >> #include <enet/enet.h> > >> >> > >> >> > >> >> int main (int argc, char* argv[]) { > >> >> ENetHost *client; > >> >> ENetAddress address; > >> >> ENetPeer *peer; > >> >> ENetEvent event; > >> >> char message[1024]; > >> >> int serviceResult; > >> >> > >> >> puts ("Starting client"); > >> >> > >> >> if (enet_initialize () != 0) { > >> >> fprintf (stderr, "Error initialising enet"); > >> >> exit (EXIT_FAILURE); > >> >> } > >> >> > >> >> client = enet_host_create (NULL, /* create a client host */ > >> >> 1, /* number of clients */ > >> >> 2, /* number of channels */ > >> >> 57600 / 8, /* incoming bandwith */ > >> >> 14400 / 8); /* outgoing bandwith */ > >> >> > >> >> if (client == NULL) { > >> >> fprintf (stderr, "Could not create client host"); > >> >> exit (EXIT_FAILURE); > >> >> } > >> >> > >> >> > >> >> enet_address_set_host (&address, "localhost"); > >> >> address.port = 1234; > >> >> > >> >> peer = enet_host_connect (client, > >> >> &address, /* address to connect to */ > >> >> 2, /* number of channels */ > >> >> 0); /* user data supplied to > >> >> the receiving host */ > >> >> > >> >> if (peer == NULL) { > >> >> fprintf (stderr, "No available peers for initiating an ENet " > >> >> "connection.\n"); > >> >> exit (EXIT_FAILURE); > >> >> } > >> >> > >> >> > >> >> /* Try to connect to server within 5 seconds */ > >> >> if (enet_host_service (client, &event, 5000) > 0 && > >> >> event.type == ENET_EVENT_TYPE_CONNECT) > >> >> { > >> >> puts ("Connection to server 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); > >> >> > >> >> fprintf (stderr, "Connection to server failed."); > >> >> exit (EXIT_FAILURE); > >> >> } > >> >> > >> >> while (true) > >> >> { > >> >> serviceResult = 1; > >> >> > >> >> /* Keep doing host_service until no events are left */ > >> >> while (serviceResult > 0) > >> >> { > >> >> serviceResult = enet_host_service (client, &event, 0); > >> >> > >> >> if (serviceResult > 0) > >> >> { > >> >> switch (event.type) > >> >> { > >> >> case ENET_EVENT_TYPE_CONNECT: > >> >> printf ("A new client connected from %x:%u.\n", > >> >> event.peer -> address.host, > >> >> event.peer -> address.port); > >> >> > >> >> event.peer->data = (void*)"New User"; > >> >> break; > >> >> > >> >> case ENET_EVENT_TYPE_RECEIVE: > >> >> printf ("A packet of length %u containing '%s' was > " > >> >> "received from %s on channel %u.\n", > >> >> event.packet -> dataLength, > >> >> event.packet -> data, > >> >> 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 disconected.\n", event.peer -> data); > >> >> > >> >> break; > >> >> } > >> >> } > >> >> else if (serviceResult > 0) > >> >> { > >> >> puts ("Error with servicing the client"); > >> >> exit (EXIT_FAILURE); > >> >> } > >> >> > >> >> } > >> >> > >> >> > >> >> printf ("Say> "); > >> >> gets (message); > >> >> > >> >> if (strcmp (message, "exit") == 0 || > >> >> strcmp (message, "quit") == 0) { > >> >> break; > >> >> } > >> >> > >> >> if(strlen(message) > 0) { > >> >> ENetPacket *packet = enet_packet_create (message, strlen > >> >> (message) + 1, ENET_PACKET_FLAG_RELIABLE); > >> >> enet_peer_send (peer, 0, packet); > >> >> } > >> >> > >> >> } > >> >> > >> >> enet_peer_disconnect (peer, 0); > >> >> > >> >> /* 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."); > >> >> break; > >> >> } > >> >> } > >> >> > >> >> > >> >> enet_host_destroy (client); > >> >> enet_deinitialize (); > >> >> > >> >> return 0; > >> >> > >> >> } > >> >> _______________________________________________ > >> >> ENet-discuss mailing list > >> >> [email protected] > >> >> http://lists.cubik.org/mailman/listinfo/enet-discuss > >> > > >> > > >> > _______________________________________________ > >> > ENet-discuss mailing list > >> > [email protected] > >> > http://lists.cubik.org/mailman/listinfo/enet-discuss > >> > > >> > > >> _______________________________________________ > >> ENet-discuss mailing list > >> [email protected] > >> http://lists.cubik.org/mailman/listinfo/enet-discuss > > > > > > _______________________________________________ > > ENet-discuss mailing list > > [email protected] > > http://lists.cubik.org/mailman/listinfo/enet-discuss > > > > > _______________________________________________ > ENet-discuss mailing list > [email protected] > http://lists.cubik.org/mailman/listinfo/enet-discuss >
_______________________________________________ ENet-discuss mailing list [email protected] http://lists.cubik.org/mailman/listinfo/enet-discuss
