8
8
from anyio .abc import TaskGroup
9
9
10
10
from reactpy .config import REACTPY_DEBUG_MODE
11
- from reactpy .core .types import StorageEventMessage , LocalStorage , LayoutEventMessage , LayoutType , LayoutUpdateMessage
11
+ from reactpy .core .types import (
12
+ LocalStorageEventMessage ,
13
+ SessionStorageEventMessage ,
14
+ LocalStorage ,
15
+ SessionStorage ,
16
+ LayoutEventMessage ,
17
+ LayoutType ,
18
+ LayoutUpdateMessage
19
+ )
12
20
from reactpy .core .layout import Layout
13
21
logger = getLogger (__name__ )
14
22
@@ -33,7 +41,8 @@ class Stop(BaseException):
33
41
34
42
async def serve_layout (
35
43
layout : LayoutType [LayoutUpdateMessage , LayoutEventMessage ],
36
- storage : LocalStorage ,
44
+ local_storage : LocalStorage ,
45
+ session_storage : SessionStorage ,
37
46
send : SendCoroutine ,
38
47
recv : RecvCoroutine ,
39
48
) -> None :
@@ -42,7 +51,7 @@ async def serve_layout(
42
51
try :
43
52
async with create_task_group () as task_group :
44
53
task_group .start_soon (_single_outgoing_loop , layout , send )
45
- task_group .start_soon (_single_incoming_loop , task_group , layout , storage , recv )
54
+ task_group .start_soon (_single_incoming_loop , task_group , layout , local_storage , session_storage , recv )
46
55
except Stop :
47
56
logger .info (f"Stopped serving { layout } " )
48
57
@@ -65,21 +74,25 @@ async def _single_outgoing_loop(
65
74
66
75
async def incoming_router (
67
76
layout : Layout ,
68
- storage : LocalStorage ,
69
- event : LayoutEventMessage or StorageEventMessage ,
77
+ local_storage : LocalStorage ,
78
+ session_storage : SessionStorage ,
79
+ event : LayoutEventMessage or LocalStorageEventMessage or SessionStorageEventMessage ,
70
80
):
71
81
if event ["type" ] == "sync-local-storage" :
72
- storage ._sync (event ["storage" ])
73
- else :
82
+ local_storage ._sync (event ["storage" ])
83
+ elif event ["type" ] == "sync-session-storage" :
84
+ session_storage ._sync (event ["storage" ])
85
+ elif event ["type" ] == "layout-event" :
74
86
await layout .deliver (event )
75
87
76
88
async def _single_incoming_loop (
77
89
task_group : TaskGroup ,
78
90
layout : LayoutType [LayoutUpdateMessage , LayoutEventMessage ],
79
- storage : LocalStorage ,
91
+ local_storage : LocalStorage ,
92
+ session_storage : SessionStorage ,
80
93
recv : RecvCoroutine ,
81
94
) -> None :
82
95
while True :
83
96
# We need to fire and forget here so that we avoid waiting on the completion
84
97
# of this event handler before receiving and running the next one.
85
- task_group .start_soon (incoming_router , layout , storage , await recv ())
98
+ task_group .start_soon (incoming_router , layout , local_storage , session_storage , await recv ())
0 commit comments