YUKI Hiroshi
null+****@clear*****
Thu May 30 19:09:52 JST 2013
YUKI Hiroshi 2013-05-30 19:09:52 +0900 (Thu, 30 May 2013) New Revision: 172823276a1dc4bb8aab591c00056c06c967bcb9 https://github.com/groonga/express-droonga/commit/172823276a1dc4bb8aab591c00056c06c967bcb9 Message: Accept user defined suffixes for socket.io API Modified files: lib/frontend/socket.io-adaptor.js test/frontend-socket.io-adaptor.test.js Modified: lib/frontend/socket.io-adaptor.js (+14 -7) =================================================================== --- lib/frontend/socket.io-adaptor.js 2013-05-01 16:38:21 +0900 (1c3f7c2) +++ lib/frontend/socket.io-adaptor.js 2013-05-30 19:09:52 +0900 (bcad72b) @@ -33,11 +33,15 @@ exports.register = function(application, server, params) { throw new Error('A server instance is required!'); function createClientMessageHandler(commandName, socket) { - return (function(data) { + return (function() { var commandDefinition = unifiedCommandSet[commandName]; if (!commandDefinition) return; + var args = Array.prototype.slice.call(arguments, 0); + var data = arguments.pop(); + var eventSuffix = args.join('.'); + var event = commandName; if (commandDefinition.toBackend) { var result = commandDefinition.toBackend(event, data); @@ -54,16 +58,19 @@ exports.register = function(application, server, params) { return; } - var event = envelope.type; - var data = envelope.body; + var responseEvent = envelope.type; + var responseData = envelope.body; if (commandDefinition.toClient) { - var result = commandDefinition.toClient(event, data); - event = result[0]; - data = result[1]; + var result = commandDefinition.toClient(responseEvent, responseData); + responseEvent = result[0]; + responseData = result[1]; } - socket.emit(event, data); + if (eventSuffix) + responseEvent += '.' + eventSuffix; + + socket.emit(responseEvent, responseData); }; options.timeout = DEFAULT_TIMEOUT; } else if (model.PublishSubscribe.isInstance(commandDefinition)) { Modified: test/frontend-socket.io-adaptor.test.js (+43 -0) =================================================================== --- test/frontend-socket.io-adaptor.test.js 2013-05-01 16:38:21 +0900 (276ed5f) +++ test/frontend-socket.io-adaptor.test.js 2013-05-30 19:09:52 +0900 (51eef60) @@ -294,6 +294,49 @@ suite('Socket.IO API', function() { done(error); }); }); + + test('event with suffix', function(done) { + var clientReceiver; + utils.setupApplication() + .next(function(result) { + server = result.server; + connection = result.connection; + backend = result.backend; + socketIoAdaptor.register(result.application, server, { + tag: utils.testTag, + connection: connection, + plugins: [testPlugin] + }); + }) + .createClientSockets(1) + .next(function(newClientSocket) { + clientSockets = clientSockets.concat(newClientSockets); + clientSockets[0].emit('reqrep', 'extra', 'name' 'message'); + }).wait(0.01).next(function() { + assert.deepEqual(backend.getBodies(), ['message']); + + var responses = backend.getMessages().map(function(envelope) { + return utils.createReplyEnvelope(envelope, 'reqrep', envelope.body); + }); + + clientReceiver = nodemock + .mock('receive').takes('message'); + clientSockets[0].on('reqrep.extra.name', function(data) { + clientReceiver.receive(data); + }); + + return utils + .sendPacketTo(utils.createPacket(responses[0]), utils.testReceivePort); + }) + .wait(0.01) + .next(function() { + clientReceiver.assertThrows(); + done(); + }) + .error(function(error) { + done(error); + }); + }); }); suite('publish-subscribe', function() { -------------- next part -------------- HTML����������������������������...Download