UNPKG

diffusion

Version:

Diffusion JavaScript client

85 lines (68 loc) 2.7 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 logger = require('util/logger').create('diffusion.locks.TopicUpdate'); var InvalidSetStream = require('topic-update/invalid-set-stream'); var UpdateStreamRequest = require('services/topic-update/update-stream-request'); var SetStream = _implements( api.UpdateStream, function SetStream(streamServices, options, stream, streamId, value) { var cache = value; this.set = function(value) { options.checkOperation(value); var emitter = new Emitter(); var result = new Result(emitter); var buffer = options.toBuffer(cache, value); cache = value; options.deltaService.send( new UpdateStreamRequest(streamId, buffer), function(err, streamId) { if (err) { logger.debug('Set update stream failed'); stream.onSetFailed(err); emitter.error(err); } else { stream.onSetComplete(streamId); emitter.emit('complete', TopicCreationResult.EXISTS); } } ); return result; }; this.get = function() { return cache; }; this.validate = function() { var emitter = new Emitter(); var result = new Result(emitter); streamServices.CHECK_UPDATE_STREAM.send(streamId, function(err, result) { if (err) { logger.debug('Validate update stream failed'); stream.onValidateFailed(err); emitter.error(err); } else { stream.onValidateComplete(result); emitter.emit('complete', TopicCreationResult.EXISTS); } } ); return result; }; this.onSetComplete = function() { }; this.onSetFailed = function(err) { stream.setDelegate(new InvalidSetStream(err, cache)); }; this.onValidateComplete = function() { }; this.onValidateFailed = function(err) { stream.setDelegate(new InvalidSetStream(err, cache)); }; } ); module.exports = SetStream;