@@ -134,3 +134,47 @@ def get_signal(*args, **kwargs):
134
134
return store .get (id , initial_state )
135
135
136
136
return [use_signal , set_signal , get_signal ]
137
+
138
+
139
+ import json
140
+ import random
141
+
142
+ # Assuming connection is already established
143
+ connection = js .WebSocket ("ws://localhost:8765" )
144
+
145
+ def server_state ():
146
+ id = random .randint (0 , 100000 )
147
+
148
+ def use_server_signal (element = None ):
149
+ nonlocal id
150
+ if element :
151
+ # Send a request to register observer
152
+ message = json .dumps ({"action" : "register" , "id" : id , "element" : element })
153
+ connection .send (message )
154
+
155
+ # Request current state for this id
156
+ connection .send (json .dumps ({"action" : "get_state" , "id" : id }))
157
+
158
+ # Returning initial state or undefined, as actual state will be set on server response
159
+ return None
160
+
161
+ def set_server_signal (state ):
162
+ nonlocal id
163
+ # Send the updated state to server
164
+ connection .send (json .dumps ({"action" : "set_state" , "id" : id , "state" : state }))
165
+
166
+ def get_server_signal ():
167
+ nonlocal id
168
+ # Request current state for this id
169
+ connection .send (json .dumps ({"action" : "get_state" , "id" : id }))
170
+ # Returning initial state or undefined, as actual state will be set on server response
171
+ return None
172
+
173
+ return [use_server_signal , set_server_signal , get_server_signal ]
174
+
175
+ # Handle incoming WebSocket messages
176
+ def on_message (event ):
177
+ data = json .loads (event .data )
178
+ # Process the data, update local state, notify observers, etc.
179
+
180
+ connection .onmessage = on_message
0 commit comments