[Groonga-commit] droonga/express-droonga at 137acd8 [master] Add thennable versions of "emitMessage()", "close()" and "once()"

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri Oct 17 15:31:35 JST 2014


YUKI Hiroshi	2014-10-17 15:31:35 +0900 (Fri, 17 Oct 2014)

  New Revision: 137acd8fc16759109125e39b8a1e014af7cde02c
  https://github.com/droonga/express-droonga/commit/137acd8fc16759109125e39b8a1e014af7cde02c

  Message:
    Add thennable versions of "emitMessage()", "close()" and "once()"

  Modified files:
    lib/droonga-protocol/connection.js
    lib/droonga-protocol/receiver.js
    package.json

  Modified: lib/droonga-protocol/connection.js (+9 -0)
===================================================================
--- lib/droonga-protocol/connection.js    2014-10-17 15:28:59 +0900 (8aa4b35)
+++ lib/droonga-protocol/connection.js    2014-10-17 15:31:35 +0900 (57c1069)
@@ -11,6 +11,7 @@ var EventEmitter = require('events').EventEmitter;
 var fluent = require('fluent-logger');
 var FluentReceiver = require('./receiver').FluentReceiver;
 var util = require('util');
+var Q = require('q');
 var ConsoleLogger = require('../console-logger').ConsoleLogger;
 
 var DEFAULT_FLUENT_TAG =
@@ -221,6 +222,14 @@ Connection.prototype.emitMessage = function(type, body, callback, options) {
   return envelope;
 };
 
+Connection.prototype.thennableEmitMessage = function(type, body, options) {
+  return Q.Promise((function(resolve, reject, notify) {
+    this.emitMessage(type, body, function(errorCode, response) {
+      resolve({ errorCode: errorCode, response: response });
+    }, options);
+  }).bind(this));
+};
+
 Connection.prototype.close = function() {
   this.removeAllListeners();
 

  Modified: lib/droonga-protocol/receiver.js (+39 -2)
===================================================================
--- lib/droonga-protocol/receiver.js    2014-10-17 15:28:59 +0900 (85c7d67)
+++ lib/droonga-protocol/receiver.js    2014-10-17 15:31:35 +0900 (1be8da9)
@@ -2,6 +2,7 @@ var util = require('util');
 var net = require('net');
 var EventEmitter = require('events').EventEmitter;
 var msgpack = require('msgpack');
+var Q = require('q');
 var ConsoleLogger = require('../console-logger').ConsoleLogger;
 
 function MsgPackReceiver(port, options) {
@@ -55,18 +56,54 @@ MsgPackReceiver.prototype.listen = function(callback) {
 MsgPackReceiver.prototype.close = function(callback) {
   this._connections.forEach(function(connection) {
     connection.socket.end();
-  });
+   });
   this._connections = [];
 
   if (this._server) {
     this._server.close(callback);
     this._server = undefined;
-  } else if (callback) {
+  } else if (typeof callback == 'function') {
     callback();
   }
   this.port = undefined;
 };
 
+MsgPackReceiver.prototype.thennableClose = function() {
+  var closed = false;
+  var resolver = undefined;
+  this.close(function() {
+    closed = true;
+    if (typeof resolver == 'function')
+      resolver();
+  });
+
+  return Q.Promise((function(resolve, reject, notify) {
+    if (closed)
+      return resolve();
+
+    resolver = resolve;
+  }).bind(this));
+};
+
+MsgPackReceiver.prototype.thennableOnce = function(event) {
+  var fired = false;
+  var givenArgs = [];
+  var resolver = undefined;
+  this.once(event, function() {
+    fired = true;
+    givenArgs = arguments;
+    if (typeof resolver == 'function')
+      resolver(givenArgs);
+  });
+
+  return Q.Promise((function(resolve, reject, notify) {
+    if (fired)
+      return resolve(givenArgs);
+
+    resolver = resolve;
+  }).bind(this));
+};
+
 exports.MsgPackReceiver = MsgPackReceiver;
 
 

  Modified: package.json (+1 -0)
===================================================================
--- package.json    2014-10-17 15:28:59 +0900 (3fcb64c)
+++ package.json    2014-10-17 15:31:35 +0900 (40f7109)
@@ -31,6 +31,7 @@
     "uber-cache": "*",
     "method-override": "*",
     "msgpack": "*",
+    "q": "*",
     "serve-static": "*",
     "socket.io": ">=1.0",
     "winston": "*"
-------------- next part --------------
HTML����������������������������...
Download 



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