[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Easy networking module - feedback needed



Can someone explain to me why integrating network packets with pygame
events is a good idea? It was my understanding that the pygame event
buffer can only hold a limited number of events before events get
lost.

On Mon, Jul 2, 2012 at 8:19 PM, Szymon WrÃblewski <bluex0@xxxxxxxxx> wrote:
> Hi,
>
> Networking module is finally in state allowing to test it and show something
> working, so I wrote new blog post describing changes and showing features.
> You can find it here:
> http://pygame-networking.blogspot.com/2012/07/gsoc-journal-client-tests.html
>
> Greetings,
> Szymon WrÃblewski
>
> 2012/6/21 Szymon WrÃblewski <bluex0@xxxxxxxxx>
>>
>> I added documentation about available events:
>>
>> http://pygame_network.readthedocs.org/en/latest/source/pygame_network.html#events
>>
>> 2012/6/21 Szymon WrÃblewski <bluex0@xxxxxxxxx>:
>> >> connection.register('echo', ('user', 'msg'))
>> >
>> >> You would also probably want a separate 'protocol' object on which you
>> >> would register the messages, so
>> >> that you can reuse it for several connections.
>> >
>> > pygame_network.register method is in fact
>> > pygame_network.packets.PacketManager.register, which stores all
>> > registered packet types and maps them to integers to reduce packet
>> > size (those integers must be unique), but if you see use for separate
>> > managers all I need to do is define __init__ for it, to override class
>> > variables with instance variables.
>> >
>> >> connection = pygame_network.connect('localhost', 10000)
>> >
>> > I plan to create Connection class so pygame_network.connect will just
>> > init global connection variable to use by Receiver and SyncObject (it
>> > can be overridden with initialization parameter) and you can create
>> > more connections with this class.
>> > example:
>> > connection = pygame_network.Connection('localhost', 10000)
>> >
>> > I chose pyenet as a low level socket library, so protocol (UDP,
>> > Reliable UDP and other variants) can be selected with enet flags
>> > during creation of packet or sending it. This is my answer for need of
>> > both TCP and UDP protocols.
>> >
>> >> The network events then would have a connection property telling you
>> >> from which connection they came.
>> >
>> > I agree with idea of adding connection to network event. So summing
>> > up, it will look like this:
>> > e.type = NETWORK # event type
>> > e.connection # weakref of connection from which the packet comes
>> > e.channel # channel of connection
>> > e.packet # packet object
>> > e.packet_id # packet identifier
>> > e.net # packet type (to allow e.net == echo)
>> >
>> > 2012/6/21 Radomir Dopieralski <pygame@xxxxxxxxxxxx>
>> >>
>> >> On Wed, Jun 20, 2012 at 8:02 PM, Szymon WrÃblewski <bluex0@xxxxxxxxx>
>> >> wrote:
>> >> > I focused currently on creating client api and not everything is
>> >> > complete
>> >> > yet, but client side could look like this:
>> >> > (same code with syntax highlighting: http://pastebin.com/CiypsKpC)
>> >> >
>> >> > import pygame
>> >> > import pygame_network
>> >> >
>> >> > pygame.init()
>> >> > # create connection
>> >> > pygame_network.connect('localhost', 10000)
>> >> > # connection overlay
>> >> > host = pygame_network.client.Host()
>> >> > # register new packet type
>> >> > # it will call pygame_network.packets.PacketManager.register()
>> >> > echo = pygame_network.register('echo', ('user', 'msg'))
>> >> > name = raw_input('name: ')
>> >>
>> >> I really hate to see the globals here. Wouldn't it be better to have
>> >> it something like this?
>> >>
>> >> connection = pygame_network.connect('localhost', 10000)
>> >> connection.register('echo', ('user', 'msg'))
>> >>
>> >> then you can connect to different servers with different protocols at
>> >> the same time.
>> >> The network events then would have a connection property telling you
>> >> from which connection they came.
>> >> You can also then close one of the connections independently from
>> >> others.
>> >> You would also probably want a separate 'protocol' object on which you
>> >> would register the messages, so
>> >> that you can reuse it for several connections.
>> >>
>> >> What do you think?
>> >>
>> >>
>> >> --
>> >> Radomir Dopieralski
>
>



-- 
Ryan Hope, M.S.
CogWorks Lab
Cognitive Science Department
Rensselaer Polytechnic Institute