Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Длинные ответы #2

Closed
alex-eri opened this issue Oct 1, 2023 · 4 comments
Closed

Длинные ответы #2

alex-eri opened this issue Oct 1, 2023 · 4 comments
Assignees
Labels
question Further information is requested

Comments

@alex-eri
Copy link

alex-eri commented Oct 1, 2023

File "c:\Projects\omnicomm\venv\Lib\site-packages\omnicomm\protocol.py", line 101, in unpack_crc
    return struct.unpack_from('>H', data, offset=offset)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
struct.error: unpack_from requires a buffer of at least 1354 bytes for unpacking 2 bytes at offset 1352 (actual buffer size is 1227)

Возможно стоит вернуть None, remain , когда не достаточно буфера пришло в ответе?

@pikhovkin
Copy link
Owner

Добавил в новой версии возврат ошибки UnpackingCRCError. Что делать при этой ошибке пусть решает разработчик сервера. Например, при перехвате этой ошибки можно вернуться к чтению сокета, чтобы добавить в буфер недостающие данные.

@pikhovkin pikhovkin self-assigned this Oct 2, 2023
@pikhovkin pikhovkin added the question Further information is requested label Oct 2, 2023
@alex-eri
Copy link
Author

alex-eri commented Oct 5, 2023

UnpackingCRCError это другой тип ошибки. Если сообщение с плохой контрольной суммой - его надо однозначно отбросить. Тут нужна именно ошибка о недостатке данных в буфере.

@alex-eri
Copy link
Author

alex-eri commented Oct 5, 2023

В буфере может быть сразу несколько ответов или не быть ни одного. Например при подключении регистратора я ему сразу пуляю серию команд. Он шлет мне ответы и их можно прочитать пачкой. Если ответы возвращать списком, то удобно обрабатывать случаи и когда команда одна, и когда их несколько, и когда их нет.

        cmds, remain = ServerProtocol.unpack(data)
        for cmd in cmds: .....

pikhovkin added a commit that referenced this issue Oct 5, 2023
@pikhovkin
Copy link
Owner

В буфере может быть сразу несколько ответов или не быть ни одного. Например при подключении регистратора я ему сразу пуляю серию команд. Он шлет мне ответы и их можно прочитать пачкой. Если ответы возвращать списком, то удобно обрабатывать случаи и когда команда одна, и когда их несколько, и когда их нет.

Как раз думал об этом. Залил реализацию

pikhovkin added a commit that referenced this issue Oct 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants