Skip to content

Commit 4c8261e

Browse files
committed
feat: add server state
1 parent 4d5d566 commit 4c8261e

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

starfyre/js/store.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,47 @@ def get_signal(*args, **kwargs):
134134
return store.get(id, initial_state)
135135

136136
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

Comments
 (0)