[Groonga-commit] groonga/express-droonga at 1728232 [master] Accept user defined suffixes for socket.io API

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index