コード例 #1
0
var sendServerChanges = function(doc, clientDoc, socket, send){
  // create a diff from the current server version to the client's shadow
  // important: use deepcopied versions
  var diff = jsondiffpatch.diff(deepCopy(clientDoc.shadow.doc), deepCopy(doc.serverCopy));
  var basedOnServerVersion = clientDoc.shadow.serverVersion;

  // add the difference to the server's edit stack
  if(!_.isEmpty(diff)){
    clientDoc.edits.push({
      serverVersion: basedOnServerVersion,
      localVersion: clientDoc.shadow.localVersion,
      diff: diff
    });
    // update the server version
    clientDoc.shadow.serverVersion++;
  }

  // apply the patch to the server shadow
  jsondiffpatch.patch(clientDoc.shadow.doc, diff);

  send({
    localVersion: clientDoc.shadow.localVersion,
    serverVersion: basedOnServerVersion,
    edits: clientDoc.edits
  });
};
コード例 #2
0
ファイル: playerclient.js プロジェクト: halpin325/groovebasin
 self.socket.on('scanning', function(o) {
   if (o.reset) self.scanningFromServer = undefined;
   self.scanningFromServer = jsondiffpatch.patch(self.scanningFromServer, o.delta);
   deleteUndefineds(self.scanningFromServer);
   self.scanningFromServerVersion = o.version;
   self.emit('scanningUpdate');
 });
コード例 #3
0
ファイル: userDb.js プロジェクト: kenmick/JsonPatchBenchmark
exports.updateUser = function(req, res){
	var receiveTime = Date.now();
    
    var diffStartTime = req.body.diffStartTime;
    var diffEndTime = req.body.diffEndTime;
    var sendTime = req.body.sendTime;   
	var delta = req.body.delta;
  	var patchStartTime = 0;          
    var patchEndTime = 0;

    switch (algorithm) {
    	case "0":
    		break;
    	case "1":
	    	patchStartTime = Date.now();
	    	jsondiffpatch.patch(users[0], delta);
	    	patchEndTime = Date.now();
    		break;
    }


    var totalTime = (diffEndTime - diffStartTime) + (receiveTime - sendTime) + (patchEndTime - patchStartTime);

    var result = (diffEndTime - diffStartTime)+',' +(receiveTime - sendTime) +',' +(patchEndTime - patchStartTime)+ ','+totalTime+'\n';

    fs.writeFile('./result/'+size+'-P'+probability+'-L'+loopTimes+'-A'+algorithm+'.csv', result, {flag: 'a'}, function(err){
        if(err) throw err;
        console.log("success");
    });

    res.end();

}
コード例 #4
0
ファイル: beers.js プロジェクト: mmondora/webapp-beers
 .then(function (beer) {
     try {
         return jdp.patch(beer, delta);
     } catch (e) {
         throw new MW.Error(400, "Malformed delta");
     }
 })
コード例 #5
0
ファイル: playerclient.js プロジェクト: halpin325/groovebasin
 self.socket.on('playlists', function(o) {
   if (o.reset) self.playlistsFromServer = undefined;
   self.playlistsFromServer = jsondiffpatch.patch(self.playlistsFromServer, o.delta);
   deleteUndefineds(self.playlistsFromServer);
   self.playlistsFromServerVersion = o.version;
   self.updatePlaylistsIndex();
   self.emit('playlistsUpdate');
 });
コード例 #6
0
ファイル: playerclient.js プロジェクト: halpin325/groovebasin
 self.socket.on('queue', function(o) {
   if (o.reset) self.queueFromServer = undefined;
   self.queueFromServer = jsondiffpatch.patch(self.queueFromServer, o.delta);
   deleteUndefineds(self.queueFromServer);
   self.queueFromServerVersion = o.version;
   self.updateQueueIndex();
   self.emit('statusupdate');
   self.emit('queueUpdate');
 });
コード例 #7
0
 transform: function(chunk, enc, next){
   debug('last', last)
   var json = JSON.parse(chunk)
   debug('json', json)
   var diff = jdp.diff(last, json)
   debug('diff', diff)
   this.push(JSON.stringify(diff)+'\n')
   last = jdp.patch(last, diff)
   debug('newlast', last)
   next()
 },
コード例 #8
0
ファイル: db.js プロジェクト: braydonf/chainlib
  self.get(key, function(err, original) {
    if(err && !(err instanceof levelup.errors.NotFoundError)) {
      return callback(err);
    }

    var newValue;

    try {
      var originalObject = JSON.parse(original);
      newValue = jsondiffpatch.patch(originalObject, diff);
    } catch(e) {
      newValue = jsondiffpatch.patch(original, diff);
    }

    var operation = {
      type: 'put',
      key: [self.dataPrefix, key].join('-'),
      value: newValue
    };

    callback(null, operation);
  });
コード例 #9
0
    clientEdit.edits.forEach(function(edit){
      // 2) check the version numbers
      if(edit.serverVersion == clientDoc.shadow.serverVersion &&
        edit.localVersion == clientDoc.shadow.localVersion){
        // versions match
        // backup! TODO: is this the right place to do that?
        clientDoc.backup = deepCopy(clientDoc.shadow);
        // 3) patch the shadow
        var snapshot = deepCopy(clientDoc.shadow.doc);
        jsondiffpatch.patch(snapshot, edit.diff);
        clientDoc.shadow.doc = snapshot;
        // apply the patch to the server's document
        snapshot = deepCopy(doc.serverCopy);
        jsondiffpatch.patch(snapshot, edit.diff);
        doc.serverCopy = snapshot;

        // 3.a) increase the version number for the shadow if diff not empty
        if(!_.isEmpty(edit.diff)){
          clientDoc.shadow.localVersion++;
          // notify all sockets about the update, all but this one
          doc.registeredSockets.forEach(function(soc){
            if(soc.id != socket.id){
              soc.emit('updated-doc');
            }
          });
        }

        // 4) save a snapshot of the document
        saveSnapshot(clientEdit.id);
      }else{

        console.log('error', 'patch rejected!!', edit.serverVersion, '->', clientDoc.shadow.serverVersion, ':',
                    edit.localVersion, '->', clientDoc.shadow.localVersion);

      }
    });
コード例 #10
0
ファイル: playerclient.js プロジェクト: halpin325/groovebasin
 self.socket.on('library', function(o) {
   if (o.reset) self.libraryFromServer = undefined;
   self.libraryFromServer = jsondiffpatch.patch(self.libraryFromServer, o.delta);
   deleteUndefineds(self.libraryFromServer);
   self.libraryFromServerVersion = o.version;
   self.library.clear();
   for (var key in self.libraryFromServer) {
     var track = self.libraryFromServer[key];
     self.library.addTrack(track);
   }
   self.library.rebuild();
   self.updateQueueIndex();
   self.haveFileListCache = true;
   var lastQuery = self.lastQuery;
   self.lastQuery = null;
   self.search(lastQuery);
 });
コード例 #11
0
exports.updateUser = function(req, res){
	console.log("----------------------------");
	
	var receiveTime = Date.now();
    
    var diffStartTime = req.body.diffStartTime;
    var diffEndTime = req.body.diffEndTime;
    var sendTime = req.body.sendTime;   
    var delta = req.body.delta;
	var rate = req.body.rate;
    console.log(rate);
  	var patchStartTime ;          
    var patchEndTime ;
 
    patchStartTime = Date.now();

    switch (algorithm) {
    	case "0":
    	    comparedData = delta;
    		break;
    	case "1":
	    	jsondiffpatch.patch(comparedData, delta);
    		break;
        case "2":
            jsonpatch.apply(comparedData, delta);
            break;
        case "3":
            comparedData = jiff.patch(delta, comparedData);
            break;
        case "4":
            comparedData = changeSet.apply(delta, comparedData);
            break;
        case "5":
            comparedData = diffjson.applyChanges(comparedData, delta);
            break;
    }

	patchEndTime = Date.now();
    
    //assert the data is the same
    var flag = false;
    console.log(JSON.stringify(users[1]).length);
    console.log(JSON.stringify(comparedData).length);
    var err = test.error(function() {
        //assert the data
   	    assert.equal(JSON.stringify(comparedData), JSON.stringify(users[1]));
   	    //set the flag
        flag = true;
   	    throw new Error('OK!');
    });
    
    if(flag) {
    	//the two data is the same
        writeCSV();
        res.send("ok");
    } else {
    	//the two data is not the same
        res.send("ko");
    }

    function writeCSV () {

        var totalTime = (diffEndTime - diffStartTime) + (receiveTime - sendTime) + (patchEndTime - patchStartTime);

        var result = (diffEndTime - diffStartTime)+',' +(receiveTime - sendTime) +',' +(patchEndTime - patchStartTime)+ ','+totalTime+','+rate+ '\n';

        fs.writeFile('./result/'+size+'-P'+probability+'-A'+algorithm+'.csv', result, {flag: 'a'}, function(err){
            if(err) throw err;
            console.log("success");
        });

    }

}