UNPKG

diffusion

Version:

Diffusion JavaScript client

89 lines (72 loc) 3.31 kB
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;