Add Object.freeze on private enums
Improve code readability
This commit is contained in:
		@@ -53,29 +53,29 @@ function createEventData(eventId, type, isJson, data, metadata) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Expose classes
 | 
					// Expose classes
 | 
				
			||||||
module.exports.Position = results.Position;
 | 
					exports.Position = results.Position;
 | 
				
			||||||
module.exports.UserCredentials = require('./systemData/userCredentials');
 | 
					exports.UserCredentials = require('./systemData/userCredentials');
 | 
				
			||||||
module.exports.PersistentSubscriptionSettings = require('./persistentSubscriptionSettings');
 | 
					exports.PersistentSubscriptionSettings = require('./persistentSubscriptionSettings');
 | 
				
			||||||
module.exports.SystemConsumerStrategies = require('./systemConsumerStrategies');
 | 
					exports.SystemConsumerStrategies = require('./systemConsumerStrategies');
 | 
				
			||||||
module.exports.GossipSeed = require('./gossipSeed');
 | 
					exports.GossipSeed = require('./gossipSeed');
 | 
				
			||||||
module.exports.EventStoreConnection = require('./eventStoreConnection');
 | 
					exports.EventStoreConnection = require('./eventStoreConnection');
 | 
				
			||||||
module.exports.ProjectionsManager = require('./projections/projectionsManager');
 | 
					exports.ProjectionsManager = require('./projections/projectionsManager');
 | 
				
			||||||
// Expose errors
 | 
					// Expose errors
 | 
				
			||||||
module.exports.WrongExpectedVersionError = require('./errors/wrongExpectedVersionError');
 | 
					exports.WrongExpectedVersionError = require('./errors/wrongExpectedVersionError');
 | 
				
			||||||
module.exports.StreamDeletedError = require('./errors/streamDeletedError');
 | 
					exports.StreamDeletedError = require('./errors/streamDeletedError');
 | 
				
			||||||
module.exports.AccessDeniedError = require('./errors/accessDeniedError');
 | 
					exports.AccessDeniedError = require('./errors/accessDeniedError');
 | 
				
			||||||
module.exports.ProjectionCommandFailedError = require('./errors/projectionCommandFailedError');
 | 
					exports.ProjectionCommandFailedError = require('./errors/projectionCommandFailedError');
 | 
				
			||||||
// Expose enums/constants
 | 
					// Expose enums/constants
 | 
				
			||||||
module.exports.expectedVersion = expectedVersion;
 | 
					exports.expectedVersion = expectedVersion;
 | 
				
			||||||
module.exports.positions = positions;
 | 
					exports.positions = positions;
 | 
				
			||||||
module.exports.streamPosition = streamPosition;
 | 
					exports.streamPosition = streamPosition;
 | 
				
			||||||
module.exports.systemMetadata = require('./common/systemMetadata');
 | 
					exports.systemMetadata = require('./common/systemMetadata');
 | 
				
			||||||
module.exports.eventReadStatus = results.EventReadStatus;
 | 
					exports.eventReadStatus = results.EventReadStatus;
 | 
				
			||||||
module.exports.sliceReadStatus = require('./sliceReadStatus');
 | 
					exports.sliceReadStatus = require('./sliceReadStatus');
 | 
				
			||||||
// Expose loggers
 | 
					// Expose loggers
 | 
				
			||||||
module.exports.NoopLogger = require('./common/log/noopLogger');
 | 
					exports.NoopLogger = require('./common/log/noopLogger');
 | 
				
			||||||
module.exports.FileLogger = require('./common/log/fileLogger');
 | 
					exports.FileLogger = require('./common/log/fileLogger');
 | 
				
			||||||
// Expose Helper functions
 | 
					// Expose Helper functions
 | 
				
			||||||
module.exports.createConnection = require('./eventStoreConnection').create;
 | 
					exports.createConnection = require('./eventStoreConnection').create;
 | 
				
			||||||
module.exports.createJsonEventData = createJsonEventData;
 | 
					exports.createJsonEventData = createJsonEventData;
 | 
				
			||||||
module.exports.createEventData = createEventData;
 | 
					exports.createEventData = createEventData;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,8 +44,7 @@ AppendToStreamOperation.prototype._inspectResponse = function(response) {
 | 
				
			|||||||
  switch (response.result)
 | 
					  switch (response.result)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    case ClientMessage.OperationResult.Success:
 | 
					    case ClientMessage.OperationResult.Success:
 | 
				
			||||||
      if (this._wasCommitTimeout)
 | 
					      if (this._wasCommitTimeout) this.log.debug("IDEMPOTENT WRITE SUCCEEDED FOR %s.", this);
 | 
				
			||||||
        this.log.debug("IDEMPOTENT WRITE SUCCEEDED FOR %s.", this);
 | 
					 | 
				
			||||||
      this._succeed();
 | 
					      this._succeed();
 | 
				
			||||||
      return new InspectionResult(InspectionDecision.EndOperation, "Success");
 | 
					      return new InspectionResult(InspectionDecision.EndOperation, "Success");
 | 
				
			||||||
    case ClientMessage.OperationResult.PrepareTimeout:
 | 
					    case ClientMessage.OperationResult.PrepareTimeout:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var InspectionDecision = require('../systemData/inspectionDecision');
 | 
					var InspectionDecision = require('../systemData/inspectionDecision');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var ensure = require('../common/utils/ensure');
 | 
					var ensure = require('../common/utils/ensure');
 | 
				
			||||||
var OperationBase = require('../clientOperations/operationBase');
 | 
					var OperationBase = require('../clientOperations/operationBase');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,5 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var ensure = require('../common/utils/ensure');
 | 
					 | 
				
			||||||
var OperationBase = require('../clientOperations/operationBase');
 | 
					var OperationBase = require('../clientOperations/operationBase');
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var ClientMessage = require('../messages/clientMessage');
 | 
					var ClientMessage = require('../messages/clientMessage');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var InspectionDecision = require('../systemData/inspectionDecision');
 | 
					var InspectionDecision = require('../systemData/inspectionDecision');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,11 +42,12 @@ OperationBase.prototype._succeed = function() {
 | 
				
			|||||||
  if (!this._completed) {
 | 
					  if (!this._completed) {
 | 
				
			||||||
    this._completed = true;
 | 
					    this._completed = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (this._response)
 | 
					    if (this._response) {
 | 
				
			||||||
      this._cb(null, this._transformResponse(this._response));
 | 
					      this._cb(null, this._transformResponse(this._response));
 | 
				
			||||||
    else
 | 
					    } else {
 | 
				
			||||||
      this._cb(new Error("No result."))
 | 
					      this._cb(new Error("No result."))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OperationBase.prototype.createNetworkPackage = function(correlationId) {
 | 
					OperationBase.prototype.createNetworkPackage = function(correlationId) {
 | 
				
			||||||
@@ -130,8 +131,7 @@ OperationBase.prototype._inspectNotHandled = function(pkg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
OperationBase.prototype._inspectUnexpectedCommand = function(pkg, expectedCommand)
 | 
					OperationBase.prototype._inspectUnexpectedCommand = function(pkg, expectedCommand)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (pkg.command === expectedCommand)
 | 
					  if (pkg.command === expectedCommand) throw new Error("Command shouldn't be " + TcpCommand.getName(pkg.command));
 | 
				
			||||||
    throw new Error("Command shouldn't be " + TcpCommand.getName(pkg.command));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this.log.error("Unexpected TcpCommand received.\n"
 | 
					  this.log.error("Unexpected TcpCommand received.\n"
 | 
				
			||||||
      + "Expected: %s, Actual: %s, Flags: %s, CorrelationId: %s\n"
 | 
					      + "Expected: %s, Actual: %s, Flags: %s, CorrelationId: %s\n"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var ClientMessage = require('../messages/clientMessage');
 | 
					var ClientMessage = require('../messages/clientMessage');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var ClientMessage = require('../messages/clientMessage');
 | 
					var ClientMessage = require('../messages/clientMessage');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,7 +59,6 @@ ReadEventOperation.prototype._transformResponse = function(response) {
 | 
				
			|||||||
  return new results.EventReadResult(convert(response.result), this._stream, this._eventNumber, response.event);
 | 
					  return new results.EventReadResult(convert(response.result), this._stream, this._eventNumber, response.event);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
function convert(result)
 | 
					function convert(result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  switch (result)
 | 
					  switch (result)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var ClientMessage = require('../messages/clientMessage');
 | 
					var ClientMessage = require('../messages/clientMessage');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var ClientMessage = require('../messages/clientMessage');
 | 
					var ClientMessage = require('../messages/clientMessage');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,10 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var InspectionDecision = require('../systemData/inspectionDecision');
 | 
					var InspectionDecision = require('../systemData/inspectionDecision');
 | 
				
			||||||
var InspectionResult = require('./../systemData/inspectionResult');
 | 
					var InspectionResult = require('./../systemData/inspectionResult');
 | 
				
			||||||
var ClientMessage = require('../messages/clientMessage');
 | 
					var ClientMessage = require('../messages/clientMessage');
 | 
				
			||||||
var EventStoreTransaction = require('../eventStoreTransaction');
 | 
					var EventStoreTransaction = require('../eventStoreTransaction');
 | 
				
			||||||
var results = require('../results');
 | 
					 | 
				
			||||||
var AccessDeniedError = require('../errors/accessDeniedError');
 | 
					var AccessDeniedError = require('../errors/accessDeniedError');
 | 
				
			||||||
var WrongExpectedVersionError = require('../errors/wrongExpectedVersionError');
 | 
					var WrongExpectedVersionError = require('../errors/wrongExpectedVersionError');
 | 
				
			||||||
var StreamDeletedError = require('../errors/streamDeletedError');
 | 
					var StreamDeletedError = require('../errors/streamDeletedError');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TcpCommand = require('../systemData/tcpCommand');
 | 
					var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			||||||
var TcpFlags = require('../systemData/tcpFlags');
 | 
					var TcpFlags = require('../systemData/tcpFlags');
 | 
				
			||||||
@@ -46,8 +45,7 @@ SubscriptionOperation.prototype._enqueueSend = function(pkg) {
 | 
				
			|||||||
SubscriptionOperation.prototype.subscribe = function(correlationId, connection) {
 | 
					SubscriptionOperation.prototype.subscribe = function(correlationId, connection) {
 | 
				
			||||||
  if (connection === null) throw new TypeError("connection is null.");
 | 
					  if (connection === null) throw new TypeError("connection is null.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._subscription !== null || this._unsubscribed)
 | 
					  if (this._subscription !== null || this._unsubscribed) return false;
 | 
				
			||||||
    return false;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this._correlationId = correlationId;
 | 
					  this._correlationId = correlationId;
 | 
				
			||||||
  connection.enqueueSend(this._createSubscriptionPackage());
 | 
					  connection.enqueueSend(this._createSubscriptionPackage());
 | 
				
			||||||
@@ -76,9 +74,7 @@ SubscriptionOperation.prototype.inspectPackage = function(pkg) {
 | 
				
			|||||||
  try
 | 
					  try
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    var result = this._inspectPackage(pkg);
 | 
					    var result = this._inspectPackage(pkg);
 | 
				
			||||||
    if (result !== null) {
 | 
					    if (result !== null) return result;
 | 
				
			||||||
      return result;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (pkg.command)
 | 
					    switch (pkg.command)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -128,8 +124,9 @@ SubscriptionOperation.prototype.inspectPackage = function(pkg) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      case TcpCommand.NotHandled:
 | 
					      case TcpCommand.NotHandled:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        if (this._subscription !== null)
 | 
					        if (this._subscription !== null) {
 | 
				
			||||||
          throw new Error("NotHandled command appeared while we already subscribed.");
 | 
					          throw new Error("NotHandled command appeared while we already subscribed.");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var message = ClientMessage.NotHandled.decode(pkg.data.toBuffer());
 | 
					        var message = ClientMessage.NotHandled.decode(pkg.data.toBuffer());
 | 
				
			||||||
        switch (message.reason)
 | 
					        switch (message.reason)
 | 
				
			||||||
@@ -172,8 +169,7 @@ SubscriptionOperation.prototype.connectionClosed = function() {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SubscriptionOperation.prototype.timeOutSubscription = function() {
 | 
					SubscriptionOperation.prototype.timeOutSubscription = function() {
 | 
				
			||||||
  if (this._subscription !== null)
 | 
					  if (this._subscription !== null) return false;
 | 
				
			||||||
    return false;
 | 
					 | 
				
			||||||
  this.dropSubscription(SubscriptionDropReason.SubscribingError, null);
 | 
					  this.dropSubscription(SubscriptionDropReason.SubscribingError, null);
 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -182,9 +178,10 @@ SubscriptionOperation.prototype.dropSubscription = function(reason, err, connect
 | 
				
			|||||||
  if (!this._unsubscribed)
 | 
					  if (!this._unsubscribed)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    this._unsubscribed = true;
 | 
					    this._unsubscribed = true;
 | 
				
			||||||
    if (this._verboseLogging)
 | 
					    if (this._verboseLogging) {
 | 
				
			||||||
      this._log.debug("Subscription %s to %s: closing subscription, reason: %s, exception: %s...",
 | 
					      this._log.debug("Subscription %s to %s: closing subscription, reason: %s, exception: %s...",
 | 
				
			||||||
        this._correlationId, this._streamId || "<all>", reason, err);
 | 
					        this._correlationId, this._streamId || "<all>", reason, err);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (reason !== SubscriptionDropReason.UserInitiated && this._subscription === null)
 | 
					    if (reason !== SubscriptionDropReason.UserInitiated && this._subscription === null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -193,24 +190,31 @@ SubscriptionOperation.prototype.dropSubscription = function(reason, err, connect
 | 
				
			|||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (reason === SubscriptionDropReason.UserInitiated && this._subscription !== null && connection !== null)
 | 
					    if (reason === SubscriptionDropReason.UserInitiated && this._subscription !== null && connection !== null) {
 | 
				
			||||||
      connection.enqueueSend(this._createUnsubscriptionPackage());
 | 
					      connection.enqueueSend(this._createUnsubscriptionPackage());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var self = this;
 | 
					    var self = this;
 | 
				
			||||||
    if (this._subscription !== null)
 | 
					    if (this._subscription !== null) {
 | 
				
			||||||
      this._executeAction(function() { self._subscriptionDropped(self._subscription, reason, err); });
 | 
					      this._executeAction(function () {
 | 
				
			||||||
 | 
					        self._subscriptionDropped(self._subscription, reason, err);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SubscriptionOperation.prototype._confirmSubscription = function(lastCommitPosition, lastEventNumber) {
 | 
					SubscriptionOperation.prototype._confirmSubscription = function(lastCommitPosition, lastEventNumber) {
 | 
				
			||||||
  if (lastCommitPosition < -1)
 | 
					  if (lastCommitPosition < -1) {
 | 
				
			||||||
    throw new Error(util.format("Invalid lastCommitPosition %s on subscription confirmation.", lastCommitPosition));
 | 
					    throw new Error(util.format("Invalid lastCommitPosition %s on subscription confirmation.", lastCommitPosition));
 | 
				
			||||||
  if (this._subscription !== null)
 | 
					  }
 | 
				
			||||||
 | 
					  if (this._subscription !== null) {
 | 
				
			||||||
    throw new Error("Double confirmation of subscription.");
 | 
					    throw new Error("Double confirmation of subscription.");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._verboseLogging)
 | 
					  if (this._verboseLogging) {
 | 
				
			||||||
    this._log.debug("Subscription %s to %s: subscribed at CommitPosition: %d, EventNumber: %d.",
 | 
					    this._log.debug("Subscription %s to %s: subscribed at CommitPosition: %d, EventNumber: %d.",
 | 
				
			||||||
      this._correlationId, this._streamId || "<all>", lastCommitPosition, lastEventNumber);
 | 
					      this._correlationId, this._streamId || "<all>", lastCommitPosition, lastEventNumber);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this._subscription = this._createSubscriptionObject(lastCommitPosition, lastEventNumber);
 | 
					  this._subscription = this._createSubscriptionObject(lastCommitPosition, lastEventNumber);
 | 
				
			||||||
  this._cb(null, this._subscription);
 | 
					  this._cb(null, this._subscription);
 | 
				
			||||||
@@ -221,15 +225,15 @@ SubscriptionOperation.prototype._createSubscriptionObject = function(lastCommitP
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SubscriptionOperation.prototype._onEventAppeared = function(e) {
 | 
					SubscriptionOperation.prototype._onEventAppeared = function(e) {
 | 
				
			||||||
  if (this._unsubscribed)
 | 
					  if (this._unsubscribed) return;
 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._subscription === null) throw new Error("Subscription not confirmed, but event appeared!");
 | 
					  if (this._subscription === null) throw new Error("Subscription not confirmed, but event appeared!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._verboseLogging)
 | 
					  if (this._verboseLogging) {
 | 
				
			||||||
    this._log.debug("Subscription %s to %s: event appeared (%s, %d, %s @ %s).",
 | 
					    this._log.debug("Subscription %s to %s: event appeared (%s, %d, %s @ %s).",
 | 
				
			||||||
      this._correlationId, this._streamId || "<all>",
 | 
					      this._correlationId, this._streamId || "<all>",
 | 
				
			||||||
      e.originalStreamId, e.originalEventNumber, e.originalEvent.eventType, e.originalPosition);
 | 
					      e.originalStreamId, e.originalEventNumber, e.originalEvent.eventType, e.originalPosition);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var self = this;
 | 
					  var self = this;
 | 
				
			||||||
  this._executeAction(function() { return self._eventAppeared(self._subscription, e); });
 | 
					  this._executeAction(function() { return self._eventAppeared(self._subscription, e); });
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,4 +65,3 @@ TransactionalWriteOperation.prototype.toString = function() {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = TransactionalWriteOperation;
 | 
					module.exports = TransactionalWriteOperation;
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var ensure = require('../common/utils/ensure');
 | 
					var ensure = require('../common/utils/ensure');
 | 
				
			||||||
var OperationBase = require('../clientOperations/operationBase');
 | 
					var OperationBase = require('../clientOperations/operationBase');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,8 +19,7 @@ BufferSegment.prototype.toString = function() {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BufferSegment.prototype.toBuffer = function() {
 | 
					BufferSegment.prototype.toBuffer = function() {
 | 
				
			||||||
  if (this.offset === 0 && this.count === this.buffer.length)
 | 
					  if (this.offset === 0 && this.count === this.buffer.length) return this.buffer;
 | 
				
			||||||
      return this.buffer;
 | 
					 | 
				
			||||||
  return this.buffer.slice(this.offset, this.offset + this.count);
 | 
					  return this.buffer.slice(this.offset, this.offset + this.count);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
const SystemEventTypes = {
 | 
					const SystemEventTypes = Object.freeze({
 | 
				
			||||||
  StreamMetadata: '$metadata'
 | 
					  StreamMetadata: '$metadata'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = SystemEventTypes;
 | 
					module.exports = SystemEventTypes;
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
const SystemMetadata = {
 | 
					const SystemMetadata = Object.freeze({
 | 
				
			||||||
  maxAge: '$maxAge',
 | 
					  maxAge: '$maxAge',
 | 
				
			||||||
  maxCount: '$maxCount',
 | 
					  maxCount: '$maxCount',
 | 
				
			||||||
  truncateBefore: '$tb',
 | 
					  truncateBefore: '$tb',
 | 
				
			||||||
@@ -11,7 +11,6 @@ const SystemMetadata = {
 | 
				
			|||||||
  aclMetaWrite: '$mw',
 | 
					  aclMetaWrite: '$mw',
 | 
				
			||||||
  userStreamAcl: '$userStreamAcl',
 | 
					  userStreamAcl: '$userStreamAcl',
 | 
				
			||||||
  systemStreamAcl: '$systemStreamAcl'
 | 
					  systemStreamAcl: '$systemStreamAcl'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
Object.freeze(SystemMetadata);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = SystemMetadata;
 | 
					module.exports = SystemMetadata;
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
module.exports.metastreamOf = function(stream) {
 | 
					exports.metastreamOf = function(stream) {
 | 
				
			||||||
  return '$$' + stream;
 | 
					  return '$$' + stream;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
module.exports.isMetastream = function(stream) {
 | 
					exports.isMetastream = function(stream) {
 | 
				
			||||||
  return stream.indexOf('$$') === 0;
 | 
					  return stream.indexOf('$$') === 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -1,20 +1,16 @@
 | 
				
			|||||||
var Long = require('long');
 | 
					var Long = require('long');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports.notNullOrEmpty = function(value, name) {
 | 
					module.exports.notNullOrEmpty = function(value, name) {
 | 
				
			||||||
  if (value === null)
 | 
					  if (value === null) throw new TypeError(name + " should not be null.");
 | 
				
			||||||
    throw new TypeError(name + " should not be null.");
 | 
					  if (value === '') throw new Error(name + " should not be empty.");
 | 
				
			||||||
  if (value === '')
 | 
					 | 
				
			||||||
    throw new Error(name + " should not be empty.");
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports.notNull = function(value, name) {
 | 
					module.exports.notNull = function(value, name) {
 | 
				
			||||||
  if (value === null)
 | 
					  if (value === null) throw new TypeError(name + " should not be null.");
 | 
				
			||||||
    throw new TypeError(name + " should not be null.");
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function isInteger(value, name) {
 | 
					function isInteger(value, name) {
 | 
				
			||||||
  if (typeof value !== 'number' || value % 1 !== 0)
 | 
					  if (typeof value !== 'number' || value % 1 !== 0) throw new TypeError(name + " should be an integer.");
 | 
				
			||||||
    throw new TypeError(name + " should be an integer.");
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
module.exports.isInteger = isInteger;
 | 
					module.exports.isInteger = isInteger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,24 +23,23 @@ module.exports.isLongOrInteger = function(value, name) {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports.isArrayOf = function(expectedType, value, name) {
 | 
					module.exports.isArrayOf = function(expectedType, value, name) {
 | 
				
			||||||
  if (!Array.isArray(value))
 | 
					  if (!Array.isArray(value)) throw new TypeError(name + " should be an array.");
 | 
				
			||||||
    throw new TypeError(name + " should be an array.");
 | 
					  if (!value.every(function(x) { return x instanceof expectedType; })) {
 | 
				
			||||||
  if (!value.every(function(x) { return x instanceof expectedType; }))
 | 
					 | 
				
			||||||
    throw new TypeError([name, " should be an array of ", expectedType.name, "."].join(""));
 | 
					    throw new TypeError([name, " should be an array of ", expectedType.name, "."].join(""));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports.isTypeOf = function(expectedType, value, name, nullAllowed) {
 | 
					module.exports.isTypeOf = function(expectedType, value, name, nullAllowed) {
 | 
				
			||||||
  if (nullAllowed && value === null) return;
 | 
					  if (nullAllowed && value === null) return;
 | 
				
			||||||
  if (!(value instanceof expectedType))
 | 
					  if (!(value instanceof expectedType)) {
 | 
				
			||||||
    throw new TypeError([name, " should be of type '", expectedType.name, "'", nullAllowed ? " or null": "", "."].join(""));
 | 
					    throw new TypeError([name, " should be of type '", expectedType.name, "'", nullAllowed ? " or null" : "", "."].join(""));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports.positive = function(value, name) {
 | 
					module.exports.positive = function(value, name) {
 | 
				
			||||||
  if (value <= 0)
 | 
					  if (value <= 0) throw new Error(name + " should be positive.");
 | 
				
			||||||
    throw new Error(name + " should be positive.");
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports.nonNegative = function(value, name) {
 | 
					module.exports.nonNegative = function(value, name) {
 | 
				
			||||||
  if (value < 0)
 | 
					  if (value < 0) throw new Error(name + " should be non-negative.");
 | 
				
			||||||
    throw new Error(name + " should be non-negative.");
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -34,18 +34,19 @@ ClusterDnsEndPointDiscoverer.prototype.discover = function(failedTcpEndPoint) {
 | 
				
			|||||||
  function discover(resolve, reject) {
 | 
					  function discover(resolve, reject) {
 | 
				
			||||||
    self._discoverEndPoint(failedTcpEndPoint)
 | 
					    self._discoverEndPoint(failedTcpEndPoint)
 | 
				
			||||||
      .then(function (endPoints) {
 | 
					      .then(function (endPoints) {
 | 
				
			||||||
        if (!endPoints)
 | 
					        if (!endPoints) {
 | 
				
			||||||
          self._log.info(util.format("Discovering attempt %d/%d failed: no candidate found.", attempt, self._maxDiscoverAttempts));
 | 
					          self._log.info(util.format("Discovering attempt %d/%d failed: no candidate found.", attempt, self._maxDiscoverAttempts));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return endPoints;
 | 
					        return endPoints;
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      .catch(function (exc) {
 | 
					      .catch(function (exc) {
 | 
				
			||||||
        self._log.info(util.format("Discovering attempt %d/%d failed with error: %s.\n%s", attempt, self._maxDiscoverAttempts, exc, exc.stack));
 | 
					        self._log.info(util.format("Discovering attempt %d/%d failed with error: %s.\n%s", attempt, self._maxDiscoverAttempts, exc, exc.stack));
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      .then(function (endPoints) {
 | 
					      .then(function (endPoints) {
 | 
				
			||||||
        if (endPoints)
 | 
					        if (endPoints) return resolve(endPoints);
 | 
				
			||||||
          return resolve(endPoints);
 | 
					        if (attempt++ === self._maxDiscoverAttempts) {
 | 
				
			||||||
        if (attempt++ === self._maxDiscoverAttempts)
 | 
					 | 
				
			||||||
          return reject(new Error('Failed to discover candidate in ' + self._maxDiscoverAttempts + ' attempts.'));
 | 
					          return reject(new Error('Failed to discover candidate in ' + self._maxDiscoverAttempts + ' attempts.'));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        setTimeout(discover, 500, resolve, reject);
 | 
					        setTimeout(discover, 500, resolve, reject);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -74,8 +75,7 @@ ClusterDnsEndPointDiscoverer.prototype._discoverEndPoint = function (failedTcpEn
 | 
				
			|||||||
          if (endPoints) return endPoints;
 | 
					          if (endPoints) return endPoints;
 | 
				
			||||||
          return self._tryGetGossipFrom(gossipCandidates[j++])
 | 
					          return self._tryGetGossipFrom(gossipCandidates[j++])
 | 
				
			||||||
            .then(function (gossip) {
 | 
					            .then(function (gossip) {
 | 
				
			||||||
              if (!gossip || !gossip.members || gossip.members.length === 0)
 | 
					              if (!gossip || !gossip.members || gossip.members.length === 0) return;
 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
              var bestNode = self._tryDetermineBestNode(gossip.members);
 | 
					              var bestNode = self._tryDetermineBestNode(gossip.members);
 | 
				
			||||||
              if (bestNode) {
 | 
					              if (bestNode) {
 | 
				
			||||||
                self._oldGossip = gossip.members;
 | 
					                self._oldGossip = gossip.members;
 | 
				
			||||||
@@ -105,11 +105,12 @@ ClusterDnsEndPointDiscoverer.prototype._arrangeGossipCandidates = function (memb
 | 
				
			|||||||
  var j = members.length;
 | 
					  var j = members.length;
 | 
				
			||||||
  for (var k = 0; k < members.length; ++k)
 | 
					  for (var k = 0; k < members.length; ++k)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    if (members[k].state === 'Manager')
 | 
					    if (members[k].state === 'Manager') {
 | 
				
			||||||
      result[--j] = new GossipSeed({host: members[k].externalHttpIp, port: members[k].externalHttpPort});
 | 
					      result[--j] = new GossipSeed({host: members[k].externalHttpIp, port: members[k].externalHttpPort});
 | 
				
			||||||
    else
 | 
					    } else {
 | 
				
			||||||
      result[++i] = new GossipSeed({host: members[k].externalHttpIp, port: members[k].externalHttpPort});
 | 
					      result[++i] = new GossipSeed({host: members[k].externalHttpIp, port: members[k].externalHttpPort});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  this._randomShuffle(result, 0, i); // shuffle nodes
 | 
					  this._randomShuffle(result, 0, i); // shuffle nodes
 | 
				
			||||||
  this._randomShuffle(result, j, members.length - 1); // shuffle managers
 | 
					  this._randomShuffle(result, j, members.length - 1); // shuffle managers
 | 
				
			||||||
  return result;
 | 
					  return result;
 | 
				
			||||||
@@ -122,8 +123,7 @@ ClusterDnsEndPointDiscoverer.prototype._getGossipCandidatesFromDns = function ()
 | 
				
			|||||||
      var endpoints = self._gossipSeeds;
 | 
					      var endpoints = self._gossipSeeds;
 | 
				
			||||||
      self._randomShuffle(endpoints, 0, endpoints.length - 1);
 | 
					      self._randomShuffle(endpoints, 0, endpoints.length - 1);
 | 
				
			||||||
      resolve(endpoints);
 | 
					      resolve(endpoints);
 | 
				
			||||||
    }
 | 
					    } else {
 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
      const dnsOptions = {
 | 
					      const dnsOptions = {
 | 
				
			||||||
        family: 4,
 | 
					        family: 4,
 | 
				
			||||||
        hints: dns.ADDRCONFIG | dns.V4MAPPED,
 | 
					        hints: dns.ADDRCONFIG | dns.V4MAPPED,
 | 
				
			||||||
@@ -192,7 +192,7 @@ ClusterDnsEndPointDiscoverer.prototype._tryGetGossipFrom = function (endPoint) {
 | 
				
			|||||||
  });
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const VNodeStates = {
 | 
					const VNodeStates = Object.freeze({
 | 
				
			||||||
  'Initializing': 0,
 | 
					  'Initializing': 0,
 | 
				
			||||||
  'Unknown': 1,
 | 
					  'Unknown': 1,
 | 
				
			||||||
  'PreReplica': 2,
 | 
					  'PreReplica': 2,
 | 
				
			||||||
@@ -204,7 +204,7 @@ const VNodeStates = {
 | 
				
			|||||||
  'Manager': 8,
 | 
					  'Manager': 8,
 | 
				
			||||||
  'ShuttingDown': 9,
 | 
					  'ShuttingDown': 9,
 | 
				
			||||||
  'Shutdown': 10
 | 
					  'Shutdown': 10
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ClusterDnsEndPointDiscoverer.prototype._tryDetermineBestNode = function (members) {
 | 
					ClusterDnsEndPointDiscoverer.prototype._tryDetermineBestNode = function (members) {
 | 
				
			||||||
  var notAllowedStates = [
 | 
					  var notAllowedStates = [
 | 
				
			||||||
@@ -240,8 +240,7 @@ function rndNext(min, max) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ClusterDnsEndPointDiscoverer.prototype._randomShuffle = function (arr, i, j) {
 | 
					ClusterDnsEndPointDiscoverer.prototype._randomShuffle = function (arr, i, j) {
 | 
				
			||||||
  if (i >= j)
 | 
					  if (i >= j) return;
 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
  for (var k = i; k <= j; ++k)
 | 
					  for (var k = i; k <= j; ++k)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    var index = rndNext(k, j + 1);
 | 
					    var index = rndNext(k, j + 1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,14 +17,14 @@ var TcpCommand = require('../systemData/tcpCommand');
 | 
				
			|||||||
var TcpFlags = require('../systemData/tcpFlags');
 | 
					var TcpFlags = require('../systemData/tcpFlags');
 | 
				
			||||||
var InspectionDecision = require('../systemData/inspectionDecision');
 | 
					var InspectionDecision = require('../systemData/inspectionDecision');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ConnectionState = {
 | 
					const ConnectionState = Object.freeze({
 | 
				
			||||||
  Init: 'init',
 | 
					  Init: 'init',
 | 
				
			||||||
  Connecting: 'connecting',
 | 
					  Connecting: 'connecting',
 | 
				
			||||||
  Connected: 'connected',
 | 
					  Connected: 'connected',
 | 
				
			||||||
  Closed: 'closed'
 | 
					  Closed: 'closed'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ConnectingPhase = {
 | 
					const ConnectingPhase = Object.freeze({
 | 
				
			||||||
  Invalid: 'invalid',
 | 
					  Invalid: 'invalid',
 | 
				
			||||||
  Reconnecting: 'reconnecting',
 | 
					  Reconnecting: 'reconnecting',
 | 
				
			||||||
  EndPointDiscovery: 'endpointDiscovery',
 | 
					  EndPointDiscovery: 'endpointDiscovery',
 | 
				
			||||||
@@ -32,7 +32,7 @@ const ConnectingPhase = {
 | 
				
			|||||||
  Authentication: 'authentication',
 | 
					  Authentication: 'authentication',
 | 
				
			||||||
  Identification: 'identification',
 | 
					  Identification: 'identification',
 | 
				
			||||||
  Connected: 'connected'
 | 
					  Connected: 'connected'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TimerPeriod = 200;
 | 
					const TimerPeriod = 200;
 | 
				
			||||||
const TimerTickMessage = new messages.TimerTickMessage();
 | 
					const TimerTickMessage = new messages.TimerTickMessage();
 | 
				
			||||||
@@ -187,8 +187,7 @@ EventStoreConnectionLogicHandler.prototype._closeConnection = function(reason, e
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  this._logInfo("Closed. Reason: %s", reason);
 | 
					  this._logInfo("Closed. Reason: %s", reason);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (error)
 | 
					  if (error) this.emit('error', error);
 | 
				
			||||||
      this.emit('error', error);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this.emit('closed', reason);
 | 
					  this.emit('closed', reason);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -205,7 +204,7 @@ EventStoreConnectionLogicHandler.prototype._closeTcpConnection = function(reason
 | 
				
			|||||||
  this._connection = null;
 | 
					  this._connection = null;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _nextSeqNo = -1;
 | 
					var _nextSeqNo = 0;
 | 
				
			||||||
function createOperationItem(operation, maxRetries, timeout) {
 | 
					function createOperationItem(operation, maxRetries, timeout) {
 | 
				
			||||||
  var operationItem = {
 | 
					  var operationItem = {
 | 
				
			||||||
    seqNo: _nextSeqNo++,
 | 
					    seqNo: _nextSeqNo++,
 | 
				
			||||||
@@ -283,10 +282,11 @@ EventStoreConnectionLogicHandler.prototype._startSubscription = function(msg) {
 | 
				
			|||||||
          this._state === ConnectionState.Connected ? "fire" : "enqueue",
 | 
					          this._state === ConnectionState.Connected ? "fire" : "enqueue",
 | 
				
			||||||
          operation.constructor.name, operation, msg.maxRetries, msg.timeout);
 | 
					          operation.constructor.name, operation, msg.maxRetries, msg.timeout);
 | 
				
			||||||
      var subscription = createSubscriptionItem(operation, msg.maxRetries, msg.timeout);
 | 
					      var subscription = createSubscriptionItem(operation, msg.maxRetries, msg.timeout);
 | 
				
			||||||
      if (this._state === ConnectionState.Connecting)
 | 
					      if (this._state === ConnectionState.Connecting) {
 | 
				
			||||||
        this._subscriptions.enqueueSubscription(subscription);
 | 
					        this._subscriptions.enqueueSubscription(subscription);
 | 
				
			||||||
      else
 | 
					      } else {
 | 
				
			||||||
        this._subscriptions.startSubscription(subscription, this._connection);
 | 
					        this._subscriptions.startSubscription(subscription, this._connection);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    case ConnectionState.Closed:
 | 
					    case ConnectionState.Closed:
 | 
				
			||||||
      msg.cb(new Error("Connection closed. Connection: " + this._esConnection.connectionName));
 | 
					      msg.cb(new Error("Connection closed. Connection: " + this._esConnection.connectionName));
 | 
				
			||||||
@@ -312,10 +312,11 @@ EventStoreConnectionLogicHandler.prototype._startPersistentSubscription = functi
 | 
				
			|||||||
          this._state === ConnectionState.Connected ? "fire" : "enqueue",
 | 
					          this._state === ConnectionState.Connected ? "fire" : "enqueue",
 | 
				
			||||||
          operation.constructor.name, operation, msg.maxRetries, msg.timeout);
 | 
					          operation.constructor.name, operation, msg.maxRetries, msg.timeout);
 | 
				
			||||||
      var subscription = createSubscriptionItem(operation, msg.maxRetries, msg.timeout);
 | 
					      var subscription = createSubscriptionItem(operation, msg.maxRetries, msg.timeout);
 | 
				
			||||||
      if (this._state === ConnectionState.Connecting)
 | 
					      if (this._state === ConnectionState.Connecting) {
 | 
				
			||||||
        this._subscriptions.enqueueSubscription(subscription);
 | 
					        this._subscriptions.enqueueSubscription(subscription);
 | 
				
			||||||
      else
 | 
					      } else {
 | 
				
			||||||
        this._subscriptions.startSubscription(subscription, this._connection);
 | 
					        this._subscriptions.startSubscription(subscription, this._connection);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    case ConnectionState.Closed:
 | 
					    case ConnectionState.Closed:
 | 
				
			||||||
      msg.cb(new Error("Connection closed. " + this._esConnection.connectionName));
 | 
					      msg.cb(new Error("Connection closed. " + this._esConnection.connectionName));
 | 
				
			||||||
@@ -561,8 +562,9 @@ EventStoreConnectionLogicHandler.prototype._handleTcpPackage = function(connecti
 | 
				
			|||||||
      default:
 | 
					      default:
 | 
				
			||||||
        throw new Error("Unknown InspectionDecision: " + result.decision);
 | 
					        throw new Error("Unknown InspectionDecision: " + result.decision);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (this._state === ConnectionState.Connected)
 | 
					    if (this._state === ConnectionState.Connected) {
 | 
				
			||||||
      this._operations.scheduleWaitingOperations(connection);
 | 
					      this._operations.scheduleWaitingOperations(connection);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -609,8 +611,7 @@ EventStoreConnectionLogicHandler.prototype._reconnectTo = function(endPoints) {
 | 
				
			|||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._state !== ConnectionState.Connected || this._connection.remoteEndPoint === endPoint)
 | 
					  if (this._state !== ConnectionState.Connected || this._connection.remoteEndPoint === endPoint) return;
 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var msg = util.format("EventStoreConnection '%s': going to reconnect to [%j]. Current endpoint: [%j, L%j].",
 | 
					  var msg = util.format("EventStoreConnection '%s': going to reconnect to [%j]. Current endpoint: [%j, L%j].",
 | 
				
			||||||
      this._esConnection.connectionName, endPoint, this._connection.remoteEndPoint, this._connection.localEndPoint);
 | 
					      this._esConnection.connectionName, endPoint, this._connection.remoteEndPoint, this._connection.localEndPoint);
 | 
				
			||||||
@@ -627,30 +628,26 @@ EventStoreConnectionLogicHandler.prototype._timerTick = function() {
 | 
				
			|||||||
  {
 | 
					  {
 | 
				
			||||||
    case ConnectionState.Init: break;
 | 
					    case ConnectionState.Init: break;
 | 
				
			||||||
    case ConnectionState.Connecting:
 | 
					    case ConnectionState.Connecting:
 | 
				
			||||||
      if (this._connectingPhase === ConnectingPhase.Reconnecting && (Date.now() - this._reconnInfo.timeStamp) >= this._settings.reconnectionDelay)
 | 
					      if (this._connectingPhase === ConnectingPhase.Reconnecting && (Date.now() - this._reconnInfo.timeStamp) >= this._settings.reconnectionDelay) {
 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        this._logDebug("TimerTick checking reconnection...");
 | 
					        this._logDebug("TimerTick checking reconnection...");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this._reconnInfo = {reconnectionAttempt: this._reconnInfo.reconnectionAttempt + 1, timeStamp: Date.now()};
 | 
					        this._reconnInfo = {reconnectionAttempt: this._reconnInfo.reconnectionAttempt + 1, timeStamp: Date.now()};
 | 
				
			||||||
        if (this._settings.maxReconnections >= 0 && this._reconnInfo.reconnectionAttempt > this._settings.maxReconnections)
 | 
					        if (this._settings.maxReconnections >= 0 && this._reconnInfo.reconnectionAttempt > this._settings.maxReconnections) {
 | 
				
			||||||
          this._closeConnection("Reconnection limit reached.");
 | 
					          this._closeConnection("Reconnection limit reached.");
 | 
				
			||||||
        else
 | 
					        } else {
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          this.emit('reconnecting', {});
 | 
					          this.emit('reconnecting', {});
 | 
				
			||||||
          this._discoverEndpoint(null);
 | 
					          this._discoverEndpoint(null);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      } else if (this._connectingPhase === ConnectingPhase.Authentication && (Date.now() - this._authInfo.timeStamp) >= this._settings.operationTimeout) {
 | 
				
			||||||
      else if (this._connectingPhase === ConnectingPhase.Authentication && (Date.now() - this._authInfo.timeStamp) >= this._settings.operationTimeout)
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        this.emit('authenticationFailed', "Authentication timed out.");
 | 
					        this.emit('authenticationFailed', "Authentication timed out.");
 | 
				
			||||||
        if (this._clientVersion === 1) {
 | 
					        if (this._clientVersion === 1) {
 | 
				
			||||||
          this._goToIdentifiedState();
 | 
					          this._goToIdentifiedState();
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
          this._goToConnectedState();
 | 
					          this._goToConnectedState();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      } else if (this._connectingPhase === ConnectingPhase.Authentication || this._connectingPhase === ConnectingPhase.Connected) {
 | 
				
			||||||
      else if (this._connectingPhase === ConnectingPhase.Authentication || this._connectingPhase === ConnectingPhase.Connected)
 | 
					 | 
				
			||||||
        this._manageHeartbeats();
 | 
					        this._manageHeartbeats();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    case ConnectionState.Connected:
 | 
					    case ConnectionState.Connected:
 | 
				
			||||||
      // operations timeouts are checked only if connection is established and check period time passed
 | 
					      // operations timeouts are checked only if connection is established and check period time passed
 | 
				
			||||||
@@ -677,8 +674,7 @@ EventStoreConnectionLogicHandler.prototype._manageHeartbeats = function() {
 | 
				
			|||||||
  if (this._connection === null) return;
 | 
					  if (this._connection === null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var timeout = this._heartbeatInfo.isIntervalStage ? this._settings.heartbeatInterval : this._settings.heartbeatTimeout;
 | 
					  var timeout = this._heartbeatInfo.isIntervalStage ? this._settings.heartbeatInterval : this._settings.heartbeatTimeout;
 | 
				
			||||||
  if ((Date.now() - this._heartbeatInfo.timeStamp) < timeout)
 | 
					  if ((Date.now() - this._heartbeatInfo.timeStamp) < timeout) return;
 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var packageNumber = this._packageNumber;
 | 
					  var packageNumber = this._packageNumber;
 | 
				
			||||||
  if (this._heartbeatInfo.lastPackageNumber !== packageNumber)
 | 
					  if (this._heartbeatInfo.lastPackageNumber !== packageNumber)
 | 
				
			||||||
@@ -711,15 +707,17 @@ EventStoreConnectionLogicHandler.prototype._manageHeartbeats = function() {
 | 
				
			|||||||
EventStoreConnectionLogicHandler.prototype._logDebug = function(message) {
 | 
					EventStoreConnectionLogicHandler.prototype._logDebug = function(message) {
 | 
				
			||||||
  if (!this._settings.verboseLogging) return;
 | 
					  if (!this._settings.verboseLogging) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (arguments.length > 1)
 | 
					  if (arguments.length > 1) {
 | 
				
			||||||
    message = util.format.apply(util, Array.prototype.slice.call(arguments));
 | 
					    message = util.format.apply(util, Array.prototype.slice.call(arguments));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this._settings.log.debug("EventStoreConnection '%s': %s", this._esConnection.connectionName, message);
 | 
					  this._settings.log.debug("EventStoreConnection '%s': %s", this._esConnection.connectionName, message);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EventStoreConnectionLogicHandler.prototype._logInfo = function(message){
 | 
					EventStoreConnectionLogicHandler.prototype._logInfo = function(message){
 | 
				
			||||||
  if (arguments.length > 1)
 | 
					  if (arguments.length > 1) {
 | 
				
			||||||
    message = util.format.apply(util, Array.prototype.slice.call(arguments));
 | 
					    message = util.format.apply(util, Array.prototype.slice.call(arguments));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this._settings.log.info("EventStoreConnection '%s': %s", this._esConnection.connectionName, message);
 | 
					  this._settings.log.info("EventStoreConnection '%s': %s", this._esConnection.connectionName, message);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var ensure = require('../common/utils/ensure');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
function Message() {
 | 
					function Message() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -110,8 +110,7 @@ OperationsManager.prototype.checkTimeoutsAndRetry = function(connection) {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OperationsManager.prototype.scheduleOperationRetry = function(operation) {
 | 
					OperationsManager.prototype.scheduleOperationRetry = function(operation) {
 | 
				
			||||||
  if (!this.removeOperation(operation))
 | 
					  if (!this.removeOperation(operation)) return;
 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this._logDebug("ScheduleOperationRetry for %s.", operation);
 | 
					  this._logDebug("ScheduleOperationRetry for %s.", operation);
 | 
				
			||||||
  if (operation.maxRetries >= 0 && operation.retryCount >= operation.maxRetries)
 | 
					  if (operation.maxRetries >= 0 && operation.retryCount >= operation.maxRetries)
 | 
				
			||||||
@@ -166,8 +165,9 @@ OperationsManager.prototype.scheduleOperation = function(operation, connection)
 | 
				
			|||||||
OperationsManager.prototype._logDebug = function(message) {
 | 
					OperationsManager.prototype._logDebug = function(message) {
 | 
				
			||||||
  if (!this._settings.verboseLogging) return;
 | 
					  if (!this._settings.verboseLogging) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (arguments.length > 1)
 | 
					  if (arguments.length > 1) {
 | 
				
			||||||
    message = util.format.apply(util, Array.prototype.slice.call(arguments));
 | 
					    message = util.format.apply(util, Array.prototype.slice.call(arguments));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this._settings.log.debug("EventStoreConnection '%s': %s.", this._connectionName, message);
 | 
					  this._settings.log.debug("EventStoreConnection '%s': %s.", this._connectionName, message);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,6 @@
 | 
				
			|||||||
function typeName(t) {
 | 
					function typeName(t) {
 | 
				
			||||||
  if (typeof t === 'function')
 | 
					  if (typeof t === 'function') return t.name;
 | 
				
			||||||
    return t.name;
 | 
					  if (typeof t === 'object') return t.constructor.name;
 | 
				
			||||||
  if (typeof t === 'object')
 | 
					 | 
				
			||||||
    return t.constructor.name;
 | 
					 | 
				
			||||||
  throw new TypeError('type must be a function or object, not ' + typeof t);
 | 
					  throw new TypeError('type must be a function or object, not ' + typeof t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -36,8 +34,7 @@ SimpleQueuedHandler.prototype._processQueue = function() {
 | 
				
			|||||||
  while(message) {
 | 
					  while(message) {
 | 
				
			||||||
    var typeId = typeName(message);
 | 
					    var typeId = typeName(message);
 | 
				
			||||||
    var handler = this._handlers[typeId];
 | 
					    var handler = this._handlers[typeId];
 | 
				
			||||||
    if (!handler)
 | 
					    if (!handler) throw new Error("No handler registered for message " + typeId);
 | 
				
			||||||
        throw new Error("No handler registered for message " + typeId);
 | 
					 | 
				
			||||||
    setImmediate(handler, message);
 | 
					    setImmediate(handler, message);
 | 
				
			||||||
    message = this._messages.shift();
 | 
					    message = this._messages.shift();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,3 @@
 | 
				
			|||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
 | 
					const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
 | 
				
			||||||
function isValidId(id) {
 | 
					function isValidId(id) {
 | 
				
			||||||
  if (typeof id !== 'string') return false;
 | 
					  if (typeof id !== 'string') return false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,8 +45,7 @@ EventStoreAllCatchUpSubscription.prototype._readEventsTill = function(
 | 
				
			|||||||
              });
 | 
					              });
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        .then(function(done) {
 | 
					        .then(function(done) {
 | 
				
			||||||
          if (done || self._shouldStop)
 | 
					          if (done || self._shouldStop) return;
 | 
				
			||||||
              return;
 | 
					 | 
				
			||||||
          return readNext();
 | 
					          return readNext();
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -69,10 +68,11 @@ EventStoreAllCatchUpSubscription.prototype._tryProcess = function(e) {
 | 
				
			|||||||
    this._lastProcessedPosition = e.originalPosition;
 | 
					    this._lastProcessedPosition = e.originalPosition;
 | 
				
			||||||
    processed = true;
 | 
					    processed = true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (this._verbose)
 | 
					  if (this._verbose) {
 | 
				
			||||||
    this._log.debug("Catch-up Subscription to %s: %s event (%s, %d, %s @ %s).",
 | 
					    this._log.debug("Catch-up Subscription to %s: %s event (%s, %d, %s @ %s).",
 | 
				
			||||||
      this.streamId || '<all>', processed ? "processed" : "skipping",
 | 
					      this.streamId || '<all>', processed ? "processed" : "skipping",
 | 
				
			||||||
      e.originalEvent.eventStreamId, e.originalEvent.eventNumber, e.originalEvent.eventType, e.originalPosition);
 | 
					      e.originalEvent.eventStreamId, e.originalEvent.eventNumber, e.originalEvent.eventType, e.originalPosition);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return (promise && promise.then) ? promise : Promise.resolve();
 | 
					  return (promise && promise.then) ? promise : Promise.resolve();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var SubscriptionDropReason = require('./subscriptionDropReason');
 | 
					var SubscriptionDropReason = require('./subscriptionDropReason');
 | 
				
			||||||
var results = require('./results');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const DefaultReadBatchSize = 500;
 | 
					const DefaultReadBatchSize = 500;
 | 
				
			||||||
const DefaultMaxPushQueueSize = 10000;
 | 
					const DefaultMaxPushQueueSize = 10000;
 | 
				
			||||||
@@ -68,9 +67,9 @@ function EventStoreCatchUpSubscription(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  var self = this;
 | 
					  var self = this;
 | 
				
			||||||
  this._onReconnect = function() {
 | 
					  this._onReconnect = function() {
 | 
				
			||||||
    if (self._verbose) self._log.debug("Catch-up Subscription to %s: recovering after reconnection.", self._streamId || '<all>');
 | 
					 | 
				
			||||||
    if (self._verbose) self._log.debug("Catch-up Subscription to %s: unhooking from connection.Connected.", self._streamId || '<all>');
 | 
					    if (self._verbose) self._log.debug("Catch-up Subscription to %s: unhooking from connection.Connected.", self._streamId || '<all>');
 | 
				
			||||||
    self._connection.removeListener('connected', self._onReconnect);
 | 
					    self._connection.removeListener('connected', self._onReconnect);
 | 
				
			||||||
 | 
					    if (self._verbose) self._log.debug("Catch-up Subscription to %s: recovering after reconnection.", self._streamId || '<all>');
 | 
				
			||||||
    self._runSubscription();
 | 
					    self._runSubscription();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -133,10 +132,11 @@ EventStoreCatchUpSubscription.prototype._runSubscription = function() {
 | 
				
			|||||||
      .then(function() {
 | 
					      .then(function() {
 | 
				
			||||||
        if (self._shouldStop) return;
 | 
					        if (self._shouldStop) return;
 | 
				
			||||||
        if (self._verbose) self._log.debug("Catch-up Subscription to %s: subscribing...", logStreamName);
 | 
					        if (self._verbose) self._log.debug("Catch-up Subscription to %s: subscribing...", logStreamName);
 | 
				
			||||||
        if (self._streamId === '')
 | 
					        if (self._streamId === '') {
 | 
				
			||||||
          return self._connection.subscribeToAll(self._resolveLinkTos, self._enqueuePushedEvent.bind(self), self._serverSubscriptionDropped.bind(self), self._userCredentials);
 | 
					          return self._connection.subscribeToAll(self._resolveLinkTos, self._enqueuePushedEvent.bind(self), self._serverSubscriptionDropped.bind(self), self._userCredentials);
 | 
				
			||||||
        else
 | 
					        } else {
 | 
				
			||||||
          return self._connection.subscribeToStream(self._streamId, self._resolveLinkTos, self._enqueuePushedEvent.bind(self), self._serverSubscriptionDropped.bind(self), self._userCredentials);
 | 
					          return self._connection.subscribeToStream(self._streamId, self._resolveLinkTos, self._enqueuePushedEvent.bind(self), self._serverSubscriptionDropped.bind(self), self._userCredentials);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      .then(function(subscription) {
 | 
					      .then(function(subscription) {
 | 
				
			||||||
        if (subscription === undefined) return;
 | 
					        if (subscription === undefined) return;
 | 
				
			||||||
@@ -155,12 +155,13 @@ EventStoreCatchUpSubscription.prototype._runSubscription = function() {
 | 
				
			|||||||
          return;
 | 
					          return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (self._verbose) self._log.debug("Catch-up Subscription to %s: processing live events...", logStreamName);
 | 
					        if (self._verbose) self._log.debug("Catch-up Subscription to %s: processing live events...", logStreamName);
 | 
				
			||||||
        if (self._liveProcessingStarted)
 | 
					        if (self._liveProcessingStarted) {
 | 
				
			||||||
          try {
 | 
					          try {
 | 
				
			||||||
            self._liveProcessingStarted(self);
 | 
					            self._liveProcessingStarted(self);
 | 
				
			||||||
          } catch(e) {
 | 
					          } catch (e) {
 | 
				
			||||||
            self._log.error(e, "Catch-up Subscription to %s: liveProcessingStarted callback failed.", logStreamName);
 | 
					            self._log.error(e, "Catch-up Subscription to %s: liveProcessingStarted callback failed.", logStreamName);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        if (self._verbose) self._log.debug("Catch-up Subscription to %s: hooking to connection.Connected", logStreamName);
 | 
					        if (self._verbose) self._log.debug("Catch-up Subscription to %s: hooking to connection.Connected", logStreamName);
 | 
				
			||||||
        self._connection.on('connected', self._onReconnect);
 | 
					        self._connection.on('connected', self._onReconnect);
 | 
				
			||||||
        self._allowProcessing = true;
 | 
					        self._allowProcessing = true;
 | 
				
			||||||
@@ -169,10 +170,11 @@ EventStoreCatchUpSubscription.prototype._runSubscription = function() {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EventStoreCatchUpSubscription.prototype._enqueuePushedEvent = function(subscription, e) {
 | 
					EventStoreCatchUpSubscription.prototype._enqueuePushedEvent = function(subscription, e) {
 | 
				
			||||||
  if (this._verbose)
 | 
					  if (this._verbose) {
 | 
				
			||||||
    this._log.debug("Catch-up Subscription to %s: event appeared (%s, %d, %s @ %s).",
 | 
					    this._log.debug("Catch-up Subscription to %s: event appeared (%s, %d, %s @ %s).",
 | 
				
			||||||
      this._streamId || '<all>',
 | 
					      this._streamId || '<all>',
 | 
				
			||||||
      e.originalStreamId, e.originalEventNumber, e.originalEvent.eventType, e.originalPosition);
 | 
					      e.originalStreamId, e.originalEventNumber, e.originalEvent.eventType, e.originalPosition);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._liveQueue.length >= this.maxPushQueueSize)
 | 
					  if (this._liveQueue.length >= this.maxPushQueueSize)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
@@ -183,8 +185,7 @@ EventStoreCatchUpSubscription.prototype._enqueuePushedEvent = function(subscript
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  this._liveQueue.push(e);
 | 
					  this._liveQueue.push(e);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._allowProcessing)
 | 
					  if (this._allowProcessing) this._ensureProcessingPushQueue();
 | 
				
			||||||
    this._ensureProcessingPushQueue();
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EventStoreCatchUpSubscription.prototype._serverSubscriptionDropped = function(subscription, reason, err) {
 | 
					EventStoreCatchUpSubscription.prototype._serverSubscriptionDropped = function(subscription, reason, err) {
 | 
				
			||||||
@@ -196,8 +197,7 @@ EventStoreCatchUpSubscription.prototype._enqueueSubscriptionDropNotification = f
 | 
				
			|||||||
  if (this._dropData) return;
 | 
					  if (this._dropData) return;
 | 
				
			||||||
  this._dropData = {reason: reason, error: error};
 | 
					  this._dropData = {reason: reason, error: error};
 | 
				
			||||||
  this._liveQueue.push(new DropSubscriptionEvent());
 | 
					  this._liveQueue.push(new DropSubscriptionEvent());
 | 
				
			||||||
  if (this._allowProcessing)
 | 
					  if (this._allowProcessing) this._ensureProcessingPushQueue();
 | 
				
			||||||
    this._ensureProcessingPushQueue();
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EventStoreCatchUpSubscription.prototype._ensureProcessingPushQueue = function() {
 | 
					EventStoreCatchUpSubscription.prototype._ensureProcessingPushQueue = function() {
 | 
				
			||||||
@@ -244,18 +244,19 @@ EventStoreCatchUpSubscription.prototype._dropSubscription = function(reason, err
 | 
				
			|||||||
  if (this._isDropped) return;
 | 
					  if (this._isDropped) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  this._isDropped = true;
 | 
					  this._isDropped = true;
 | 
				
			||||||
  if (this._verbose)
 | 
					  if (this._verbose) {
 | 
				
			||||||
    this._log.debug("Catch-up Subscription to %s: dropping subscription, reason: %s %s.",
 | 
					    this._log.debug("Catch-up Subscription to %s: dropping subscription, reason: %s %s.",
 | 
				
			||||||
      this._streamId || '<all>', reason, error);
 | 
					      this._streamId || '<all>', reason, error);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._subscription)
 | 
					  if (this._subscription) this._subscription.unsubscribe();
 | 
				
			||||||
    this._subscription.unsubscribe();
 | 
					  if (this._subscriptionDropped) {
 | 
				
			||||||
  if (this._subscriptionDropped)
 | 
					 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      this._subscriptionDropped(this, reason, error);
 | 
					      this._subscriptionDropped(this, reason, error);
 | 
				
			||||||
    } catch(e) {
 | 
					    } catch (e) {
 | 
				
			||||||
      this._log.error(e, "Catch-up Subscription to %s: subscriptionDropped callback failed.", this._streamId || '<all>');
 | 
					      this._log.error(e, "Catch-up Subscription to %s: subscriptionDropped callback failed.", this._streamId || '<all>');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  this._stopped = true;
 | 
					  this._stopped = true;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ var ClusterDnsEndPointDiscoverer = require('./core/clusterDnsEndPointDiscoverer'
 | 
				
			|||||||
var NoopLogger = require('./common/log/noopLogger');
 | 
					var NoopLogger = require('./common/log/noopLogger');
 | 
				
			||||||
var ensure = require('./common/utils/ensure');
 | 
					var ensure = require('./common/utils/ensure');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var defaultConnectionSettings = {
 | 
					var defaultConnectionSettings = Object.freeze({
 | 
				
			||||||
  log: new NoopLogger(),
 | 
					  log: new NoopLogger(),
 | 
				
			||||||
  verboseLogging: false,
 | 
					  verboseLogging: false,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,7 +34,7 @@ var defaultConnectionSettings = {
 | 
				
			|||||||
  maxDiscoverAttempts: 10,
 | 
					  maxDiscoverAttempts: 10,
 | 
				
			||||||
  externalGossipPort: 0,
 | 
					  externalGossipPort: 0,
 | 
				
			||||||
  gossipTimeout: 1000
 | 
					  gossipTimeout: 1000
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function merge(a,b) {
 | 
					function merge(a,b) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -140,8 +140,7 @@ EventStoreNodeConnection.prototype.appendToStream = function(stream, expectedVer
 | 
				
			|||||||
  ensure.notNullOrEmpty(stream, "stream");
 | 
					  ensure.notNullOrEmpty(stream, "stream");
 | 
				
			||||||
  ensure.isLongOrInteger(expectedVersion, "expectedVersion");
 | 
					  ensure.isLongOrInteger(expectedVersion, "expectedVersion");
 | 
				
			||||||
  expectedVersion = Long.fromValue(expectedVersion);
 | 
					  expectedVersion = Long.fromValue(expectedVersion);
 | 
				
			||||||
  if (!Array.isArray(events))
 | 
					  if (!Array.isArray(events)) events = [events];
 | 
				
			||||||
    events = [events];
 | 
					 | 
				
			||||||
  ensure.isArrayOf(EventData, events, "events");
 | 
					  ensure.isArrayOf(EventData, events, "events");
 | 
				
			||||||
  userCredentials = userCredentials || null;
 | 
					  userCredentials = userCredentials || null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -413,8 +412,7 @@ EventStoreNodeConnection.prototype.subscribeToStream = function(
 | 
				
			|||||||
) {
 | 
					) {
 | 
				
			||||||
  ensure.notNullOrEmpty(stream, "stream");
 | 
					  ensure.notNullOrEmpty(stream, "stream");
 | 
				
			||||||
  ensure.isTypeOf(Function, eventAppeared, "eventAppeared");
 | 
					  ensure.isTypeOf(Function, eventAppeared, "eventAppeared");
 | 
				
			||||||
  if (subscriptionDropped)
 | 
					  if (subscriptionDropped) ensure.isTypeOf(Function, subscriptionDropped, "subscriptionDropped");
 | 
				
			||||||
    ensure.isTypeOf(Function, subscriptionDropped, "subscriptionDropped");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var self = this;
 | 
					  var self = this;
 | 
				
			||||||
  return new Promise(function(resolve,reject) {
 | 
					  return new Promise(function(resolve,reject) {
 | 
				
			||||||
@@ -641,8 +639,9 @@ EventStoreNodeConnection.prototype.setStreamMetadataRaw = function(
 | 
				
			|||||||
    stream, expectedMetastreamVersion, metadata, userCredentials
 | 
					    stream, expectedMetastreamVersion, metadata, userCredentials
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
  ensure.notNullOrEmpty(stream, "stream");
 | 
					  ensure.notNullOrEmpty(stream, "stream");
 | 
				
			||||||
  if (systemStreams.isMetastream(stream))
 | 
					  if (systemStreams.isMetastream(stream)) {
 | 
				
			||||||
    throw new Error(util.format("Setting metadata for metastream '%s' is not supported.", stream));
 | 
					    throw new Error(util.format("Setting metadata for metastream '%s' is not supported.", stream));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  ensure.isLongOrInteger(expectedMetastreamVersion, "expectedMetastreamVersion");
 | 
					  ensure.isLongOrInteger(expectedMetastreamVersion, "expectedMetastreamVersion");
 | 
				
			||||||
  expectedMetastreamVersion = Long.fromValue(expectedMetastreamVersion);
 | 
					  expectedMetastreamVersion = Long.fromValue(expectedMetastreamVersion);
 | 
				
			||||||
  var self = this;
 | 
					  var self = this;
 | 
				
			||||||
@@ -713,7 +712,7 @@ EventStoreNodeConnection.prototype._enqueueOperation = function(operation) {
 | 
				
			|||||||
  var message = new messages.StartOperationMessage(operation, self._settings.maxRetries, self._settings.operationTimeout);
 | 
					  var message = new messages.StartOperationMessage(operation, self._settings.maxRetries, self._settings.operationTimeout);
 | 
				
			||||||
  function tryEnqueue() {
 | 
					  function tryEnqueue() {
 | 
				
			||||||
    if (self._handler.totalOperationCount >= self._settings.maxQueueSize) {
 | 
					    if (self._handler.totalOperationCount >= self._settings.maxQueueSize) {
 | 
				
			||||||
      setImmediate(tryEnqueue);
 | 
					      setTimeout(tryEnqueue, 0);
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    self._handler.enqueueMessage(message);
 | 
					    self._handler.enqueueMessage(message);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,8 +56,7 @@ EventStorePersistentSubscriptionBase.prototype.acknowledge = function(events) {
 | 
				
			|||||||
  ensure.notNull(events, "events");
 | 
					  ensure.notNull(events, "events");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._subscription === null) throw new Error("Invalid operation. Subscription is not active yet.");
 | 
					  if (this._subscription === null) throw new Error("Invalid operation. Subscription is not active yet.");
 | 
				
			||||||
  if (!Array.isArray(events))
 | 
					  if (!Array.isArray(events)) events = [events];
 | 
				
			||||||
    events = [events];
 | 
					 | 
				
			||||||
  var ids = events.map(function(x) { return x.originalEvent.eventId; });
 | 
					  var ids = events.map(function(x) { return x.originalEvent.eventId; });
 | 
				
			||||||
  this._subscription.notifyEventsProcessed(ids);
 | 
					  this._subscription.notifyEventsProcessed(ids);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -73,8 +72,7 @@ EventStorePersistentSubscriptionBase.prototype.fail = function(events, action, r
 | 
				
			|||||||
  ensure.notNull(reason, "reason");
 | 
					  ensure.notNull(reason, "reason");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._subscription === null) throw new Error("Invalid operation. Subscription is not active yet.");
 | 
					  if (this._subscription === null) throw new Error("Invalid operation. Subscription is not active yet.");
 | 
				
			||||||
  if (!Array.isArray(events))
 | 
					  if (!Array.isArray(events)) events = [events];
 | 
				
			||||||
    events = [events];
 | 
					 | 
				
			||||||
  var ids = events.map(function(x) { return x.originalEvent.eventId; });
 | 
					  var ids = events.map(function(x) { return x.originalEvent.eventId; });
 | 
				
			||||||
  this._subscription.notifyEventsFailed(ids, action, reason);
 | 
					  this._subscription.notifyEventsFailed(ids, action, reason);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -145,12 +143,12 @@ EventStorePersistentSubscriptionBase.prototype._processQueue = function() {
 | 
				
			|||||||
    return self._eventAppeared(self, ev);
 | 
					    return self._eventAppeared(self, ev);
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
    .then(function() {
 | 
					    .then(function() {
 | 
				
			||||||
      if(self._autoAck)
 | 
					      if(self._autoAck) self._subscription.notifyEventsProcessed([ev.originalEvent.eventId]);
 | 
				
			||||||
        self._subscription.notifyEventsProcessed([ev.originalEvent.eventId]);
 | 
					      if (self._verbose) {
 | 
				
			||||||
      if (self._verbose)
 | 
					 | 
				
			||||||
        self._log.debug("Persistent Subscription to %s: processed event (%s, %d, %s @ %d).",
 | 
					        self._log.debug("Persistent Subscription to %s: processed event (%s, %d, %s @ %d).",
 | 
				
			||||||
          self._streamId, ev.originalEvent.eventStreamId, ev.originalEvent.eventNumber, ev.originalEvent.eventType,
 | 
					          self._streamId, ev.originalEvent.eventStreamId, ev.originalEvent.eventNumber, ev.originalEvent.eventType,
 | 
				
			||||||
          ev.originalEventNumber);
 | 
					          ev.originalEventNumber);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      return false;
 | 
					      return false;
 | 
				
			||||||
    }, function(err) {
 | 
					    }, function(err) {
 | 
				
			||||||
      //TODO GFY should we autonak here?
 | 
					      //TODO GFY should we autonak here?
 | 
				
			||||||
@@ -168,12 +166,12 @@ EventStorePersistentSubscriptionBase.prototype._dropSubscription = function(reas
 | 
				
			|||||||
  if (!this._isDropped)
 | 
					  if (!this._isDropped)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    this._isDropped = true;
 | 
					    this._isDropped = true;
 | 
				
			||||||
    if (this._verbose)
 | 
					    if (this._verbose) {
 | 
				
			||||||
      this._log.debug("Persistent Subscription to %s: dropping subscription, reason: %s %s.",
 | 
					      this._log.debug("Persistent Subscription to %s: dropping subscription, reason: %s %s.",
 | 
				
			||||||
        this._streamId, reason, error);
 | 
					        this._streamId, reason, error);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (this._subscription !== null)
 | 
					    if (this._subscription !== null) this._subscription.unsubscribe();
 | 
				
			||||||
      this._subscription.unsubscribe();
 | 
					 | 
				
			||||||
    if (this._subscriptionDropped !== null) {
 | 
					    if (this._subscriptionDropped !== null) {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        this._subscriptionDropped(this, reason, error);
 | 
					        this._subscriptionDropped(this, reason, error);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,19 +49,18 @@ EventStoreStreamCatchUpSubscription.prototype._readEventsTill = function(
 | 
				
			|||||||
                  .then(function() {
 | 
					                  .then(function() {
 | 
				
			||||||
                    self._nextReadEventNumber = slice.nextEventNumber;
 | 
					                    self._nextReadEventNumber = slice.nextEventNumber;
 | 
				
			||||||
                    var done = Promise.resolve(lastEventNumber === null ? slice.isEndOfStream : slice.nextEventNumber.compare(lastEventNumber) > 0);
 | 
					                    var done = Promise.resolve(lastEventNumber === null ? slice.isEndOfStream : slice.nextEventNumber.compare(lastEventNumber) > 0);
 | 
				
			||||||
                    if (!done && slice.isEndOfStream)
 | 
					                    if (!done && slice.isEndOfStream) return delay(100, false);
 | 
				
			||||||
                        return delay(100, false);
 | 
					 | 
				
			||||||
                    return done;
 | 
					                    return done;
 | 
				
			||||||
                  });
 | 
					                  });
 | 
				
			||||||
              break;
 | 
					 | 
				
			||||||
            case SliceReadStatus.StreamNotFound:
 | 
					            case SliceReadStatus.StreamNotFound:
 | 
				
			||||||
              if (lastEventNumber && lastEventNumber.compare(-1) !== 0)
 | 
					              if (lastEventNumber && lastEventNumber.compare(-1) !== 0) {
 | 
				
			||||||
                throw new Error(util.format("Impossible: stream %s disappeared in the middle of catching up subscription.", self.streamId));
 | 
					                throw new Error(util.format("Impossible: stream %s disappeared in the middle of catching up subscription.", self.streamId));
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
              return true;
 | 
					              return true;
 | 
				
			||||||
            case SliceReadStatus.StreamDeleted:
 | 
					            case SliceReadStatus.StreamDeleted:
 | 
				
			||||||
              throw new Error("Stream deleted: " + self.streamId);
 | 
					              throw new Error("Stream deleted: " + self.streamId);
 | 
				
			||||||
            default:
 | 
					            default:
 | 
				
			||||||
              throw new Error("Unexpected StreamEventsSlice.Status: %s.", slice.status);
 | 
					              throw new Error(util.format("Unexpected StreamEventsSlice.Status: %s.", slice.status));
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        .then(function(done) {
 | 
					        .then(function(done) {
 | 
				
			||||||
@@ -72,9 +71,10 @@ EventStoreStreamCatchUpSubscription.prototype._readEventsTill = function(
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  return readNext()
 | 
					  return readNext()
 | 
				
			||||||
      .then(function() {
 | 
					      .then(function() {
 | 
				
			||||||
        if (self._verbose)
 | 
					        if (self._verbose) {
 | 
				
			||||||
          self._log.debug("Catch-up Subscription to %s: finished reading events, nextReadEventNumber = %d.",
 | 
					          self._log.debug("Catch-up Subscription to %s: finished reading events, nextReadEventNumber = %d.",
 | 
				
			||||||
            self.isSubscribedToAll ? '<all>' : self.streamId, self._nextReadEventNumber);
 | 
					            self.isSubscribedToAll ? '<all>' : self.streamId, self._nextReadEventNumber);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -86,10 +86,11 @@ EventStoreStreamCatchUpSubscription.prototype._tryProcess = function(e) {
 | 
				
			|||||||
    this._lastProcessedEventNumber = e.originalEventNumber;
 | 
					    this._lastProcessedEventNumber = e.originalEventNumber;
 | 
				
			||||||
    processed = true;
 | 
					    processed = true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (this._verbose)
 | 
					  if (this._verbose) {
 | 
				
			||||||
    this._log.debug("Catch-up Subscription to %s: %s event (%s, %d, %s @ %d).",
 | 
					    this._log.debug("Catch-up Subscription to %s: %s event (%s, %d, %s @ %d).",
 | 
				
			||||||
      this.isSubscribedToAll ? '<all>' : this.streamId, processed ? "processed" : "skipping",
 | 
					      this.isSubscribedToAll ? '<all>' : this.streamId, processed ? "processed" : "skipping",
 | 
				
			||||||
      e.originalEvent.eventStreamId, e.originalEvent.eventNumber, e.originalEvent.eventType, e.originalEventNumber);
 | 
					      e.originalEvent.eventStreamId, e.originalEvent.eventNumber, e.originalEvent.eventType, e.originalEventNumber);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return (promise && promise.then) ? promise : Promise.resolve();
 | 
					  return (promise && promise.then) ? promise : Promise.resolve();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,8 @@
 | 
				
			|||||||
module.exports = function GossipSeed(endPoint, hostName) {
 | 
					function GossipSeed(endPoint, hostName) {
 | 
				
			||||||
  if (typeof endPoint !== 'object' || !endPoint.host || !endPoint.port) throw new TypeError('endPoint must be have host and port properties.');
 | 
					  if (typeof endPoint !== 'object' || !endPoint.host || !endPoint.port) throw new TypeError('endPoint must be have host and port properties.');
 | 
				
			||||||
  this.endPoint = endPoint;
 | 
					  this.endPoint = endPoint;
 | 
				
			||||||
  this.hostName = hostName;
 | 
					  this.hostName = hostName;
 | 
				
			||||||
  Object.freeze(this);
 | 
					  Object.freeze(this);
 | 
				
			||||||
};
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = GossipSeed;
 | 
				
			||||||
@@ -1,14 +1,15 @@
 | 
				
			|||||||
const PersistentSubscriptionNakEventAction = {
 | 
					const PersistentSubscriptionNakEventAction = Object.freeze({
 | 
				
			||||||
  Unknown: 0,
 | 
					  Unknown: 0,
 | 
				
			||||||
  Park: 1,
 | 
					  Park: 1,
 | 
				
			||||||
  Retry: 2,
 | 
					  Retry: 2,
 | 
				
			||||||
  Skip: 3,
 | 
					  Skip: 3,
 | 
				
			||||||
  Stop: 4
 | 
					  Stop: 4,
 | 
				
			||||||
};
 | 
					  isValid: function(value) {
 | 
				
			||||||
 | 
					    for(var k in PersistentSubscriptionNakEventAction) {
 | 
				
			||||||
 | 
					      if (PersistentSubscriptionNakEventAction[k] === value) return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = PersistentSubscriptionNakEventAction;
 | 
					module.exports = PersistentSubscriptionNakEventAction;
 | 
				
			||||||
module.exports.isValid = function(value) {
 | 
					 | 
				
			||||||
  for(var k in PersistentSubscriptionNakEventAction)
 | 
					 | 
				
			||||||
    if (PersistentSubscriptionNakEventAction[k] === value) return true;
 | 
					 | 
				
			||||||
  return false;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
const ReadDirection = {
 | 
					const ReadDirection = Object.freeze({
 | 
				
			||||||
  Forward: 'forward',
 | 
					  Forward: 'forward',
 | 
				
			||||||
  Backward: 'backward'
 | 
					  Backward: 'backward'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = ReadDirection;
 | 
					module.exports = ReadDirection;
 | 
				
			||||||
@@ -19,10 +19,12 @@ function Position(commitPosition, preparePosition) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Position.prototype.compareTo = function(other) {
 | 
					Position.prototype.compareTo = function(other) {
 | 
				
			||||||
  if (this.commitPosition.lt(other.commitPosition) || (this.commitPosition.eq(other.commitPosition)&& this.preparePosition.lt(other.preparePosition)))
 | 
					  if (this.commitPosition.lt(other.commitPosition) || (this.commitPosition.eq(other.commitPosition)&& this.preparePosition.lt(other.preparePosition))) {
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
  if (this.commitPosition.gt(other.commitPosition) || (this.commitPosition.eq(other.commitPosition) && this.preparePosition.gt(other.preparePosition)))
 | 
					  }
 | 
				
			||||||
 | 
					  if (this.commitPosition.gt(other.commitPosition) || (this.commitPosition.eq(other.commitPosition) && this.preparePosition.gt(other.preparePosition))) {
 | 
				
			||||||
    return 1;
 | 
					    return 1;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -33,13 +35,12 @@ Position.prototype.toString = function() {
 | 
				
			|||||||
Position.start = new Position(0,0);
 | 
					Position.start = new Position(0,0);
 | 
				
			||||||
Position.end = new Position(-1,-1);
 | 
					Position.end = new Position(-1,-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const EventReadStatus = {
 | 
					const EventReadStatus = Object.freeze({
 | 
				
			||||||
  Success: 'success',
 | 
					  Success: 'success',
 | 
				
			||||||
  NotFound: 'notFound',
 | 
					  NotFound: 'notFound',
 | 
				
			||||||
  NoStream: 'noStream',
 | 
					  NoStream: 'noStream',
 | 
				
			||||||
  StreamDeleted: 'streamDeleted'
 | 
					  StreamDeleted: 'streamDeleted'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
Object.freeze(EventReadStatus);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @param {object} ev
 | 
					 * @param {object} ev
 | 
				
			||||||
@@ -204,12 +205,11 @@ function RawStreamMetadataResult(stream, isStreamDeleted, metastreamVersion, str
 | 
				
			|||||||
  Object.freeze(this);
 | 
					  Object.freeze(this);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const PersistentSubscriptionCreateStatus = {
 | 
					const PersistentSubscriptionCreateStatus = Object.freeze({
 | 
				
			||||||
  Success: 'success',
 | 
					  Success: 'success',
 | 
				
			||||||
  NotFound: 'notFound',
 | 
					  NotFound: 'notFound',
 | 
				
			||||||
  Failure: 'failure'
 | 
					  Failure: 'failure'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
Object.freeze(PersistentSubscriptionCreateStatus);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @param {string} status
 | 
					 * @param {string} status
 | 
				
			||||||
@@ -221,13 +221,12 @@ function PersistentSubscriptionCreateResult(status) {
 | 
				
			|||||||
  Object.freeze(this);
 | 
					  Object.freeze(this);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const PersistentSubscriptionUpdateStatus = {
 | 
					const PersistentSubscriptionUpdateStatus = Object.freeze({
 | 
				
			||||||
  Success: 'success',
 | 
					  Success: 'success',
 | 
				
			||||||
  NotFound: 'notFound',
 | 
					  NotFound: 'notFound',
 | 
				
			||||||
  Failure: 'failure',
 | 
					  Failure: 'failure',
 | 
				
			||||||
  AccessDenied: 'accessDenied'
 | 
					  AccessDenied: 'accessDenied'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
Object.freeze(PersistentSubscriptionUpdateStatus);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @param {string} status
 | 
					 * @param {string} status
 | 
				
			||||||
@@ -239,11 +238,10 @@ function PersistentSubscriptionUpdateResult(status) {
 | 
				
			|||||||
  Object.freeze(this);
 | 
					  Object.freeze(this);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const PersistentSubscriptionDeleteStatus = {
 | 
					const PersistentSubscriptionDeleteStatus = Object.freeze({
 | 
				
			||||||
  Success: 'success',
 | 
					  Success: 'success',
 | 
				
			||||||
  Failure: 'failure'
 | 
					  Failure: 'failure'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
Object.freeze(PersistentSubscriptionDeleteStatus);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @param {string} status
 | 
					 * @param {string} status
 | 
				
			||||||
@@ -256,18 +254,18 @@ function PersistentSubscriptionDeleteResult(status) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Exports Constructors
 | 
					// Exports Constructors
 | 
				
			||||||
module.exports.Position = Position;
 | 
					exports.Position = Position;
 | 
				
			||||||
module.exports.ResolvedEvent = ResolvedEvent;
 | 
					exports.ResolvedEvent = ResolvedEvent;
 | 
				
			||||||
module.exports.EventReadStatus = EventReadStatus;
 | 
					exports.EventReadStatus = EventReadStatus;
 | 
				
			||||||
module.exports.EventReadResult = EventReadResult;
 | 
					exports.EventReadResult = EventReadResult;
 | 
				
			||||||
module.exports.WriteResult = WriteResult;
 | 
					exports.WriteResult = WriteResult;
 | 
				
			||||||
module.exports.StreamEventsSlice = StreamEventsSlice;
 | 
					exports.StreamEventsSlice = StreamEventsSlice;
 | 
				
			||||||
module.exports.AllEventsSlice = AllEventsSlice;
 | 
					exports.AllEventsSlice = AllEventsSlice;
 | 
				
			||||||
module.exports.DeleteResult = DeleteResult;
 | 
					exports.DeleteResult = DeleteResult;
 | 
				
			||||||
module.exports.RawStreamMetadataResult = RawStreamMetadataResult;
 | 
					exports.RawStreamMetadataResult = RawStreamMetadataResult;
 | 
				
			||||||
module.exports.PersistentSubscriptionCreateResult = PersistentSubscriptionCreateResult;
 | 
					exports.PersistentSubscriptionCreateResult = PersistentSubscriptionCreateResult;
 | 
				
			||||||
module.exports.PersistentSubscriptionCreateStatus = PersistentSubscriptionCreateStatus;
 | 
					exports.PersistentSubscriptionCreateStatus = PersistentSubscriptionCreateStatus;
 | 
				
			||||||
module.exports.PersistentSubscriptionUpdateResult = PersistentSubscriptionUpdateResult;
 | 
					exports.PersistentSubscriptionUpdateResult = PersistentSubscriptionUpdateResult;
 | 
				
			||||||
module.exports.PersistentSubscriptionUpdateStatus = PersistentSubscriptionUpdateStatus;
 | 
					exports.PersistentSubscriptionUpdateStatus = PersistentSubscriptionUpdateStatus;
 | 
				
			||||||
module.exports.PersistentSubscriptionDeleteResult = PersistentSubscriptionDeleteResult;
 | 
					exports.PersistentSubscriptionDeleteResult = PersistentSubscriptionDeleteResult;
 | 
				
			||||||
module.exports.PersistentSubscriptionDeleteStatus = PersistentSubscriptionDeleteStatus;
 | 
					exports.PersistentSubscriptionDeleteStatus = PersistentSubscriptionDeleteStatus;
 | 
				
			||||||
@@ -1,8 +1,7 @@
 | 
				
			|||||||
const SliceReadStatus = {
 | 
					const SliceReadStatus = Object.freeze({
 | 
				
			||||||
  Success: 'success',
 | 
					  Success: 'success',
 | 
				
			||||||
  StreamNotFound: 'streamNotFound',
 | 
					  StreamNotFound: 'streamNotFound',
 | 
				
			||||||
  StreamDeleted: 'streamDeleted'
 | 
					  StreamDeleted: 'streamDeleted'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
Object.freeze(SliceReadStatus);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = SliceReadStatus;
 | 
					module.exports = SliceReadStatus;
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
const SubscriptionDropReason = {
 | 
					const SubscriptionDropReason = Object.freeze({
 | 
				
			||||||
  AccessDenied: 'accessDenied',
 | 
					  AccessDenied: 'accessDenied',
 | 
				
			||||||
  CatchUpError: 'catchUpError',
 | 
					  CatchUpError: 'catchUpError',
 | 
				
			||||||
  ConnectionClosed: 'connectionClosed',
 | 
					  ConnectionClosed: 'connectionClosed',
 | 
				
			||||||
@@ -11,6 +11,6 @@ const SubscriptionDropReason = {
 | 
				
			|||||||
  SubscribingError: 'subscribingError',
 | 
					  SubscribingError: 'subscribingError',
 | 
				
			||||||
  UserInitiated: 'userInitiated',
 | 
					  UserInitiated: 'userInitiated',
 | 
				
			||||||
  Unknown: 'unknown'
 | 
					  Unknown: 'unknown'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = SubscriptionDropReason;
 | 
					module.exports = SubscriptionDropReason;
 | 
				
			||||||
@@ -1,8 +1,7 @@
 | 
				
			|||||||
const SystemConsumerStrategies = {
 | 
					const SystemConsumerStrategies = Object.freeze({
 | 
				
			||||||
  DispatchToSingle: 'DispatchToSingle',
 | 
					  DispatchToSingle: 'DispatchToSingle',
 | 
				
			||||||
  RoundRobin: 'RoundRobin',
 | 
					  RoundRobin: 'RoundRobin',
 | 
				
			||||||
  Pinned: 'Pinned'
 | 
					  Pinned: 'Pinned'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
Object.freeze(SystemConsumerStrategies);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = SystemConsumerStrategies;
 | 
					module.exports = SystemConsumerStrategies;
 | 
				
			||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
var InspectionDecision = {
 | 
					var InspectionDecision = Object.freeze({
 | 
				
			||||||
  DoNothing: 'doNothing',
 | 
					  DoNothing: 'doNothing',
 | 
				
			||||||
  EndOperation: 'endOperation',
 | 
					  EndOperation: 'endOperation',
 | 
				
			||||||
  Retry: 'retry',
 | 
					  Retry: 'retry',
 | 
				
			||||||
  Reconnect: 'reconnect',
 | 
					  Reconnect: 'reconnect',
 | 
				
			||||||
  Subscribed: 'subscribed'
 | 
					  Subscribed: 'subscribed'
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = InspectionDecision;
 | 
					module.exports = InspectionDecision;
 | 
				
			||||||
@@ -1,9 +1,7 @@
 | 
				
			|||||||
var ClientMessage = require('../messages/clientMessage');
 | 
					var ClientMessage = require('../messages/clientMessage');
 | 
				
			||||||
var SliceReadStatus = require('../sliceReadStatus');
 | 
					var SliceReadStatus = require('../sliceReadStatus');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {};
 | 
					exports.convert = function(code) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports.convert = function(code) {
 | 
					 | 
				
			||||||
  switch(code) {
 | 
					  switch(code) {
 | 
				
			||||||
    case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.Success:
 | 
					    case ClientMessage.ReadStreamEventsCompleted.ReadStreamResult.Success:
 | 
				
			||||||
      return SliceReadStatus.Success;
 | 
					      return SliceReadStatus.Success;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
const TcpCommand = {
 | 
					const TcpCommand = Object.freeze({
 | 
				
			||||||
  HeartbeatRequestCommand: 0x01,
 | 
					  HeartbeatRequestCommand: 0x01,
 | 
				
			||||||
  HeartbeatResponseCommand: 0x02,
 | 
					  HeartbeatResponseCommand: 0x02,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -73,16 +73,18 @@ const TcpCommand = {
 | 
				
			|||||||
  Authenticated: 0xF3,
 | 
					  Authenticated: 0xF3,
 | 
				
			||||||
  NotAuthenticated: 0xF4,
 | 
					  NotAuthenticated: 0xF4,
 | 
				
			||||||
  IdentifyClient: 0xF5,
 | 
					  IdentifyClient: 0xF5,
 | 
				
			||||||
  ClientIdentified: 0xF6
 | 
					  ClientIdentified: 0xF6,
 | 
				
			||||||
};
 | 
					
 | 
				
			||||||
 | 
					  getName: function(v) {
 | 
				
			||||||
 | 
					    return _reverseLookup[v];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _reverseLookup = {};
 | 
					var _reverseLookup = {};
 | 
				
			||||||
for(var n in TcpCommand) {
 | 
					for(var n in TcpCommand) {
 | 
				
			||||||
 | 
					  if (n === 'getName') continue;
 | 
				
			||||||
  var v = TcpCommand[n];
 | 
					  var v = TcpCommand[n];
 | 
				
			||||||
  _reverseLookup[v] = n;
 | 
					  _reverseLookup[v] = n;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = TcpCommand;
 | 
					module.exports = TcpCommand;
 | 
				
			||||||
module.exports.getName = function(v) {
 | 
					 | 
				
			||||||
  return _reverseLookup[v];
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
const TcpFlags = {
 | 
					const TcpFlags = Object.freeze({
 | 
				
			||||||
  None: 0x0,
 | 
					  None: 0x0,
 | 
				
			||||||
  Authenticated: 0x01
 | 
					  Authenticated: 0x01
 | 
				
			||||||
};
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = TcpFlags;
 | 
					module.exports = TcpFlags;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,8 +19,7 @@ function TcpPackage(command, flags, correlationId, login, password, data) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TcpPackage.fromBufferSegment = function(data) {
 | 
					TcpPackage.fromBufferSegment = function(data) {
 | 
				
			||||||
  if (data.length < MandatorySize)
 | 
					  if (data.length < MandatorySize) throw new Error("ArraySegment too short, length: " + data.length);
 | 
				
			||||||
    throw new Error("ArraySegment too short, length: " + data.length);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var command = data.buffer[data.offset + CommandOffset];
 | 
					  var command = data.buffer[data.offset + CommandOffset];
 | 
				
			||||||
  var flags = data.buffer[data.offset + FlagsOffset];
 | 
					  var flags = data.buffer[data.offset + FlagsOffset];
 | 
				
			||||||
@@ -32,13 +31,15 @@ TcpPackage.fromBufferSegment = function(data) {
 | 
				
			|||||||
  if ((flags & TcpFlags.Authenticated) !== 0)
 | 
					  if ((flags & TcpFlags.Authenticated) !== 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    var loginLen = data.buffer[data.offset + AuthOffset];
 | 
					    var loginLen = data.buffer[data.offset + AuthOffset];
 | 
				
			||||||
    if (AuthOffset + 1 + loginLen + 1 >= data.count)
 | 
					    if (AuthOffset + 1 + loginLen + 1 >= data.count) {
 | 
				
			||||||
      throw new Error("Login length is too big, it doesn't fit into TcpPackage.");
 | 
					      throw new Error("Login length is too big, it doesn't fit into TcpPackage.");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    login = data.buffer.toString('utf8', data.offset + AuthOffset + 1, data.offset + AuthOffset + 1 + loginLen);
 | 
					    login = data.buffer.toString('utf8', data.offset + AuthOffset + 1, data.offset + AuthOffset + 1 + loginLen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var passLen = data.buffer[data.offset + AuthOffset + 1 + loginLen];
 | 
					    var passLen = data.buffer[data.offset + AuthOffset + 1 + loginLen];
 | 
				
			||||||
    if (AuthOffset + 1 + loginLen + 1 + passLen > data.count)
 | 
					    if (AuthOffset + 1 + loginLen + 1 + passLen > data.count) {
 | 
				
			||||||
      throw new Error("Password length is too big, it doesn't fit into TcpPackage.");
 | 
					      throw new Error("Password length is too big, it doesn't fit into TcpPackage.");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    headerSize += 1 + loginLen + 1 + passLen;
 | 
					    headerSize += 1 + loginLen + 1 + passLen;
 | 
				
			||||||
    pass = data.buffer.toString('utf8', data.offset + AuthOffset + 1 + loginLen + 1, data.offset + headerSize);
 | 
					    pass = data.buffer.toString('utf8', data.offset + AuthOffset + 1 + loginLen + 1, data.offset + headerSize);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -64,8 +65,7 @@ TcpPackage.prototype.asBuffer = function() {
 | 
				
			|||||||
    res[AuthOffset + 1 + loginBytes.length] = passwordBytes.length;
 | 
					    res[AuthOffset + 1 + loginBytes.length] = passwordBytes.length;
 | 
				
			||||||
    passwordBytes.copy(res, AuthOffset + 2 + loginBytes.length);
 | 
					    passwordBytes.copy(res, AuthOffset + 2 + loginBytes.length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (this.data)
 | 
					    if (this.data) this.data.copyTo(res, res.length - this.data.count);
 | 
				
			||||||
      this.data.copyTo(res, res.length - this.data.count);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
@@ -73,8 +73,7 @@ TcpPackage.prototype.asBuffer = function() {
 | 
				
			|||||||
    res[CommandOffset] = this.command;
 | 
					    res[CommandOffset] = this.command;
 | 
				
			||||||
    res[FlagsOffset] = this.flags;
 | 
					    res[FlagsOffset] = this.flags;
 | 
				
			||||||
    guidParse.parse(this.correlationId, res, CorrelationOffset);
 | 
					    guidParse.parse(this.correlationId, res, CorrelationOffset);
 | 
				
			||||||
    if (this.data)
 | 
					    if (this.data) this.data.copyTo(res, AuthOffset);
 | 
				
			||||||
      this.data.copyTo(res, AuthOffset);
 | 
					 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,9 @@ LengthPrefixMessageFramer.prototype._parse = function(bytes) {
 | 
				
			|||||||
      ++this._headerBytes;
 | 
					      ++this._headerBytes;
 | 
				
			||||||
      if (this._headerBytes === HeaderLength)
 | 
					      if (this._headerBytes === HeaderLength)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        if (this._packageLength <= 0 || this._packageLength > this._maxPackageSize)
 | 
					        if (this._packageLength <= 0 || this._packageLength > this._maxPackageSize) {
 | 
				
			||||||
          throw new Error(["Package size is out of bounds: ", this._packageLength, "(max: ", this._maxPackageSize, "."].join(''));
 | 
					          throw new Error(["Package size is out of bounds: ", this._packageLength, "(max: ", this._maxPackageSize, "."].join(''));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this._messageBuffer = new Buffer(this._packageLength);
 | 
					        this._messageBuffer = new Buffer(this._packageLength);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@@ -46,8 +47,9 @@ LengthPrefixMessageFramer.prototype._parse = function(bytes) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      if (this._bufferIndex === this._packageLength)
 | 
					      if (this._bufferIndex === this._packageLength)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        if (this._receivedHandler !== null)
 | 
					        if (this._receivedHandler !== null) {
 | 
				
			||||||
          this._receivedHandler(createBufferSegment(this._messageBuffer, 0, this._bufferIndex));
 | 
					          this._receivedHandler(createBufferSegment(this._messageBuffer, 0, this._bufferIndex));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        this.reset();
 | 
					        this.reset();
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,14 +62,11 @@ TcpConnection.prototype._trySend = function() {
 | 
				
			|||||||
  while(sendPiece = this._sendQueue.shift()) {
 | 
					  while(sendPiece = this._sendQueue.shift()) {
 | 
				
			||||||
    buffers.push(sendPiece);
 | 
					    buffers.push(sendPiece);
 | 
				
			||||||
    bytes += sendPiece.length;
 | 
					    bytes += sendPiece.length;
 | 
				
			||||||
    if (bytes > MaxSendPacketSize)
 | 
					    if (bytes > MaxSendPacketSize) break;
 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var joinedBuffers = Buffer.concat(buffers, bytes);
 | 
					  var joinedBuffers = Buffer.concat(buffers, bytes);
 | 
				
			||||||
  if (!this._socket.write(joinedBuffers)) {
 | 
					  if (!this._socket.write(joinedBuffers)) return;
 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setImmediate(this._trySend.bind(this));
 | 
					  setImmediate(this._trySend.bind(this));
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -97,8 +94,7 @@ TcpConnection.prototype.receive = function(cb) {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TcpConnection.prototype._tryDequeueReceivedData = function() {
 | 
					TcpConnection.prototype._tryDequeueReceivedData = function() {
 | 
				
			||||||
  if (this._receiveCallback === null || this._receiveQueue.length === 0)
 | 
					  if (this._receiveCallback === null || this._receiveQueue.length === 0) return;
 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var res = [];
 | 
					  var res = [];
 | 
				
			||||||
  while(this._receiveQueue.length > 0) {
 | 
					  while(this._receiveQueue.length > 0) {
 | 
				
			||||||
@@ -112,8 +108,9 @@ TcpConnection.prototype._tryDequeueReceivedData = function() {
 | 
				
			|||||||
  callback(this, res);
 | 
					  callback(this, res);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var bytes = 0;
 | 
					  var bytes = 0;
 | 
				
			||||||
  for(var i=0;i<res.length;i++)
 | 
					  for(var i=0;i<res.length;i++) {
 | 
				
			||||||
    bytes += res[i].count;
 | 
					    bytes += res[i].count;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //this._pendingReceivedBytes -= bytes;
 | 
					  //this._pendingReceivedBytes -= bytes;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -132,8 +129,7 @@ TcpConnection.prototype._closeInternal = function(err, reason) {
 | 
				
			|||||||
    this._socket = null;
 | 
					    this._socket = null;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (this._onConnectionClosed !== null)
 | 
					  if (this._onConnectionClosed !== null) this._onConnectionClosed(this, err);
 | 
				
			||||||
      this._onConnectionClosed(this, err);
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TcpConnection.createConnectingConnection = function(
 | 
					TcpConnection.createConnectingConnection = function(
 | 
				
			||||||
@@ -155,8 +151,7 @@ TcpConnection.createConnectingConnection = function(
 | 
				
			|||||||
  socket.on('connect', function() {
 | 
					  socket.on('connect', function() {
 | 
				
			||||||
    socket.removeListener('error', onError);
 | 
					    socket.removeListener('error', onError);
 | 
				
			||||||
    connection._initSocket(socket);
 | 
					    connection._initSocket(socket);
 | 
				
			||||||
    if (onConnectionEstablished)
 | 
					    if (onConnectionEstablished) onConnectionEstablished(connection);
 | 
				
			||||||
      onConnectionEstablished(connection);
 | 
					 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  return connection;
 | 
					  return connection;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
var util = require('util');
 | 
					var util = require('util');
 | 
				
			||||||
var uuid = require('uuid');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var LengthPrefixMessageFramer = require('./lengthPrefixMessageFramer');
 | 
					var LengthPrefixMessageFramer = require('./lengthPrefixMessageFramer');
 | 
				
			||||||
var TcpConnection = require('./tcpConnection');
 | 
					var TcpConnection = require('./tcpConnection');
 | 
				
			||||||
@@ -57,8 +56,7 @@ function TcpPackageConnection(
 | 
				
			|||||||
      },
 | 
					      },
 | 
				
			||||||
      function (conn, had_error) {
 | 
					      function (conn, had_error) {
 | 
				
			||||||
        var error;
 | 
					        var error;
 | 
				
			||||||
        if (had_error)
 | 
					        if (had_error) error = new Error('transmission error.');
 | 
				
			||||||
            error = new Error('transmission error.');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        log.debug("TcpPackageConnection: connection [%j, L%j, %s] was closed %s", conn.remoteEndPoint, conn.localEndPoint,
 | 
					        log.debug("TcpPackageConnection: connection [%j, L%j, %s] was closed %s", conn.remoteEndPoint, conn.localEndPoint,
 | 
				
			||||||
            connectionId, had_error ? "with error: " + error + "." : "cleanly.");
 | 
					            connectionId, had_error ? "with error: " + error + "." : "cleanly.");
 | 
				
			||||||
@@ -120,27 +118,23 @@ TcpPackageConnection.prototype._incomingMessageArrived = function(data) {
 | 
				
			|||||||
    var message = util.format("TcpPackageConnection: [%j, L%j, %s] ERROR for %s. Connection will be closed.",
 | 
					    var message = util.format("TcpPackageConnection: [%j, L%j, %s] ERROR for %s. Connection will be closed.",
 | 
				
			||||||
        this.remoteEndPoint, this.localEndPoint, this._connectionId,
 | 
					        this.remoteEndPoint, this.localEndPoint, this._connectionId,
 | 
				
			||||||
        valid ? TcpCommand.getName(pkg.command) : "<invalid package>");
 | 
					        valid ? TcpCommand.getName(pkg.command) : "<invalid package>");
 | 
				
			||||||
    if (this._onError !== null)
 | 
					    if (this._onError !== null) this._onError(this, e);
 | 
				
			||||||
      this._onError(this, e);
 | 
					 | 
				
			||||||
    this._log.debug(e, message);
 | 
					    this._log.debug(e, message);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TcpPackageConnection.prototype.startReceiving = function() {
 | 
					TcpPackageConnection.prototype.startReceiving = function() {
 | 
				
			||||||
  if (this._connection === null)
 | 
					  if (this._connection === null) throw new Error("Failed connection.");
 | 
				
			||||||
    throw new Error("Failed connection.");
 | 
					 | 
				
			||||||
  this._connection.receive(this._onRawDataReceived.bind(this));
 | 
					  this._connection.receive(this._onRawDataReceived.bind(this));
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TcpPackageConnection.prototype.enqueueSend = function(pkg) {
 | 
					TcpPackageConnection.prototype.enqueueSend = function(pkg) {
 | 
				
			||||||
  if (this._connection === null)
 | 
					  if (this._connection === null) throw new Error("Failed connection.");
 | 
				
			||||||
    throw new Error("Failed connection.");
 | 
					 | 
				
			||||||
  this._connection.enqueueSend(this._framer.frameData(pkg.asBufferSegment()));
 | 
					  this._connection.enqueueSend(this._framer.frameData(pkg.asBufferSegment()));
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TcpPackageConnection.prototype.close = function(reason) {
 | 
					TcpPackageConnection.prototype.close = function(reason) {
 | 
				
			||||||
  if (this._connection === null)
 | 
					  if (this._connection === null) throw new Error("Failed connection.");
 | 
				
			||||||
    throw new Error("Failed connection.");
 | 
					 | 
				
			||||||
  this._connection.close(reason);
 | 
					  this._connection.close(reason);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user