1+
2+ dop . protocol . patch = function ( node , object_id , patch ) {
3+ var object_node = dop . data . object [ object_id ] . node [ node . token ] ,
4+ version = ++ object_node . subscriber_version ,
5+ request = dop . core . createRequest (
6+ node ,
7+ dop . protocol . instructions . patch ,
8+ object_id ,
9+ version ,
10+ patch
11+ ) ;
12+
13+ object_node . pending [ version ] = patch ;
14+ dop . core . storeSendMessages ( node , request , dop . encodeFunction ) ;
15+ return request . promise ;
16+ } ;
17+
18+ dop . protocol . onpatch = function ( node , request_id , request ) {
19+ var object_id = request [ 1 ] ,
20+ version = request [ 2 ] ,
21+ patch = request [ 3 ] ,
22+ response = dop . core . createResponse ( request_id ) ,
23+ object_data = dop . data . object [ object_id ] ,
24+ object_node ;
25+
26+ if ( isObject ( object_data ) && isObject ( object_data . node [ node . token ] ) && object_data . node [ node . token ] . owner === object_id ) {
27+ object_node = object_data . node [ node . token ] ;
28+ if ( object_node . owner_version + 1 === version ) {
29+ // We apply patch
30+ object_node . owner_version += 1 ;
31+ collector = dop . collectFirst ( ) ;
32+ dop . core . setActionFunction ( object_data . object , patch ) ;
33+ collector . emitAndDestroy ( ) ;
34+ response . push ( 0 ) ;
35+ }
36+ }
37+ else
38+ response . push ( dop . core . error . reject_remote . OBJECT_NOT_FOUND ) ;
39+
40+ dop . core . storeSendMessages ( node , response ) ;
41+ } ;
42+
43+ dop . protocol . _onpatch = function ( node , request_id , request , response ) {
44+ var rejection = response [ 0 ] ,
45+ promise = request . promise ;
46+ if ( rejection !== undefined ) {
47+ if ( rejection === 0 ) {
48+
49+ promise . resolve ( response [ 1 ] ) ;
50+ }
51+ else
52+ promise . reject ( dop . core . getRejectError ( rejection ) ) ;
53+ }
54+ } ;
0 commit comments