It's steal unclear. In case "enet_host_service()" returns on any event
- so it will be perfect if I will set the "infinite" time for it
because I do not need to do something when no messages occur. Other
libraries with suct interface behave as I said ("windows messages",
for example).
What is happening with the messages which appear when
enet_host_service() is not run (between it's calls)?5 ноября 2010 г. 18:01 пользователь Nuno Silva <[email protected]> написал: > As far as i know ENet isnt thread-safe, so it's probably a bad idea to do > that. > enet_host_service will wait for events, until a certain timeout, or until an > event is triggered. So, if you dont want any lag on your events, you should > limit the timeout to something small like e.g., 25-50, which is very little > compared to 1000. > > 2010/11/5 Вячеслав Блинников <[email protected]> >> >> Thank you very much! It works now! >> Is it right calling that function in the separate thread? Like that: >> >> void* ENetHostService(void* client) >> { >> ENetHost* castClient = (ENetHost*)client; >> ENetEvent event; >> >> ENET_HOST_SERVICE: >> enet_host_service(castClient, &event, 1000); >> goto ENET_HOST_SERVICE; >> } >> >> But I think I have some lags in messages sending - what is the point >> in third param to enet_host_service()? Does not this function returns >> (do it's job (message sending in our case)) just in moment when >> enet_peer_send() where called? Or it will wait 1000 milliseconds >> anyway? >> >> So, am I right in the whole structure (calling enet_host_service() >> permanently in different thread) or there are better ways? And is it >> alrignt thet I do not use mutexes when call enet_peer_send()? >> >> 5 ноября 2010 г. 17:10 пользователь Nuno Silva >> <[email protected]> написал: >> > Hey there. >> > On your while(true) on the client you must also call enet_host_service >> > in >> > order for the client to keep its connection alive. >> > >> > 2010/11/5 Вячеслав Блинников <[email protected]> >> >> >> >> Hello! >> >> >> >> I wrote the base client accordingly the tutorial and the client which >> >> read inputting through console characters and send it to the server. >> >> Everything is fine but just first 30 seconds - then happen the >> >> disconnection (message "Client information disconnected" shown). >> >> What is wrong with my code? >> >> >> >> >> >> >> >> Server code: >> >> >> >> #include <cstdio> >> >> #include "enet\enet.h" >> >> int main(int argc, int** argv) >> >> { >> >> if (enet_initialize () != 0) >> >> { >> >> printf ("An error occurred while initializing ENet.\n"); >> >> goto END; >> >> } >> >> ENetAddress address; >> >> address.host = ENET_HOST_ANY; >> >> address.port = 1234; >> >> ENetHost* server = enet_host_create ( & address, 32, 2, 0, 0); >> >> if (server == NULL) >> >> { >> >> printf("An error occurred while trying to create an ENet >> >> client host.\n"); >> >> goto END; >> >> } >> >> ENetEvent event; >> >> WAIT_FOR_AN_EVENT: >> >> enet_host_service(server, &event, 5); >> >> 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 = "Client information"; >> >> break; >> >> >> >> case ENET_EVENT_TYPE_RECEIVE: >> >> printf ("A packet of length %u was received from %s on >> >> channel %u. >> >> Containings:\n %s", event.packet -> dataLength, event.peer -> data, >> >> event.channelID, event.packet -> data); >> >> enet_packet_destroy (event.packet); >> >> break; >> >> >> >> case ENET_EVENT_TYPE_DISCONNECT: >> >> printf ("%s disconected.\n", event.peer -> data); >> >> event.peer -> data = NULL; >> >> break; >> >> >> >> case ENET_EVENT_TYPE_NONE: >> >> break; >> >> } >> >> goto WAIT_FOR_AN_EVENT; >> >> >> >> printf("host halted.\n"); >> >> >> >> END: >> >> getchar(); >> >> return 0; >> >> } >> >> >> >> >> >> >> >> Client code: >> >> >> >> #include <cstdio> >> >> #include "enet\enet.h" >> >> #include <vector> >> >> int main(int argc, int** argv) >> >> { >> >> //where reading console data will be stored: >> >> std::vector<char> buffer; >> >> >> >> if (enet_initialize () != 0) >> >> { >> >> printf ("An error occurred while initializing ENet.\n"); >> >> goto END; >> >> } >> >> ENetHost* client = enet_host_create ( NULL, 1, 2, 57600 / >> >> 8, >> >> 14400 / 8); >> >> if(client == 0l) >> >> { >> >> printf("An error occurred while trying to create an ENet >> >> server host.\n"); >> >> goto END; >> >> } >> >> ENetAddress address; >> >> enet_address_set_host(&address, "localhost"); >> >> address.port = 1234; >> >> >> >> ENetPeer* peer = enet_host_connect(client, &address, 2, 0); >> >> if(peer == 0l) >> >> { >> >> printf("No available peers for initiating an ENet >> >> connection.\n"); >> >> goto END; >> >> } >> >> >> >> ENetEvent event; >> >> if (enet_host_service (client, & event, 5000) > 0 && event.type >> >> == >> >> ENET_EVENT_TYPE_CONNECT) >> >> { >> >> puts ("Connection to localhost:1234 succeeded."); >> >> } >> >> else >> >> { >> >> enet_peer_reset (peer); >> >> >> >> puts ("Connection to localhost:1234 failed."); >> >> goto END; >> >> } >> >> >> >> printf("Input some data which will be sent to server...\n"); >> >> >> >> INPUT_DATA: >> >> buffer.clear(); >> >> while(true) >> >> { >> >> char character = getchar(); >> >> buffer.push_back(character); >> >> if(character == '\n') >> >> { >> >> break; >> >> } >> >> } >> >> buffer.push_back('\0'); >> >> >> >> ENetPacket * packet = enet_packet_create(&buffer[0], >> >> buffer.size(), >> >> ENET_PACKET_FLAG_RELIABLE); >> >> enet_peer_send (peer, 0, packet); >> >> enet_host_flush(client); >> >> goto INPUT_DATA; >> >> >> >> END: >> >> getchar(); >> >> >> >> 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
