diffusion
Version:
Diffusion JavaScript client
87 lines (68 loc) • 2.85 kB
JavaScript
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;