8
8
from anyio .abc import TaskGroup
9
9
10
10
from reactpy .config import REACTPY_DEBUG_MODE
11
- from reactpy .core .types import LayoutEventMessage , LayoutType , LayoutUpdateMessage
12
-
11
+ from reactpy .core .types import StorageEventMessage , LocalStorage , LayoutEventMessage , LayoutType , LayoutUpdateMessage
12
+ from reactpy . core . layout import Layout
13
13
logger = getLogger (__name__ )
14
14
15
15
@@ -33,6 +33,7 @@ class Stop(BaseException):
33
33
34
34
async def serve_layout (
35
35
layout : LayoutType [LayoutUpdateMessage , LayoutEventMessage ],
36
+ storage : LocalStorage ,
36
37
send : SendCoroutine ,
37
38
recv : RecvCoroutine ,
38
39
) -> None :
@@ -41,11 +42,10 @@ async def serve_layout(
41
42
try :
42
43
async with create_task_group () as task_group :
43
44
task_group .start_soon (_single_outgoing_loop , layout , send )
44
- task_group .start_soon (_single_incoming_loop , task_group , layout , recv )
45
+ task_group .start_soon (_single_incoming_loop , task_group , layout , storage , recv )
45
46
except Stop :
46
47
logger .info (f"Stopped serving { layout } " )
47
48
48
-
49
49
async def _single_outgoing_loop (
50
50
layout : LayoutType [LayoutUpdateMessage , LayoutEventMessage ], send : SendCoroutine
51
51
) -> None :
@@ -63,13 +63,23 @@ async def _single_outgoing_loop(
63
63
logger .error (msg )
64
64
raise
65
65
66
+ async def incoming_router (
67
+ layout : Layout ,
68
+ storage : LocalStorage ,
69
+ event : LayoutEventMessage or StorageEventMessage ,
70
+ ):
71
+ if event ["type" ] == "sync-local-storage" :
72
+ storage ._sync (event ["storage" ])
73
+ else :
74
+ await layout .deliver (event )
66
75
67
76
async def _single_incoming_loop (
68
77
task_group : TaskGroup ,
69
78
layout : LayoutType [LayoutUpdateMessage , LayoutEventMessage ],
79
+ storage : LocalStorage ,
70
80
recv : RecvCoroutine ,
71
81
) -> None :
72
82
while True :
73
83
# We need to fire and forget here so that we avoid waiting on the completion
74
84
# of this event handler before receiving and running the next one.
75
- task_group .start_soon (layout . deliver , await recv ())
85
+ task_group .start_soon (incoming_router , layout , storage , await recv ())
0 commit comments