blob: 40538195446dab628b3fad5d99f17bb6fa4e6e85 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
var $ = require('../util/jquery');
var defineClass = require('../util/define-class');
var uuid = require('uuid');
var marshalling = require('./marshalling');
var MessageSync = defineClass({
publics: {
message: function(messageContent) {
var id = uuid.v4();
var payload = $.extend({
timestamp: Date.now()
}, messageContent);
var value = marshalling.marshal(payload);
this.sbw.put(this.tripManager.getMessagesKey(id), value);
},
processMessages: function(messageData) {
var self = this;
if (messageData) {
/* Dispatch new messages in time order, though don't put them before
* local messages. */
var newMessages = [];
$.each(messageData, function(id, serializedMessage) {
if (!self.messages[id]) {
var message = marshalling.unmarshal(serializedMessage);
newMessages.push(message);
self.messages[id] = message;
}
});
newMessages.sort(function(a, b) {
return a.timestamp < b.timestamp? -1 :
a.timestamp > b.timestamp? 1 :
0;
});
this.onMessages(newMessages);
}
}
},
events: [ 'onMessages' ],
init: function(deferredSyncbaseWrapper, tripManager) {
this.sbw = deferredSyncbaseWrapper;
this.tripManager = tripManager;
this.messages = {};
}
});
module.exports = MessageSync;