@@ -9,6 +9,8 @@ import { Logger } from '@nestjs/common';
99import { Server } from 'socket.io' ;
1010import { YSocketIO } from 'y-socket.io/dist/server' ;
1111import * as Y from 'yjs' ;
12+ import { NodeService } from '../node/node.service' ;
13+ import { NodeCacheService } from '../node-cache/node-cache.service' ;
1214
1315@WebSocketGateway ( 1234 )
1416export class YjsService
@@ -17,6 +19,10 @@ export class YjsService
1719 private logger = new Logger ( 'YjsGateway' ) ;
1820 private ysocketio : YSocketIO ;
1921
22+ constructor (
23+ private readonly nodeService : NodeService ,
24+ private readonly nodeCacheService : NodeCacheService ,
25+ ) { }
2026 @WebSocketServer ( )
2127 server : Server ;
2228
@@ -32,20 +38,36 @@ export class YjsService
3238
3339 this . ysocketio . initialize ( ) ;
3440
41+ this . ysocketio . on ( 'document-update' , ( doc : Y . Doc ) => {
42+ // console.log(doc.get("content").doc.share.get("content"));
43+ // console.log(doc.share.get('default'));
44+ } ) ;
45+
3546 this . ysocketio . on ( 'document-loaded' , ( doc : Y . Doc ) => {
36- this . logger . log ( `Document loaded: ${ doc . guid } ` ) ;
47+ doc . on ( 'update' , ( ) => {
48+ const nodes = Object . values ( doc . getMap ( 'nodes' ) . toJSON ( ) ) ;
49+
50+ // 모든 노드에 대해 검사한다.
51+ nodes . forEach ( ( node ) => {
52+ const { title, id } = node . data ;
53+ const { x, y } = node . position ;
54+ // 만약 캐쉬에 노드가 존재하지 않다면 갱신 후 캐쉬에 노드를 넣는다.
55+ if ( ! this . nodeCacheService . has ( id ) ) {
56+ console . log ( id ) ;
57+ this . nodeService . updateNode ( id , { title, x, y } ) ;
58+ this . nodeCacheService . set ( id , title ) ;
59+ return ;
60+ }
3761
38- const titleMap = doc . getMap ( 'title' ) ;
39- titleMap . observe ( ( ) => {
40- console . log ( titleMap . toString ( ) ) ;
62+ // 만약 캐쉬에 노드가 존재하고 title이 다르다면 갱신한다.
63+ if ( ! this . nodeCacheService . hasSameTitle ( id , title ) ) {
64+ this . nodeService . updateNode ( id , { title, x, y } ) ;
65+ this . nodeCacheService . set ( id , title ) ;
66+ return ;
67+ }
68+ // 만약 캐쉬에 노드가 존재하고 title이 동일하다면 패스한다.
69+ } ) ;
4170 } ) ;
42- // const toggleMap = doc.getMap('toggleMap');
43- // toggleMap.observe(() => {
44- // const toggleState = toggleMap.get('toggle') || false;
45- // this.logger.log('🐰 토글 상태 변경', {
46- // toggleState,
47- // });
48- // });
4971 } ) ;
5072 }
5173
0 commit comments