Разработать приложение для удалённого управления компьютером.
- Передача изображения монитора удалённого компьютера.
- Управление курсором мыши удалённого компьютера:
- Перемещение.
- Нажатие 3 основных клавиш.
Не предъявляются. Можно слать PNG.
ПО реализуется в виде клиент-серверного решения. Клиент представляет собой графическое приложение, предоставляющее возможности удалённого управления компьютером. Сервер представляет собой демона, слушающего на заранее заданном порте, который пересылает изображение на управляющий компьютер и эмулирует управление пользователем курсора мыши.
Python 3
В связи с тем, что используется посылка разницы изображений (в противопоставление посылки изображения целиком), одновременно падает нагрузка на сеть, сокращается необходимая ширина канала, да и передача всех пакетов становится важной используется TCP соединение.
ZeroMQ PyZMQ.
Так как используется надёжное соединение (все соединения tcp), уведомлять о доставке состояния мыши/экрана не требуется. Поэтому паттерн REQ/REP не используется.
rc.client: sub rc.server: pub rationale: Может быть много серверов, о присутсвии каждого из которых должнен знать любой компьютер в сети.
rc.client: pair rc.server: pair rationale: Гипотетически много клиентов может быть подключено к одному серверу. Когда картинка у сервера меняется все клиенты должны её получить. Проблема заключается в том, что получить изображение должны лишь авторизированные пользователи. Поэтому незашифрованные широковещательные сообщения не могут быть использованы. Для упрощения задачи шифрование не задействовано, поэтому остаётся только парное соединение.
rc.client: pair rc.server: pair rationale: Даже в гипотетическом случае, когда много клиентов могут подключится к одному серверу получаем множество независимых пар: "клиент-сервер", т.к. всем клиентам, кроме управляющего не нужна позиция курсора мыши.
Все сообщения инкапсулируются в JSON.
Пакет состояния мыши:
class MousePackage(Package):
def __init__(self, x, y, left, middle, right):
self.x = x
self.y = y
self.left = left
self.right = right
Изображение и его diff-ы передаются через base64.
Ведётся с помощью стандартного модуля logging
. Конфигурация логгирования задаётся через файл (Q: INI/YAML?).
Все платформы с графическим интерфейсом, поддерживаемые языком и библиотеками.
Qt 5 Widgets
QGraphicsView (с QGraphicsScene, на который кинут Pixmap, который содержит изображение удалённого рабочего стола).
Widget, на котором происходит отрисовка удалённого рабочего стола, обрабатывает движения мышью, нажатия клавиш. После обработки формирует пакет текущего состояния мыши.
Компьютер, работающий под управлением GNU/Linux с оконной системой X Window System и с системой инициализации SystemD.
Программа запускается SystemD.
Есть библиотека https://pypi.python.org/pypi/python-daemon/. Q: нужна ли она, когда SystemD делает это всё сам?
Вести логи просто в stdout. SystemD позаботится обо всём сам.
PEP8 + для отступов табы вместо пробелов (для выравнивания пробелы). Никакого транслита — нормальный английский. Docstrings не обязательны, но в случае быдлокода желательны.
Сообщения в коммитах, комменты в коде — на английском.
Всё коммитим в одну ветку master. Push на github только когда интерпретируется без вылетов (хотя бы в стандартных ситуациях).