9
9
10
10
from .handlers import DocSessionHandler , YDocWebSocketHandler
11
11
from .loaders import FileLoaderMapping
12
+ from .rooms import RoomManager
12
13
from .stores import BaseYStore , SQLiteYStore
13
14
from .utils import EVENTS_SCHEMA_PATH
14
- from .websocketserver import JupyterWebsocketServer
15
15
16
16
17
17
class YDocExtension (ExtensionApp ):
@@ -21,8 +21,6 @@ class YDocExtension(ExtensionApp):
21
21
Enables Real Time Collaboration in JupyterLab
22
22
"""
23
23
24
- _store : BaseYStore = None
25
-
26
24
disable_rtc = Bool (False , config = True , help = "Whether to disable real time collaboration." )
27
25
28
26
file_poll_interval = Float (
@@ -81,14 +79,7 @@ def initialize_handlers(self):
81
79
for k , v in self .config .get (self .ystore_class .__name__ , {}).items ():
82
80
setattr (self .ystore_class , k , v )
83
81
84
- # Instantiate the store
85
- self ._store = self .ystore_class (log = self .log )
86
-
87
- self .ywebsocket_server = JupyterWebsocketServer (
88
- rooms_ready = False ,
89
- auto_clean_rooms = False ,
90
- log = self .log ,
91
- )
82
+ self .store = self .ystore_class (log = self .log )
92
83
93
84
# self.settings is local to the ExtensionApp but here we need
94
85
# the global app settings in which the file id manager will register
@@ -97,17 +88,23 @@ def initialize_handlers(self):
97
88
self .serverapp .web_app .settings , self .log , self .file_poll_interval
98
89
)
99
90
91
+ self .room_manager = RoomManager (
92
+ self .store ,
93
+ self .file_loaders ,
94
+ self .serverapp .event_logger ,
95
+ self .document_save_delay ,
96
+ self .log ,
97
+ )
98
+
100
99
self .handlers .extend (
101
100
[
102
101
(
103
102
r"/api/collaboration/room/(.*)" ,
104
103
YDocWebSocketHandler ,
105
104
{
106
105
"document_cleanup_delay" : self .document_cleanup_delay ,
107
- "document_save_delay" : self .document_save_delay ,
108
- "file_loaders" : self .file_loaders ,
109
- "store" : self ._store ,
110
- "ywebsocket_server" : self .ywebsocket_server ,
106
+ "store" : self .store ,
107
+ "room_manager" : self .room_manager ,
111
108
},
112
109
),
113
110
(r"/api/collaboration/session/(.*)" , DocSessionHandler ),
@@ -118,7 +115,7 @@ async def stop_extension(self):
118
115
# Cancel tasks and clean up
119
116
await asyncio .wait (
120
117
[
121
- asyncio .create_task (self .ywebsocket_server . clean ()),
118
+ asyncio .create_task (self .room_manager . clear ()),
122
119
asyncio .create_task (self .file_loaders .clear ()),
123
120
],
124
121
timeout = 3 ,
0 commit comments