diffusion
Version:
Diffusion JavaScript client
89 lines (72 loc) • 3.31 kB
JavaScript
var _implements = require('util/interface')._implements;
var api = require('../../topic-update/update-stream');
var Emitter = require('events/emitter');
var Result = require('events/result');
var logger = require('util/logger').create('diffusion.locks.TopicUpdate');
var PendingSetStream = require('topic-update/pending-set-stream');
var PendingValidateStream = require('topic-update/pending-validate-stream');
var UpdateStreamAddTopicRequest = require('services/topic-update/update-stream-add-topic-request');
var AddAndSetTopicRequest = require('services/topic-update/add-and-set-topic-request');
var NewAddTopicAndUpdateStream = _implements(
api.UpdateStream,
function NewUpdateStream(streamServices, options, stream, path, specification, constraint) {
this.set = function(value) {
options.checkOperation(value);
var emitter = new Emitter();
var result = new Result(emitter);
var buffer = options.dataType.from(value).asBuffer();
stream.setDelegate(new PendingSetStream(streamServices, options, stream, result, value));
streamServices.STREAM_ADD_AND_SET_TOPIC_SERVICE.send(
new AddAndSetTopicRequest(path, specification, buffer, constraint),
function(err, response) {
if (err) {
logger.debug('Stream add and set topic failed');
stream.onSetFailed(err);
emitter.error(err);
}
else {
stream.onSetComplete(response.streamId);
emitter.emit('complete', response.creationResult);
}
}
);
return result;
};
this.get = function() {
throw new Error("The set method has not been called");
};
this.validate = function() {
var emitter = new Emitter();
var result = new Result(emitter);
stream.setDelegate(new PendingValidateStream(streamServices, options, stream, result));
streamServices.STREAM_ADD_TOPIC_SERVICE.send(
new UpdateStreamAddTopicRequest(path, specification, constraint),
function(err, response) {
if (err) {
logger.debug('Stream add topic failed');
stream.onValidateFailed(err);
emitter.error(err);
}
else {
stream.onValidateComplete(response.streamId);
emitter.emit('complete', response.creationResult);
}
}
);
return result;
};
this.onSetComplete = function() {
throw new Error("No set request has been sent");
};
this.onSetFailed = function() {
throw new Error("No set request has been sent");
};
this.onValidateComplete = function() {
throw new Error("No validate request has been sent");
};
this.onValidateFailed = function() {
throw new Error("No validate request has been sent");
};
}
);
module.exports = NewAddTopicAndUpdateStream;