[Groonga-commit] groonga/express-kotoumi [master] Add socket.io adaptor

Back to archive index

YUKI Hiroshi null+****@clear*****
Mon Jan 21 13:57:37 JST 2013


YUKI Hiroshi	2013-01-21 13:57:37 +0900 (Mon, 21 Jan 2013)

  New Revision: 5a5150044f21dbcfbb43ad9e12db7ad2948883b1
  https://github.com/groonga/express-kotoumi/commit/5a5150044f21dbcfbb43ad9e12db7ad2948883b1

  Log:
    Add socket.io adaptor

  Added files:
    lib/socket-adaptor.js

  Added: lib/socket-adaptor.js (+59 -0) 100644
===================================================================
--- /dev/null
+++ lib/socket-adaptor.js    2013-01-21 13:57:37 +0900 (24e535a)
@@ -0,0 +1,59 @@
+var Connection = require('./backend-adaptor').Connection;
+var builders = require('./builders');
+var socketIo = require('socket.io');
+
+function deepClone(base) {
+  if (!base || typeof base != 'object')
+    return base;
+
+  var cloned = Object.create(null);
+  Object.keys(base).forEach(function(key) {
+    cloned[key] = deepClone(base[key]);
+  });
+  return cloned;
+}
+
+function buildResultData(envelope) {
+  return {
+    statusCode: envelope.statusCode,
+    body: deepClone(envelope.body)
+  };
+}
+exports.buildResultData = buildResultData;
+
+exports.registerSocketHandlers = function(application, server, params) {
+  params = params || {};
+  var connection = params.connection || new Connection(params);
+
+  function createRequestHandler(command, socket) {
+    return (function(data) {
+      connection.emitMessage(command, data);
+    });
+  }
+
+  function createResultHandler(command, socket) {
+    return (function(envelope) {
+      if (/\.result/.test(envelope.type)) {
+        var data = buildResultData(envelope);
+        socket.emit(envelope.type, data);
+      }
+    });
+  }
+
+  var io = socketIo.listen(server);
+  io.sockets.on('connection', function(socket) {
+    [
+      'status',
+      'search',
+      'createtable',
+      'removetable',
+      'createcolumn',
+      'removecolumn',
+      'loadrecord',
+      'loadrecords',
+    ].forEach(function(command) {
+      socket.on(command, createRequestHandler(command, socket));
+      connection.on('message', createResultHandler(command, socket));
+    });
+  });
+}
-------------- next part --------------
HTML����������������������������...
Download 



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