As far as i know ENet isnt thread-safe, so it's probably a bad idea to do that.<br>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.<br>
<br>2010/11/5 ÷ÑÞÅÓÌÁ× âÌÉÎÎÉËÏ× <span dir="ltr"><<a href="mailto:slavmfm@gmail.com">slavmfm@gmail.com</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Thank you very much! It works now!<br>
Is it right calling that function in the separate thread? Like that:<br>
<br>
void* ENetHostService(void* client)<br>
{<br>
 š š š šENetHost* castClient š š= (ENetHost*)client;<br>
 š š š šENetEvent event;<br>
<br>
ENET_HOST_SERVICE:<br>
 š š š šenet_host_service(castClient, &event, 1000);<br>
 š š š šgoto ENET_HOST_SERVICE;<br>
}<br>
<br>
But I think I have some lags in messages sending - what is the point<br>
in third param to enet_host_service()? Does not this function returns<br>
(do it's job (message sending in our case)) just in moment when<br>
enet_peer_send() where called? Or it will wait 1000 milliseconds<br>
anyway?<br>
<br>
So, am I right in the whole structure (calling enet_host_service()<br>
permanently in different thread) or there are better ways? And is it<br>
alrignt thet I do not use mutexes when call enet_peer_send()?<br>
<br>
5 ÎÏÑÂÒÑ 2010šÇ. 17:10 ÐÏÌØÚÏ×ÁÔÅÌØ Nuno Silva<br>
<<a href="mailto:little.coding.fox@gmail.com">little.coding.fox@gmail.com</a>> ÎÁÐÉÓÁÌ:<br>
<div><div></div><div class="h5">> Hey there.<br>
> On your while(true) on the client you must also call enet_host_service in<br>
> order for the client to keep its connection alive.<br>
><br>
> 2010/11/5 ÷ÑÞÅÓÌÁ× âÌÉÎÎÉËÏ× <<a href="mailto:slavmfm@gmail.com">slavmfm@gmail.com</a>><br>
>><br>
>> Hello!<br>
>><br>
>> I wrote the base client accordingly the tutorial and the client which<br>
>> read inputting through console characters and send it to the server.<br>
>> Everything is fine but just first 30 seconds - then happen the<br>
>> disconnection (message "Client information disconnected" shown).<br>
>> What is wrong with my code?<br>
>><br>
>><br>
>><br>
>> Server code:<br>
>><br>
>> #include <cstdio><br>
>> #include "enet\enet.h"<br>
>> int main(int argc, int** argv)<br>
>> {<br>
>> š š š šif (enet_initialize () != 0)<br>
>> š š{<br>
>> š š š šprintf ("An error occurred while initializing ENet.\n");<br>
>> š š š šgoto END;<br>
>> š š}<br>
>> š š š šENetAddress address;<br>
>> š š š šaddress.host = ENET_HOST_ANY;<br>
>> š š š šaddress.port = 1234;<br>
>> š š š šENetHost* server = enet_host_create ( š & address, 32, 2, 0, 0);<br>
>> š šif (server == NULL)<br>
>> š š{<br>
>> š š š šprintf("An error occurred while trying to create an ENet<br>
>> client host.\n");<br>
>> š š š šgoto END;<br>
>> š š}<br>
>> š š š šENetEvent event;<br>
>> WAIT_FOR_AN_EVENT:<br>
>> š š š šenet_host_service(server, &event, 5);<br>
>> š š š šswitch (event.type)<br>
>> š š š š{<br>
>> š š š šcase ENET_EVENT_TYPE_CONNECT:<br>
>> š š š š š š š šprintf ("A new client connected from %x:%u.\n", event.peer<br>
>> -><br>
>> address.host, event.peer -> address.port);<br>
>> š š š š š š š ševent.peer -> data = "Client information";<br>
>> š š š š š š š šbreak;<br>
>><br>
>> š š š šcase ENET_EVENT_TYPE_RECEIVE:<br>
>> š š š š š š š šprintf ("A packet of length %u was received from %s on<br>
>> channel %u.<br>
>> Containings:\n š%s", event.packet -> dataLength, event.peer -> data,<br>
>> event.channelID, event.packet -> data);<br>
>> š š š š š š š šenet_packet_destroy (event.packet);<br>
>> š š š š š š š šbreak;<br>
>><br>
>> š š š šcase ENET_EVENT_TYPE_DISCONNECT:<br>
>> š š š š š š š šprintf ("%s disconected.\n", event.peer -> data);<br>
>> š š š š š š š ševent.peer -> data = NULL;<br>
>> š š š š š š š šbreak;<br>
>><br>
>> š š š šcase ENET_EVENT_TYPE_NONE:<br>
>> š š š š š š š šbreak;<br>
>> š š š š}<br>
>> š š š šgoto WAIT_FOR_AN_EVENT;<br>
>><br>
>> š š š šprintf("host halted.\n");<br>
>><br>
>> END:<br>
>> š š š šgetchar();<br>
>> š š š šreturn 0;<br>
>> }<br>
>><br>
>><br>
>><br>
>> Client code:<br>
>><br>
>> #include <cstdio><br>
>> #include "enet\enet.h"<br>
>> #include <vector><br>
>> int main(int argc, int** argv)<br>
>> {<br>
>> š š š š//where reading console data will be stored:<br>
>> š š š šstd::vector<char> buffer;<br>
>><br>
>> š š š šif (enet_initialize () != 0)<br>
>> š š{<br>
>> š š š šprintf ("An error occurred while initializing ENet.\n");<br>
>> š š š šgoto END;<br>
>> š š}<br>
>> š š š šENetHost* client š š š š= enet_host_create ( NULL, 1, 2, 57600 / 8,<br>
>> 14400 / 8);<br>
>> š š š šif(client == 0l)<br>
>> š š š š{<br>
>> š š š š š š š šprintf("An error occurred while trying to create an ENet<br>
>> server host.\n");<br>
>> š š š š š š š šgoto END;<br>
>> š š š š}<br>
>> š š š šENetAddress address;<br>
>> š š š šenet_address_set_host(&address, "localhost");<br>
>> š š š šaddress.port š š= 1234;<br>
>><br>
>> š š š šENetPeer* peer š= enet_host_connect(client, &address, 2, 0);<br>
>> š š š šif(peer == 0l)<br>
>> š š š š{<br>
>> š š š š š š š šprintf("No available peers for initiating an ENet<br>
>> connection.\n");<br>
>> š š š š š š š šgoto END;<br>
>> š š š š}<br>
>><br>
>> š š š šENetEvent event;<br>
>> š š š šif (enet_host_service (client, & event, 5000) > 0 && event.type ==<br>
>> ENET_EVENT_TYPE_CONNECT)<br>
>> š š š š{<br>
>> š š š š š š š šputs ("Connection to localhost:1234 succeeded.");<br>
>> š š š š}<br>
>> š š š šelse<br>
>> š š š š{<br>
>> š š š š š š š šenet_peer_reset (peer);<br>
>><br>
>> š š š š š š š šputs ("Connection to localhost:1234 failed.");<br>
>> š š š š š š š šgoto END;<br>
>> š š š š}<br>
>><br>
>> š š š šprintf("Input some data which will be sent to server...\n");<br>
>><br>
>> INPUT_DATA:<br>
>> š š š šbuffer.clear();<br>
>> š š š šwhile(true)<br>
>> š š š š{<br>
>> š š š š š š š šchar character = getchar();<br>
>> š š š š š š š šbuffer.push_back(character);<br>
>> š š š š š š š šif(character == '\n')<br>
>> š š š š š š š š{<br>
>> š š š š š š š š š š š šbreak;<br>
>> š š š š š š š š}<br>
>> š š š š}<br>
>> š š š šbuffer.push_back('\0');<br>
>><br>
>> š š š šENetPacket * packet = enet_packet_create(&buffer[0], buffer.size(),<br>
>> ENET_PACKET_FLAG_RELIABLE);<br>
>> š š š šenet_peer_send (peer, 0, packet);<br>
>> š š š šenet_host_flush(client);<br>
>> š š š šgoto INPUT_DATA;<br>
>><br>
>> END:<br>
>> š š š šgetchar();<br>
>><br>
>> š š š šreturn 0;<br>
>> }<br>
>> _______________________________________________<br>
>> ENet-discuss mailing list<br>
>> <a href="mailto:ENet-discuss@cubik.org">ENet-discuss@cubik.org</a><br>
>> <a href="http://lists.cubik.org/mailman/listinfo/enet-discuss" target="_blank">http://lists.cubik.org/mailman/listinfo/enet-discuss</a><br>
><br>
><br>
> _______________________________________________<br>
> ENet-discuss mailing list<br>
> <a href="mailto:ENet-discuss@cubik.org">ENet-discuss@cubik.org</a><br>
> <a href="http://lists.cubik.org/mailman/listinfo/enet-discuss" target="_blank">http://lists.cubik.org/mailman/listinfo/enet-discuss</a><br>
><br>
><br>
_______________________________________________<br>
ENet-discuss mailing list<br>
<a href="mailto:ENet-discuss@cubik.org">ENet-discuss@cubik.org</a><br>
<a href="http://lists.cubik.org/mailman/listinfo/enet-discuss" target="_blank">http://lists.cubik.org/mailman/listinfo/enet-discuss</a><br>
</div></div></blockquote></div><br>