[ENet-discuss] Problem partailly solved

Nuno Silva little.coding.fox at gmail.com
Wed Mar 2 06:10:04 PST 2011


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.

So to sum it up, you use something like:

unsigned short PacketID = PacketIDs::Info; //PacketIDs is a namespace with
an unnamed enum on it
Packet->Write<unsigned short>(&PacketID); //Fancy packet write function

Host->Send(Packet, PACKET_SEND_RELIABLE); //Fancy packet send function

On Wed, Mar 2, 2011 at 2:03 PM, ingmar wirths <ingmania at googlemail.com>wrote:

> @Nuno:
>
> enum elements are ints, right? I think you can't change this.
> Thus you have to append 4 bytes to each packet.
>
> Would'nt it be more efficient to use chars (supposing you don't
> have more than 256 different package types)? And even if, you
> could still use two chars (or a short) instead of 4 bytes.
>
> What is your opinion on this?
>
> 2011/2/28 Nuno Silva <little.coding.fox at gmail.com>:
> > First of all you should have an enumeration (enum) of all the packet
> types
> > you can get. Don't use strings, those are too slow and may cause plenty
> of
> > performance issues.
> >
> > Secondly, you can't just convert the data to string and delete the
> packet,
> > since the data in the string will be deleted at the same time. At most
> you
> > should copy the string, but like i said, you should use enumerations
> > instead.
> > Finally, you could always use a reference-to-Custom-Packet-class in your
> > function. Something like this:
> >
> > class MyPacket
> > {
> > friend class HostUpdate;
> > private:
> >     std::vector<unsigned char> data;
> >     unsigned short type;
> > public:
> >     MyPacket() : type(MAX_PACKET_TYPE);
> >     int readInt();
> >     char readChar();
> >     std::string readString();
> >     <...>
> > }
> >
> > unsigned short UpdateHost(MyPacket &packet) { <update and copy Packet
> Data
> > to packet> }
> >
> > On Mon, Feb 28, 2011 at 5:01 PM, Alexaroth <alex_prislopeanu at yahoo.com>
> > wrote:
> >>
> >> Indeed it does not send any data... Now I have another issue:
> >>
> >>
> >>
> >> How can I make a function like
> >>
> >> char* updateHost()
> >> {string* b;
> >> while (enet_host_service (server, & event, 100) > 0)
> >>     {   switch (event.type)
> >>         {         case ENET_EVENT_TYPE_RECEIVE:
> >>
> >>               b=reinterpret_cast<char*>(event.packet->data);
> >>
> >>              enet_packet_destroy (event.packet);
> >>              return b;
> >>              break;
> >> }}}
> >> I need to call from the main program the function like this:
> >> if (updateHost()=="connected")
> >> {cout>> Client connected !}
> >>
> >> I practically want to return whatever packet a client/server sends me...
> >>
> >>
> >>
> >> ________________________________
> >> From: Ruud van Gaal <ruud at racer.nl>
> >> To: Discussion of the ENet library <enet-discuss at cubik.org>
> >> Sent: Monday, February 28, 2011 4:23 PM
> >> Subject: Re: [ENet-discuss] Problem partailly solved
> >>
> >> No packet is being sent indeed.
> >> The peer->data is a local pointer that only 'lives' at the computer that
> >> defines it. Nothing is send; you need packets for that. It's just to
> >> associate computer-local data with the peer (a peer is a computer, not a
> >> packet).
> >>
> >> Ruud
> >>
> >> On Mon, Feb 28, 2011 at 2:10 PM, Nuno Silva <
> little.coding.fox at gmail.com>
> >> wrote:
> >>
> >> There's no packet size for peer data (at least from what the docs tell
> me
> >> about the _ENetPeer struct), since he's probably not sending a packet.
> He's
> >> just setting the peer's data to the name, not a packet's data.
> >>
> >> On Mon, Feb 28, 2011 at 12:55 PM, Jay Sprenkle <jsprenkle at gmail.com>
> >> wrote:
> >>
> >> Some quick comments. See below:
> >>
> >> On Mon, Feb 28, 2011 at 5:32 AM, Alexaroth <alex_prislopeanu at yahoo.com>
> >> wrote:
> >>
> >> Well I kinda understand how things work... the thing is this
> >> I have some client code:
> >> peer = enet_host_connect (client, & address, 2, 0);
> >> name =  player.getname();    //this returns a string from inside a class
> >> member
> >> peer->data = (void*)name.c_str();  I am making the peer data the name of
> >> the player
> >>
> >> I assume you set the packet size to the size of the name string ?
> >>
> >>
> >>
> >>
> >> On the server end:
> >>
> >> ENetPeer *peer2[2];
> >> while (enet_host_service (server, & event, 100) > 0)
> >>     {   switch (event.type)
> >>         {
> >>         case ENET_EVENT_TYPE_CONNECT:
> >>
> >>             peer2[1] = event.peer;
> >>             textprintf_ex(screen, font, 10, 200, white,-1,"%s is client
> >> !",peer2[1]->data);   this is allegro, it just outputs the %s is client
> on
> >> screen
> >>             name=(char*)peer->data;
> >>
> >>
> >> You're using a pointer here instead of copying the data from the enet
> >> packet.  Make sure you aren't using deleted data or just losing memory
> by
> >> not destroying packets.
> >>
> >> Shouldn't this:
> >> name=(char*)peer->data;
> >>
> >> be this:
> >> name=(char*)peer2[1]->data;
> >>
> >>
> >>
> >> _______________________________________________
> >> ENet-discuss mailing list
> >> ENet-discuss at cubik.org
> >> http://lists.cubik.org/mailman/listinfo/enet-discuss
> >>
> >>
> >>
> >> _______________________________________________
> >> ENet-discuss mailing list
> >> ENet-discuss at cubik.org
> >> http://lists.cubik.org/mailman/listinfo/enet-discuss
> >>
> >>
> >>
> >> _______________________________________________
> >> ENet-discuss mailing list
> >> ENet-discuss at cubik.org
> >> http://lists.cubik.org/mailman/listinfo/enet-discuss
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> ENet-discuss mailing list
> >> ENet-discuss at cubik.org
> >> http://lists.cubik.org/mailman/listinfo/enet-discuss
> >>
> >
> >
> > _______________________________________________
> > ENet-discuss mailing list
> > ENet-discuss at cubik.org
> > http://lists.cubik.org/mailman/listinfo/enet-discuss
> >
> >
> _______________________________________________
> ENet-discuss mailing list
> ENet-discuss at cubik.org
> http://lists.cubik.org/mailman/listinfo/enet-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cubik.org/pipermail/enet-discuss/attachments/20110302/17a8baa5/attachment.html>


More information about the ENet-discuss mailing list