11
22dop . protocol . patch = function ( node , object_id , patch ) {
33 var object_node = dop . data . object [ object_id ] . node [ node . token ] ,
4- version = ++ object_node . subscriber_version ,
4+ version = ++ object_node . version ,
55 request = dop . core . createRequest (
66 node ,
77 dop . protocol . instructions . patch ,
@@ -10,7 +10,7 @@ dop.protocol.patch = function(node, object_id, patch) {
1010 patch
1111 ) ;
1212
13- object_node . pending [ version ] = patch ;
13+ object_node . received [ version ] = { received : false , patch : dop . util . merge ( { } , patch ) } ; // Making a copy because this object is exposed to the api users and can be mutated
1414 dop . core . storeSendMessages ( node , request , dop . encodeFunction ) ;
1515 return request . promise ;
1616} ;
@@ -22,19 +22,29 @@ dop.protocol.onpatch = function(node, request_id, request) {
2222 patch = request [ 3 ] ,
2323 response = dop . core . createResponse ( request_id ) ,
2424 object_data = dop . data . object [ object_id ] ,
25- object_node ;
26-
25+ object_node ,
26+ collector ;
27+ console . log ( version ) ;
2728 if ( isObject ( object_data ) && isObject ( object_data . node [ node . token ] ) && object_data . node [ node . token ] . owner === object_id_owner ) {
2829 object_node = object_data . node [ node . token ] ;
29- // We apply patch
30- if ( object_node . owner_version + 1 === version ) {
31- object_node . owner_version += 1 ;
30+ // Storing patch
31+ if ( object_node . applied_version < version && object_node . applied [ version ] === undefined ) {
32+ console . log ( version , 'entra' )
33+ // Storing patch
34+ object_node . applied [ version ] = patch ;
35+ // Applying
3236 collector = dop . collectFirst ( ) ;
33- dop . core . setActionFunction ( object_data . object , patch ) ;
37+ while ( object_node . applied [ object_node . applied_version + 1 ] ) {
38+ object_node . applied_version += 1 ;
39+ console . log ( object_node . applied_version , object_node . applied [ object_node . applied_version ] ) ;
40+ dop . core . setActionFunction ( object_data . object , object_node . applied [ object_node . applied_version ] ) ;
41+ delete object_node . applied [ object_node . applied_version ] ;
42+ }
3443 collector . emitAndDestroy ( ) ;
35- response . push ( 0 ) ;
3644 }
37- //
45+ console . log ( '--' ) ;
46+ // Confirm received
47+ response . push ( 0 ) ;
3848 }
3949 else
4050 response . push ( dop . core . error . reject_remote . OBJECT_NOT_FOUND ) ;
@@ -44,14 +54,21 @@ dop.protocol.onpatch = function(node, request_id, request) {
4454
4555dop . protocol . _onpatch = function ( node , request_id , request , response ) {
4656 var rejection = response [ 0 ] ,
47- // object_id = request[2],
57+ object_id = request [ 2 ] ,
58+ object_node = dop . data . object [ object_id ] . node [ node . token ] ,
59+ version = request [ 3 ] ,
4860 promise = request . promise ;
4961
5062
5163 if ( rejection !== undefined ) {
5264 if ( rejection === 0 ) {
53- // var object_node = dop.data.object[object_id].node[node.token];
54- promise . resolve ( response [ 1 ] ) ;
65+ // Correct version applyed
66+ if ( object_node . pending_version + 1 === version ) {
67+ console . log ( object_node . pending_version , version ) ;
68+ object_node . pending_version += 1 ;
69+ delete object_node . pending [ object_node . pending_version ] ;
70+ promise . resolve ( response [ 1 ] ) ;
71+ }
5572 }
5673 else
5774 promise . reject ( dop . core . getRejectError ( rejection ) ) ;
0 commit comments