1010from jupyter_ydoc .ybasedoc import YBaseDoc
1111from pycrdt import Doc
1212from pycrdt_websocket .ystore import BaseYStore
13- from traitlets import Bool , Float , Type
13+ from pycrdt_websocket .websocket_server import exception_logger
14+ from traitlets import Bool , Float , Type , Set , Instance
1415
1516from .handlers import DocSessionHandler , YDocWebSocketHandler
1617from .loaders import FileLoaderMapping
2425)
2526from .websocketserver import JupyterWebsocketServer , RoomNotFound
2627
27-
2828class YDocExtension (ExtensionApp ):
2929 name = "jupyter_server_ydoc"
3030 app_name = "Collaboration"
@@ -75,6 +75,10 @@ class YDocExtension(ExtensionApp):
7575 model.""" ,
7676 )
7777
78+ _running_ywebsocket_server = Instance (asyncio .Task , allow_none = True )
79+ ywebsocket_server = Instance (JupyterWebsocketServer , allow_none = True )
80+
81+
7882 def initialize (self ):
7983 super ().initialize ()
8084 self .serverapp .event_logger .register_event_schema (EVENTS_SCHEMA_PATH )
@@ -90,6 +94,14 @@ def initialize_settings(self):
9094 }
9195 )
9296
97+ self .ywebsocket_server = JupyterWebsocketServer (
98+ rooms_ready = False ,
99+ auto_clean_rooms = False ,
100+ ystore_class = self .ystore_class ,
101+ log = self .log ,
102+ exception_logger = exception_logger
103+ )
104+
93105 def initialize_handlers (self ):
94106 self .serverapp .web_app .settings .setdefault (
95107 "page_config_data" ,
@@ -103,13 +115,6 @@ def initialize_handlers(self):
103115 for k , v in self .config .get (self .ystore_class .__name__ , {}).items ():
104116 setattr (self .ystore_class , k , v )
105117
106- self .ywebsocket_server = JupyterWebsocketServer (
107- rooms_ready = False ,
108- auto_clean_rooms = False ,
109- ystore_class = self .ystore_class ,
110- log = self .log ,
111- )
112-
113118 # self.settings is local to the ExtensionApp but here we need
114119 # the global app settings in which the file id manager will register
115120 # itself maybe at a later time.
@@ -134,6 +139,14 @@ def initialize_handlers(self):
134139 ]
135140 )
136141
142+ async def start_extension (self ):
143+ """Start the y-websocket server.
144+ """
145+ self .log .info ("Starting the Collaborative Document Server." )
146+
147+ # Start the websocket server
148+ self ._running_ywebsocket_server = asyncio .create_task (self .ywebsocket_server .start ())
149+
137150 async def get_document (
138151 self : YDocExtension ,
139152 * ,
0 commit comments