UNPKG

diffusion

Version:

Diffusion JavaScript client

87 lines (68 loc) 2.85 kB
var _implements = require('util/interface')._implements; var api = require('../../topic-update/update-stream'); var TopicCreationResult = require('../../topic-update/topic-update').TopicCreationResult; var Emitter = require('events/emitter'); var Result = require('events/result'); var SetStream = require('topic-update/set-stream'); var InvalidSetStream = require('topic-update/invalid-set-stream'); var UpdateStreamRequest = require('services/topic-update/update-stream-request'); var PendingValidateAndSetStream = _implements( api.UpdateStream, function PendingValidateAndSetStream(streamServices, options, stream, pendingResult, deferredEmitter, value) { var nextValue = value; var deferredEmitters = [deferredEmitter]; this.set = function(value) { options.checkOperation(value); var emitter = new Emitter(); var result = new Result(emitter); deferredEmitters.push(emitter); nextValue = value; return result; }; this.get = function() { return nextValue; }; this.validate = function() { var emitter = new Emitter(); var result = new Result(emitter); pendingResult.then(function(r) { emitter.emit('complete', TopicCreationResult.EXISTS); return r; }, function(err) { emitter.error(err); }); 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(streamId) { stream.setDelegate(new SetStream(streamServices, options, stream, streamId, nextValue)); var buffer = options.dataType.from(nextValue).asBuffer(); streamServices.STREAM_SET_TOPIC_SERVICE.send( new UpdateStreamRequest(streamId, buffer), function(err) { if (err) { deferredEmitters.forEach(function(emitter) { emitter.error(err); }); } else { deferredEmitters.forEach(function(emitter) { emitter.emit('complete', TopicCreationResult.EXISTS); }); } } ); }; this.onValidateFailed = function(err) { stream.setDelegate(new InvalidSetStream(err, nextValue)); deferredEmitters.forEach(function(emitter) { emitter.error(err); }); }; } ); module.exports = PendingValidateAndSetStream;