152 lines
7.9 KiB
Markdown
152 lines
7.9 KiB
Markdown
# work-soc-streamer
|
||
|
||
## Описание содержания файлов
|
||
|
||
В этом разделе описано краткое содержание файлов проекта, которые были изменены разработчиком (Мария Сухоносова).
|
||
Описание может содержать неточности.
|
||
|
||
### Файл /streamer_ulils.py
|
||
|
||
Это самописная библиотека, содержит класс SocketBlocksWrapper - обертку над сокетом для чтения/записи объектов или сырых блоков данных в сокет.
|
||
Используется остальными компонентами проекта.
|
||
|
||
### Файл /server.py
|
||
|
||
Это имполняемый файл сервера, то есть машины, которая ожидает подключений плат и компьютеров.
|
||
Задача сервера - прослушивать порт. На любом входящем соединении требовать авторизацию и после успешной авторизации создавать некое подобие локальной сети между нужными соединениями. Принцп действия схож с принципом действия свича с поддержкой VLAN с разницей в том, что сервер сначала требует авторизацию.
|
||
|
||
Требует наличия файла /streamer_ulils.py рядом во время исполнения.ы
|
||
|
||
### Файл /client.py
|
||
|
||
Это исполняемый файл клиента, то есть программы, которая создает окно, показывает картинку и реагирует на действия пользователя.
|
||
|
||
Требует наличия файла /streamer_ulils.py рядом во время исполнения.
|
||
|
||
В программе отдельно создается поток, работающий с сокетом и потом, работающий с ГУИ.
|
||
|
||
Пользователь (например) нажимает кнопку в ГУИ, дальше формируется сообщение с типом 'command' и отправляется в сокет путем неблокирующей записи, если сокет существует и открыт.
|
||
|
||
Поток, работающий с сокетом пытается установить соединение с сервером.
|
||
После успешной попытки происходит авторизация (сообщения типа 'auth').
|
||
После успешной авторизации клиент ожидает сообщений с типом 'video'.
|
||
Сообщение с этим типом интерпретируются как сообщения с картинкой. После чего картинка восстанавливается из сообщения и обновляется в потоке ГУИ.
|
||
|
||
В случае неудачной попытки подключения будет предпринята еще одна попытка подключения, и так до закрытия программы.
|
||
|
||
### Файл /board.py
|
||
|
||
Это основной исполняемый файл для компьютера с камерой. За основу был взят Final-Ochka-v1.2-beta.py
|
||
В него был встроен один класс в начале скрипта, был модифицирован алгоритм отправки фреймов и обработки классов.
|
||
|
||
Скрипт так же как и скрипт для клиента запускает поток, работающий с соединением. В данном случае поток слушает все сообщения с типом 'command'. Сразу после принятия сообщения такого типа вызывается обработчик команд, который уже выполняет команду.
|
||
|
||
### Файл /board-config.json
|
||
|
||
Файл содержит json структуру и хранит в себе настройки подключения к серверу.
|
||
|
||
### Файл /client-config.json
|
||
|
||
Файл содержит json структуру и хранит в себе настройки подключения и авторизации клиента на сервере.
|
||
|
||
### Файл /classes.json
|
||
|
||
Файл имеет структуру json и содержит массив классов в формате
|
||
|
||
```json
|
||
{
|
||
"class": "nameOfClass",
|
||
"label": "Название класса",
|
||
"color": [<R>, <G>, <B>]
|
||
}
|
||
```
|
||
|
||
Поле class содержит имя класса. Поле label содержит название класса, которое будет отображено на клиенте. Поле label пока не используется.
|
||
|
||
### Файл /boards.sqlite3
|
||
|
||
Файл базы данных, в которой хранятся все наименования плат и пароль для подключения к каждой плате.
|
||
Содержит одну единственную таблицу, созданную таким кодом:
|
||
```sqlite
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
board_name TEXT NOT NULL PRIMARY KEY,
|
||
password TEXT NOT NULL DEFAULT ''
|
||
);
|
||
```
|
||
|
||
## КАК ЗАПУСКАТЬ
|
||
|
||
Всего в этом проекте 3 исполняемых файла: board.py, computer.py, server.py.
|
||
Не так важно в каком порядке их запускать, однако если есть желание увидеть картинку, то нужно запустить все 3.
|
||
|
||
При копировании проекта по разным машинам следует убедиться, что вы взяли все ресурсы для конкретного файла.
|
||
|
||
### Board (плата с камерой)
|
||
|
||
Команда запуска:
|
||
```bash
|
||
python board.py
|
||
```
|
||
|
||
Используемые файлы:
|
||
* board.py (исполняемый файл)
|
||
* board-config.json
|
||
* classes.json
|
||
* Nab.wav
|
||
* Pot.wav
|
||
* Zah.wav
|
||
* AI.cfg
|
||
* AI.weights
|
||
* streamer_utils.py
|
||
|
||
В конфигурационном файле прописываются:
|
||
|
||
### Server (комп, к которому все подключатся)
|
||
|
||
Команда запуска
|
||
```bash
|
||
python server.py
|
||
```
|
||
|
||
Используемые файлы:
|
||
* server.py (исполняемый файл)
|
||
* streamer_utils.py
|
||
* boards.sqlite3
|
||
|
||
### Client (комп, который должен показывать картинку)
|
||
|
||
Команда запуска
|
||
```bash
|
||
python client.py
|
||
```
|
||
|
||
Используемые файлы:
|
||
* client.py (исполняемый файл)
|
||
* classes.json
|
||
* client-config.json
|
||
* streamer_utils.py
|
||
* logo.png
|
||
|
||
В конфигурационном файле прописываются: адрес сервера, порт, имя платы для подключения, пароль
|
||
|
||
## Как добавить плату
|
||
|
||
Нужно отредактировать базу данных, то есть файл boards.sqlite3.
|
||
|
||
Открыть базу можно любой утилитой, которая поддерживает SQLite3.
|
||
Самый простой метод - выполнить в терминале
|
||
```bash
|
||
sqlite3 boards.sqlite3
|
||
```
|
||
|
||
Посмотреть все платы и пароли к ним
|
||
```sqlite
|
||
SELECT board_name, password FROM users;
|
||
```
|
||
|
||
Добавление/удаление/обновление информации делается нативным образом для этой базы данных, то есть через запросы.
|
||
|
||
База данных позволяет на лету менять данные. Изменения применяются сразу и только для новых подключений.
|
||
Уже установленные подключения не будут разорваны.
|
||
|