Skip to content

Commit c854b50

Browse files
committed
Добавлен параметр retry в read_with_prefix (точнее в send_message и send_data), теперь можно указать сколько повторов может быть. Вообще, возможно это не самая лучшая идея, потому что как бы зачем повторы, когда можно просто увеличить таймаут. Но почему-то глядя на скрипт демона панели, мне показалось что так будет лучше
1 parent c8994d9 commit c854b50

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

overengine_client/overengine_client.py

+16-9
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,18 @@ def _validate_input(data_type, filename):
147147
error = f"File {filename} does not exists!"
148148
raise RuntimeError(error)
149149

150-
async def read_with_prefix(self, timeout=5):
150+
async def read_with_prefix(self, timeout=5, retry=0):
151151
prefix_timeout = 30
152152
if timeout > prefix_timeout:
153153
prefix_timeout = timeout
154-
prefix = (await asyncio.wait_for(self.reader.readline(), timeout=prefix_timeout)).rstrip()
154+
try:
155+
prefix = (await asyncio.wait_for(self.reader.readline(), timeout=prefix_timeout)).rstrip()
156+
except asyncio.exceptions.TimeoutError:
157+
if retry:
158+
print(f"Timeout error, but {retry} retry left")
159+
return await self.read_with_prefix(timeout=timeout, retry=retry-1)
160+
else:
161+
raise
155162
pk_data = b''
156163
msg_len = 0
157164
if prefix != b'':
@@ -343,21 +350,21 @@ async def send_file(self, path_from, path_to=None):
343350
# await self.writer.wait_closed()
344351
return rcv_data
345352

346-
async def send_message(self, message, timeout=2):
353+
async def send_message(self, message, timeout=2, retry=0):
347354
await self.check_connection()
348-
rcv = await self.send_data(self.server_address, data=message.encode(), timeout=timeout)
355+
rcv = await self.send_data(self.server_address, data=message.encode(), timeout=timeout, retry=retry)
349356
if rcv == 'Access denied':
350357
self.server_public_key = None
351358
self.authorized = False
352-
return await self.send_message(message, timeout=timeout)
359+
return await self.send_message(message, timeout=timeout, retry=retry)
353360
elif not rcv:
354361
if self.verbose or self.debug:
355362
print(f'Reconnecting to {self.server_address}...')
356363
# await self.close_connection()
357-
return await self.send_message(message, timeout=timeout)
364+
return await self.send_message(message, timeout=timeout, retry=retry)
358365
return rcv
359366

360-
async def send_data(self, address, data=b'', data_type='message', timeout=2):
367+
async def send_data(self, address, data=b'', data_type='message', timeout=2, retry=0):
361368
if not self.connected:
362369
await self.connect()
363370
#self.reader, self.writer = await asyncio.open_connection(
@@ -413,15 +420,15 @@ async def send_data(self, address, data=b'', data_type='message', timeout=2):
413420
except:
414421
print('not aes')
415422
# rcv_data = await self.reader.read(4096)
416-
rcv_data = (await self.read_with_prefix(timeout=timeout))[0]
423+
rcv_data = (await self.read_with_prefix(timeout=timeout, retry=retry))[0]
417424
# print(f'Encoded: {rcv_data}, len: {len(base64.b64decode(rcv_data))}')
418425
if data_type not in ['public_key', 'auth_req'] and self.server_public_key:
419426
# print(f'Decrypted: {aes.decrypt(rcv_data)}')
420427
if len(rcv_data) > 0:
421428
rcv_data = self.aes.decrypt(rcv_data)
422429
if data_type == 'message' and rcv_data == b'Sign ok':
423430
sign_data = rcv_data # Xz why
424-
rcv_data = self.aes.decrypt((await self.read_with_prefix())[0])
431+
rcv_data = self.aes.decrypt((await self.read_with_prefix(timeout=timeout, retry=retry))[0])
425432
elif rcv_data == b'Sign error':
426433
rcv_data = json.dumps({'status': False, 'description': 'Sign error'}).encode()
427434
rcv_data = oe_common.fix_block_encoding_errors(rcv_data)

setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = overengine_client
3-
version = 0.7.4
3+
version = 0.7.5
44
author = Dmitry Yakovlev
55
author_email = [email protected]
66
description = Overengine Client

0 commit comments

Comments
 (0)