[Groonga-commit] groonga/express-kotoumi [master] Rewrite socket.io adaptor around request-response and publish-subscribe model commands

Back to archive index

YUKI Hiroshi null+****@clear*****
Thu Feb 7 17:26:53 JST 2013


YUKI Hiroshi	2013-02-07 17:26:53 +0900 (Thu, 07 Feb 2013)

  New Revision: 83bd23d867d866dfe836dcf551b97ae091b5bc1a
  https://github.com/groonga/express-kotoumi/commit/83bd23d867d866dfe836dcf551b97ae091b5bc1a

  Log:
    Rewrite socket.io adaptor around request-response and publish-subscribe model commands

  Modified files:
    lib/frontend/socket.io-adaptor.js

  Modified: lib/frontend/socket.io-adaptor.js (+31 -14)
===================================================================
--- lib/frontend/socket.io-adaptor.js    2013-02-07 17:18:12 +0900 (ab25b8e)
+++ lib/frontend/socket.io-adaptor.js    2013-02-07 17:26:53 +0900 (0bfece8)
@@ -2,6 +2,8 @@ var socketIo = require('socket.io');
 var model = require('../model');
 var defaultCommands = require('./default-commands/socket.io');
 
+var DEFAULT_TIMEOUT = 10 * 1000;
+
 function deepClone(base) {
   if (!base || typeof base != 'object')
     return base;
@@ -30,28 +32,41 @@ exports.register = function(application, server, params) {
   if (!server)
     throw new Error('A server instance is required!');
 
-  function createRequestHandler(commandName, socket) {
+  function createClientMessageHandler(commandName, socket) {
     return (function(data) {
       var commandDefinition = unifiedCommandSet[commandName];
 
       if (commandDefinition.toBackend)
         commandName, data = commandDefinition.toBackend(commandName, data);
 
+      var callback = null;
+      var options = {};
+      if (model.isA(commandDefinition, model.RequestResponse)) {
+        callback = function(envelope) {
+          var event = event.type;
+          var data = envelope.body;
+
+          if (commandDefinition.toClient)
+            event, data = commandDefinition.toClient(event, data);
+
+          socket.emit(event, data);
+        };
+        options.timeout = DEFAULT_TIMEOUT;
+      }
+
       connection.emitMessage(commandName, data, callback, options);
     });
   }
 
-  function createBackendMessageHandler(socket) {
+  function createPublishedMessageHandler(commandName, socket) {
     return (function(envelope) {
+      var commandDefinition = unifiedCommandSet[commandName];
+
       var event = envelope.type;
+      var data = envelope.body;
 
-      var data;
-      var resultTypeMatch = envelope.type.match(/^(.+)\.result$/);
-      if (resultTypeMatch && unifiedCommandSet[resultTypeMatch[1]]) {
-        var command = unifiedCommandSet[resultTypeMatch[1]];
-        if (command.toClient)
-          event, data = command.toClient(envelope.type, envelope.body);
-      }
+      if (commandDefinition.toClient)
+        event, data = commandDefinition.toClient(event, body);
 
       socket.emit(event, data);
     });
@@ -90,17 +105,19 @@ exports.register = function(application, server, params) {
     var messageHandlers = [];
     registeredCommands.forEach(function(command) {
       socket.on(command.command,
-                createRequestHandler(command.command, socket));
-    });
+                createClientMessageHandler(command.command, socket));
 
-    var backendMessageHandler = createBackendMessageHandler(socket);
-    connection.on('message', backendMessageHandler);
+      if (model.isA(command.definition, model.PublishSubscribe)) {
+        var publishedMessageHandler = createPublishedMessageHandler(socket);
+        connection.on('publish', publishedMessageHandler);
+      }
+    });
 
     var errorHandler = createErrorHandler(socket);
     connection.on('error', errorHandler);
 
     socket.on('disconnect', function() {
-      connection.removeListener('message', backendMessageHandler);
+      connection.removeListener('publish', publishedMessageHandler);
       connection.removeListener('error', errorHandler);
       socket.removeAllListeners();
     });
-------------- next part --------------
HTML����������������������������...
Download 



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