Question

I'm trying to work out some kinks in a multitouch application I've built. It uses flosc to communicate with a xml socket server that sends the multitouch events.

This all works fine and dandy for most of the time.

But if I'm mean and flood it with multitouch events Flash can't keep up with parsing the input, and the socket just keeps getting data that piles up until it either catches up or the whole thing crashes.

I have no problem discarding input once there's too much*, but I'm having trouble devising a clever way to do it.

* The app does 6-10 simultaneous inputs with no problem, things start to get hairy once I have to deal with 20+ which basically means someone is lying on the table ;)

Was it helpful?

Solution

Where is it choking? First I would start with doing some analysis.

Profile the "Server":

  • how much time it is taking to do XML encoding?
  • how much time it is taking to completely write to the socket?

Profile the Client:

  • how much time is it taking to read the data from the socket?
  • how much time is it taking to decode the XML?

Personally for something like this I would avoid XML if you could, and/or try to lazy-decode the xml (do it when you know you need it...so you can throw away XML chunks without wasting cpu cycles if your program is getting overloaded).

I would try to go with a raw Socket class http://www.adobe.com/livedocs/flash/9.0/main/00000318.html#wp128960 and a custom packet format, an array where each index contains relevant data. in psudocode:

messageArray = [message type, arg0, arg1, arg2...];

so you might have a 'mouse move event' defined like:

MessageConstants.MOUSE_MOVE = 0; // or whatever id you want

messageArray = [MessageConstants.MOUSE_MOVE, mouseDeltaX, mouseDeltaY];

Then use AMF http://en.wikipedia.org/wiki/Action_Message_Format to serialize the data over the wire.

Hope this helps.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top