Code Poetry
and Text Adventures

by catid posted (>30 days ago) 4:49pm Wed. Aug 22nd 2012 PDT
I think the most valuable place for me to be hobbying about is in the mobile marketplace right now.  It took me a very long time to get up to speed on online game networking libraries, and the market is now too mature to break into.  However, there is room at the bottom.

It seems like there is a need for a native Android/iPhone library that provides secure, real-time messaging.  It would just be a simple library that implements a transport layer over UDP.  The server would be expected to be a linux box on AWS.  A way to identify handsets and queue up messages for them would be great.

Problems to solve:
+ Platform dependence
+ UDP timeouts and other issues on mobile
+ Time synchronization with ms resolution
+ Roaming IP
+ Latency reduction with multiple streams and better transport over UDP
+ FEC to further reduce latency using good LDPC codes
+ Forward secrecy, authentication, and encryption
+ Simple, consistent API
+ Verified delivery (message hand-off is guaranteed before deleting it from the delivery queue)
+ Graceful delivery timeout failures (different types of delivery, sometimes care about failures sometimes do not)
+ Scale

Usage types:
+ Notification of an event (push notifications)
+ Inter-handset messaging (chatter)

For match-making:
Each active handset (within last X seconds) should be enumerated.  The handsets need an ID so they can be tied to user accounts or something.
Send a message to the selected handsets to add to a team.  Need a way to handle message timeouts in the same way that messages are received.
Acknowledge team composition.
Have a way to create a groups for message broadcasting, and deliver messages to a whole team.  When the whole team receives a message then it gets deleted from the delivery queue.

For IRC:
You can use the team method of delivering data.  Messages remain in the delivery queue until they expire or all members of the team have received the message.

For geographical rebroadcasting:
Users are given x,y,z coordinates and messages are delivered to users within a certain range bubble.

Lower level stuff:
For ephemeral data like position updates it is better to do it unreliably and send more data rather than using FEC.  So there should be a way to do "dumb" retransmission without a delivery queue.

When a user joins, the player position can be sent as part of their login data or something.  This sort of real-time stuff would be great to incorporate into the library.
last edit by catid edited (>30 days ago) 5:12pm Wed. Aug 22nd 2012 PDT