LearnBoost/socket.io — pull request #1440 by kevin-roark (2014-03-03 03:29:57+00:00)
Title: Added binary support to broadcasting of events

Summary:
Added binary support to broadcasting by adding a binary check to namespace.js and pre-encoding events in adapter.js.

Question:
I think the pre-encoding stuff in adapter (and the new parameter in client.js) is relatively clean, but it could possibly be better. I was thinking of checking if packet is an array (it is post-encoding) or an object (pre-encoding) rather than passing the "preEncoded" flag, but let me know what you think.

The commit message:
lib/namespace.js previously was not considering whether an event had
binary data and was giving all events parser.EVENT type -- now it uses
the has-binary-data module to set the event type appropriately.

Then, after this fix there was a problem with lib/adapter.js -- because
socket.io-parser modifies the packet object in its encoding, the sockets
after the 1st in a broadcast were not getting the correct data. To fix
this, the data is encoded once in adapter, and then the encoded data
is passed to each of the sockets.

lib/socket.js and lib/client.js were updated to allow for the above. The
.packet method of each now takes an optional second "preEncoded" parameter
-- if this is true, then client skips the encoding and just writes the
packet argument directly to engine.

test/socket.io.js was updated to add two new tests that test
multi-messaging of events with binary data.