@@ -26,10 +26,25 @@ class _EzdataClientWebsocket:
2626 DEVICE_DATA = 104
2727 DEVICE_DATA_FILE = 105
2828 DEVICE_REQUEST_ERROR = 500
29-
30- def __init__ (self , device_token : str , on_data_changed : Signal ):
29+ DEVICE_USER_SCAN = 106
30+ DEVICE_USER_UPDATE_DATA = 107
31+ DEVICE_USER_DELETE_DATA = 108
32+ DEVICE_USER_ADD_DATA = 109
33+
34+ DATA_CHANGE_TYPE_LIST = [
35+ DEVICE_ADD_DATA ,
36+ DEVICE_UPDATE_DATA ,
37+ DEVICE_DELETE_DATA ,
38+ DEVICE_DATA_LIST ,
39+ DEVICE_USER_UPDATE_DATA ,
40+ DEVICE_USER_DELETE_DATA ,
41+ DEVICE_USER_ADD_DATA ,
42+ ]
43+
44+ def __init__ (self , device_token : str , on_data_changed : Signal , on_data_list_changed : Signal ):
3145 self ._device_token = device_token
3246 self ._on_data_changed = on_data_changed
47+ self ._on_data_list_changed = on_data_list_changed
3348 self ._ws : WebsocketClient | None = None
3449 self ._ws_last_heartbeat_time = 0
3550 self ._data = {}
@@ -83,6 +98,8 @@ async def fetch_all_data(self):
8398 if self ._ws is None :
8499 return
85100
101+ debug_print ("fetch all data" )
102+
86103 self ._data .clear ()
87104
88105 for i in range (10 ):
@@ -102,22 +119,24 @@ async def fetch_all_data(self):
102119 response = json .loads (resp )
103120 if response .get ("code" ) == 200 :
104121 self ._data = response .get ("body" )
105- # debug_print("fetch first data success:", self._data)
122+ # debug_print("fetch all data success:", self._data)
123+ # pretty print
124+
106125 return
107126
108127 except Exception as e :
109- debug_print ("fetch first data failed:" , e )
128+ debug_print ("fetch all data failed:" , e )
110129 await asyncio .sleep (1 )
111130 continue
112131
113132 self ._data .clear ()
114- raise Exception ("max fetch data retry" )
133+ raise Exception ("max fetch all data retry" )
115134
116- def update (self ):
117- self ._receive ()
135+ async def update (self ):
136+ await self ._receive ()
118137 self ._heartbeat ()
119138
120- def _receive (self ):
139+ async def _receive (self ):
121140 if self ._ws is None :
122141 return
123142
@@ -126,7 +145,7 @@ def _receive(self):
126145 if not msg :
127146 return
128147
129- # debug_print("ws recv:", msg)
148+ debug_print ("ws recv:" , msg )
130149
131150 # Skip heartbeat
132151 if msg == "pong" :
@@ -136,14 +155,13 @@ def _receive(self):
136155 response = json .loads (msg )
137156 if response .get ("code" ) == 200 :
138157 cmd = response .get ("cmd" )
139- if cmd in [
140- self .DEVICE_ADD_DATA ,
141- self .DEVICE_UPDATE_DATA ,
142- self .DEVICE_DELETE_DATA ,
143- self .DEVICE_DATA_LIST ,
144- ]:
145- self .fetch_all_data ()
158+ if cmd in self .DATA_CHANGE_TYPE_LIST :
159+ await self .fetch_all_data ()
146160 self ._on_data_changed .emit ()
161+ self ._on_data_list_changed .emit ()
162+ else :
163+ debug_print ("unhandled cmd:" , cmd )
164+
147165 else :
148166 print ("ws recv error msg:" , msg )
149167
@@ -219,14 +237,16 @@ async def _ezdata_task():
219237
220238 # Create ezdata websocket client and init
221239 Ezdata ._client = _EzdataClientWebsocket (
222- Ezdata ._device_token , Ezdata .on_selected_data_changed
240+ Ezdata ._device_token ,
241+ Ezdata .on_selected_data_changed ,
242+ Ezdata .on_data_list_changed ,
223243 )
224244 await Ezdata ._client .init ()
225245 Ezdata ._set_state (Ezdata .State .NORMAL )
226246
227247 # Keep ezdata websocket client running
228248 while True :
229- Ezdata ._client .update ()
249+ await Ezdata ._client .update ()
230250 await asyncio .sleep (0.2 )
231251
232252 except Exception as e :
0 commit comments