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