Skip to content

Commit ffbce10

Browse files
committed
Send broadcasts only to concerned sockets
1 parent 66ae5b2 commit ffbce10

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

vuejspython.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import json
55
from observablecollections.observablelist import ObservableList
66
import traceback
7+
from collections import defaultdict
78

89
g_components = {}
910
g_instances = {}
@@ -156,11 +157,11 @@ def call_watcher(o, k):
156157
if callable(watcher):
157158
watcher(getattr(o, k))
158159

159-
all = []
160+
all = defaultdict(lambda: set([]))
160161
KEY_ATOMIC = '_v_ATOMIC'
161162
async def broadcast_update(id, k, v):
162-
a = all.copy()
163-
all[:] = []
163+
a = all[id].copy()
164+
all[id].clear()
164165
if k == KEY_ATOMIC:
165166
comm = 'ATOMIC'
166167
else:
@@ -170,7 +171,7 @@ async def broadcast_update(id, k, v):
170171
v = sanitize(v)
171172
await ws.send(comm+' '+str(id)+' '+str(k)+' '+json.dumps(v))
172173
info('OUT', comm, id, k, '{:.80} ...'.format(json.dumps(v)))
173-
all.append(ws)
174+
all[id].add(ws)
174175
except:
175176
pass
176177

@@ -181,16 +182,15 @@ def next_instance_id():
181182
return str(_previd[0])
182183

183184
async def handleClient(websocket, path):
184-
# TODO: these all should be per-id? to avoid unncessary calls?
185185
# TODO: cleanup g_instances (on socket disconnect at least)
186-
all.append(websocket)
187186
try:
188187
while True:
189188
comm = await websocket.recv()
190189
if comm == 'INIT' or comm == 'INFO':
191190
clss_name = await websocket.recv()
192191
info('IN', comm, clss_name)
193192
if clss_name == 'ROOT':
193+
all[clss_name].add(websocket)
194194
id = clss_name
195195
o = g_instances[id]
196196
clss = type(o)
@@ -201,6 +201,7 @@ async def handleClient(websocket, path):
201201
clss = g_components[clss_name]
202202
o = clss()
203203
id = next_instance_id()
204+
all[id].add(websocket)
204205
setattr(o, '__id', id)
205206
setup_model_object_infra(o)
206207
g_instances[id] = o

0 commit comments

Comments
 (0)