30
30
from Crypto .Util .Padding import pad , unpad
31
31
32
32
from roborock import RoborockException
33
- from roborock .roborock_future import RoborockFuture
34
33
from roborock .roborock_message import RoborockMessage
35
34
36
35
_LOGGER = logging .getLogger (__name__ )
@@ -44,20 +43,20 @@ class RoborockProtocol(asyncio.DatagramProtocol):
44
43
def __init__ (self , timeout : int = 5 ):
45
44
self .timeout = timeout
46
45
self .transport : BaseTransport | None = None
47
- self .queue = RoborockFuture ( 0 )
46
+ self .devices_found : list [ dict ] = []
48
47
49
48
def datagram_received (self , data , _ ):
50
49
[broadcast_message ], _ = BroadcastParser .parse (data )
51
- self .queue .resolve ((json .loads (broadcast_message .payload ), None ))
52
- self .close ()
50
+ self .devices_found .append (json .loads (broadcast_message .payload ))
53
51
54
52
async def discover (self ):
55
53
loop = asyncio .get_event_loop ()
56
54
self .transport , _ = await loop .create_datagram_endpoint (lambda : self , local_addr = ("0.0.0.0" , 58866 ))
57
- (response , exception ) = await self .queue .async_get (self .timeout )
58
- if exception is not None :
59
- raise exception
60
- return response
55
+ await asyncio .sleep (self .timeout )
56
+ self .transport .close ()
57
+ devices_found = self .devices_found
58
+ self .devices_found = []
59
+ return devices_found
61
60
62
61
def close (self ):
63
62
self .transport .close () if self .transport else None
0 commit comments