Enum size varies with values used, compiler, and platform. But you don't use the enums as type, you use unsigned shorts to store the values. As long as you dont get over 65536 or so values, you'll be fine and only use two bytes.<br>
<br>So to sum it up, you use something like:<br><br>unsigned short PacketID = PacketIDs::Info; //PacketIDs is a namespace with an unnamed enum on it<br>Packet->Write<unsigned short>(&PacketID); //Fancy packet write function<br>
<br>Host->Send(Packet, PACKET_SEND_RELIABLE); //Fancy packet send function<br><br><div class="gmail_quote">On Wed, Mar 2, 2011 at 2:03 PM, ingmar wirths <span dir="ltr"><<a href="mailto:ingmania@googlemail.com">ingmania@googlemail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">@Nuno:<br>
<br>
enum elements are ints, right? I think you can't change this.<br>
Thus you have to append 4 bytes to each packet.<br>
<br>
Would'nt it be more efficient to use chars (supposing you don't<br>
have more than 256 different package types)? And even if, you<br>
could still use two chars (or a short) instead of 4 bytes.<br>
<br>
What is your opinion on this?<br>
<br>
2011/2/28 Nuno Silva <<a href="mailto:little.coding.fox@gmail.com">little.coding.fox@gmail.com</a>>:<br>
<div><div></div><div class="h5">> First of all you should have an enumeration (enum) of all the packet types<br>
> you can get. Don't use strings, those are too slow and may cause plenty of<br>
> performance issues.<br>
><br>
> Secondly, you can't just convert the data to string and delete the packet,<br>
> since the data in the string will be deleted at the same time. At most you<br>
> should copy the string, but like i said, you should use enumerations<br>
> instead.<br>
> Finally, you could always use a reference-to-Custom-Packet-class in your<br>
> function. Something like this:<br>
><br>
> class MyPacket<br>
> {<br>
> friend class HostUpdate;<br>
> private:<br>
>     std::vector<unsigned char> data;<br>
>     unsigned short type;<br>
> public:<br>
>     MyPacket() : type(MAX_PACKET_TYPE);<br>
>     int readInt();<br>
>     char readChar();<br>
>     std::string readString();<br>
>     <...><br>
> }<br>
><br>
> unsigned short UpdateHost(MyPacket &packet) { <update and copy Packet Data<br>
> to packet> }<br>
><br>
> On Mon, Feb 28, 2011 at 5:01 PM, Alexaroth <<a href="mailto:alex_prislopeanu@yahoo.com">alex_prislopeanu@yahoo.com</a>><br>
> wrote:<br>
>><br>
>> Indeed it does not send any data... Now I have another issue:<br>
>><br>
>><br>
>><br>
>> How can I make a function like<br>
>><br>
>> char* updateHost()<br>
>> {string* b;<br>
>> while (enet_host_service (server, & event, 100) > 0)<br>
>>     {   switch (event.type)<br>
>>         {         case ENET_EVENT_TYPE_RECEIVE:<br>
>><br>
>>               b=reinterpret_cast<char*>(event.packet->data);<br>
>><br>
>>              enet_packet_destroy (event.packet);<br>
>>              return b;<br>
>>              break;<br>
>> }}}<br>
>> I need to call from the main program the function like this:<br>
>> if (updateHost()=="connected")<br>
>> {cout>> Client connected !}<br>
>><br>
>> I practically want to return whatever packet a client/server sends me...<br>
>><br>
>><br>
>><br>
>> ________________________________<br>
>> From: Ruud van Gaal <<a href="mailto:ruud@racer.nl">ruud@racer.nl</a>><br>
>> To: Discussion of the ENet library <<a href="mailto:enet-discuss@cubik.org">enet-discuss@cubik.org</a>><br>
>> Sent: Monday, February 28, 2011 4:23 PM<br>
>> Subject: Re: [ENet-discuss] Problem partailly solved<br>
>><br>
>> No packet is being sent indeed.<br>
>> The peer->data is a local pointer that only 'lives' at the computer that<br>
>> defines it. Nothing is send; you need packets for that. It's just to<br>
>> associate computer-local data with the peer (a peer is a computer, not a<br>
>> packet).<br>
>><br>
>> Ruud<br>
>><br>
>> On Mon, Feb 28, 2011 at 2:10 PM, Nuno Silva <<a href="mailto:little.coding.fox@gmail.com">little.coding.fox@gmail.com</a>><br>
>> wrote:<br>
>><br>
>> There's no packet size for peer data (at least from what the docs tell me<br>
>> about the _ENetPeer struct), since he's probably not sending a packet. He's<br>
>> just setting the peer's data to the name, not a packet's data.<br>
>><br>
>> On Mon, Feb 28, 2011 at 12:55 PM, Jay Sprenkle <<a href="mailto:jsprenkle@gmail.com">jsprenkle@gmail.com</a>><br>
>> wrote:<br>
>><br>
>> Some quick comments. See below:<br>
>><br>
>> On Mon, Feb 28, 2011 at 5:32 AM, Alexaroth <<a href="mailto:alex_prislopeanu@yahoo.com">alex_prislopeanu@yahoo.com</a>><br>
>> wrote:<br>
>><br>
>> Well I kinda understand how things work... the thing is this<br>
>> I have some client code:<br>
>> peer = enet_host_connect (client, & address, 2, 0);<br>
>> name =  player.getname();    //this returns a string from inside a class<br>
>> member<br>
>> peer->data = (void*)name.c_str();  I am making the peer data the name of<br>
>> the player<br>
>><br>
>> I assume you set the packet size to the size of the name string ?<br>
>><br>
>><br>
>><br>
>><br>
>> On the server end:<br>
>><br>
>> ENetPeer *peer2[2];<br>
>> while (enet_host_service (server, & event, 100) > 0)<br>
>>     {   switch (event.type)<br>
>>         {<br>
>>         case ENET_EVENT_TYPE_CONNECT:<br>
>><br>
>>             peer2[1] = event.peer;<br>
>>             textprintf_ex(screen, font, 10, 200, white,-1,"%s is client<br>
>> !",peer2[1]->data);   this is allegro, it just outputs the %s is client on<br>
>> screen<br>
>>             name=(char*)peer->data;<br>
>><br>
>><br>
>> You're using a pointer here instead of copying the data from the enet<br>
>> packet.  Make sure you aren't using deleted data or just losing memory by<br>
>> not destroying packets.<br>
>><br>
>> Shouldn't this:<br>
>> name=(char*)peer->data;<br>
>><br>
>> be this:<br>
>> name=(char*)peer2[1]->data;<br>
>><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>
>> _______________________________________________<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>
>> _______________________________________________<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>
>><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>
> _______________________________________________<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>