Совместная работа — это режим, в котором несколько
участников одновременно редактируют один документ
через общий сервер. Один создаёт комнату и загружает
файл, остальные подключаются по коду и работают
с тем же содержимым.
Все изменения — аннотации, текст, фигуры, формулы,
изображения — синхронизируются мгновенно.
Каждый участник видит, что делают другие, курсоры
партнёров двигаются в реальном времени.
В отличие от обычного PDF, где каждый работает со своей
копией, здесь — одна версия на всех.
Не нужно пересылать файлы друг другу и вручную сливать
правки.
1. Как открыть панель
Панель «Совместная работа» открывается через
кнопку на верхней панели инструментов
или через меню «Сервис» → «Совместная работа».
Панель появляется справа, как и остальные боковые панели.
- Работает в обеих версиях программы — Windows 10/11 и Windows 7 SP1 / 8.1
- Требуется подключение к интернету
- Сервер работает независимо — комната живёт, пока в ней есть участники или пока не истекли 7 дней
2. Интерфейс панели
Панель «Совместная работа» разделена на несколько
областей. Понимание структуры помогает быстро
ориентироваться.
┌─────────────────────────────────────────────────────────┐
│ СОВМЕСТНАЯ РАБОТА │
├─────────────────────────────────────────────────────────┤
│ БАННЕР СОЕДИНЕНИЕ ПОТЕРЯНО / ПЕРЕПОДКЛЮЧЕНИЕ... │
├─────────────────────────────────────────────────────────┤
│ Статус: ● Не подключено / В комнате: ABC123 │
│ Вы: Иван [Изменить профиль] │
├─────────────────────────────────────────────────────────┤
│ [Создать комнату] │
│ [Введите код...] │
│ [Войти в комнату] │
├─────────────────────────────────────────────────────────┤
│ КОД КОМНАТЫ: ABC123 │
│ [Выйти из комнаты] │
├─────────────────────────────────────────────────────────┤
│ ФАЙЛ СОВМЕСТНОЙ РАБОТЫ: │
│ [Создать файл] │
│ [Открыть файл с ПК] │
│ [Открыть файл с сервера] │
│ Файл: не загружен / есть на сервере │
├─────────────────────────────────────────────────────────┤
│ [История изменений] │
│ [Распределение страниц] │
│ [Удалить файл с сервера] │
├─────────────────────────────────────────────────────────┤
│ КУРСОРЫ ПАРТНЁРОВ: │
│ ☑ Показывать курсоры партнёров │
│ ☑ Отправлять мой курсор партнёрам │
│ ☑ Я работаю на этой странице │
│ ☐ Запретить редактирование другим │
│ ☐ Защитить файл (только через комнату) │
├─────────────────────────────────────────────────────────┤
│ УЧАСТНИКИ (2): │
│ ■ dikobraska · стр. 1 · ● работает │
│ ■ Dika · стр. 2 │
└─────────────────────────────────────────────────────────┘
Верхняя часть
- Баннер — появляется только при обрыве связи, показывает переподключение
- Статус — «Не подключено», «В комнате: ABC123», «Ошибка»
- Вы — имя текущего профиля и кнопка редактирования
Нижняя часть
- Файл — действия с документом комнаты
- Курсоры и статусы — настройки присутствия
- Участники — список всех, кто сейчас в комнате
3. Регистрация и профиль
Для совместной работы нужен профиль.
Он создаётся один раз и используется во всех комнатах
на этом компьютере.
Что содержит профиль
- Имя — как вас будут видеть другие участники
- Пароль — не менее 8 символов, хранится в виде хеша
- AuthorId — уникальный идентификатор (генерируется автоматически)
- Цвет — назначается детерминированно по AuthorId для отображения в списке участников
Пароль
Пароль хранится только в виде хеша
(PBKDF2, 10 000 итераций). Оригинал не сохраняется
ни в клиенте, ни на сервере. Проверка выполняется
сравнением хешей.
Совет: не используйте один и тот же пароль
с другими сервисами. Это пароль профиля в DikobraskaPDF,
а не учётная запись где-то ещё.
Изменение профиля
- Кнопка «Изменить профиль» в панели
- Можно сменить имя и пароль, AuthorId остаётся прежним
- При переустановке программы профиль сохраняется
4. Создание комнаты
Создатель комнаты — владелец.
Только владелец может выполнять ряд действий: защищать
файл, распределять страницы, удалять файл с сервера.
Как создать комнату
- Убедитесь, что профиль создан (см. раздел 3)
- Нажмите «Создать комнату»
- Сервер сгенерирует код из 6 символов (A–Z, 2–9, без похожих букв)
- Код появится в панели зелёным шрифтом — это ключ доступа
- Передайте код участникам
Код комнаты — единственный способ подключения.
Других механизмов (ссылок, приглашений) нет. Код
передаётся устно, через мессенджер, по почте — любым
удобным способом.
Сколько живёт комната
- Пока в комнате есть хотя бы один участник онлайн — комната активна
- Если все вышли — комната «замораживается», данные сохраняются на сервере
- Через 7 дней после последней активности — сервер удаляет данные автоматически
- Владелец может удалить файл раньше через кнопку «Удалить файл с сервера»
Важно: если нужно сохранить комнату надолго —
оставьте хотя бы один клиент открытым с входом в комнату.
Либо перед выходом нажмите Ctrl+S — это
обновит снимок комнаты, и при следующем открытии `.dika`
она восстановится.
5. Вход в комнату
Как войти
- Откройте панель «Совместная работа»
- Введите код комнаты в поле «Введите код...»
- Нажмите «Войти в комнату»
- Если комната существует — вы увидите список участников и код
- Если комнаты нет — сообщение «Комната не найдена»
Что происходит после входа
- Ваше имя появляется в списке участников у всех
- Сервер отправляет вам все пропущенные операции с момента вашего последнего визита
- Если файл уже загружен — можете его скачать через «Открыть файл с сервера»
- Курсор становится видимым другим участникам
Если комната не найдена
- Проверьте код — возможно, опечатка
- Комната могла быть удалена — через 7 дней или владельцем вручную
- Попросите владельца создать новую
Осторожно: если вы уже в комнате A, а хотите
войти в комнату B — сначала выйдите из A. Один клиент
работает только с одной комнатой за раз.
6. Работа с файлом комнаты
Файл комнаты — это обычный проект `.dika`
(или PDF), который хранится на сервере. Все участники
работают с одной версией на сервере.
Создать файл
- Создаёт пустой документ (1 страница A4)
- Сразу заливает его на сервер
- Доступно только владельцу
- Если файл уже есть — кнопка становится неактивной
Открыть файл с ПК
- Загружает существующий `.dika` или `.pdf` в комнату
- PDF конвертируется в `.dika` автоматически
- Доступно только владельцу
- Существующий файл на сервере перезаписывается
Открыть / Скачать файл с сервера
- Скачивает актуальную версию с сервера
- Доступно всем участникам
- Файл сохраняется в
Документы\DikobraskaPDF\Shared\
- Участник всегда может скачать свежую версию — даже если у него есть локальная
- При включённой защите — для участника действует онлайн-режим
Удалить файл с сервера
- Только для владельца
- Удаляет всю папку комнаты на сервере — файл, снимок, метаданные
- Локальная копия у владельца не удаляется
- Все участники получают уведомление и выходят из комнаты
- После удаления — комната недоступна, вход по коду невозможен
Что происходит при удалении: действие
нельзя отменить. Если владелец удалил файл — восстановить
его можно только из локального `.dika` (открыть файл
с ПК и залить снова).
7. Защита файла
Галочка «Защитить файл (только через комнату)»
— это режим, в котором файл открывается только
при подключении к комнате. Владелец включает её для
защиты от случайного открытия.
Что меняется при включении
- Файл при открытии требует подключения к комнате
- Если подключения нет — показывается диалог «Файл защищён. Подключиться к комнате XXXX?»
- Без подключения — оверлей «🔒 Файл защищён», страницы не отображаются
- Участник в онлайн-режиме: страницы рендерятся с сервера, PDF-экспорт / печать / сохранение локального PDF заблокированы
- Владелец работает как обычно — защита не мешает
Что НЕ защищено
Защита — это UI-барьер. Мотивированный
участник, знающий пароль dika.dikobraska
(вшит в клиент), может расшифровать `.dika` вне клиента.
Для настоящей конфиденциальности —
используйте отдельные файлы: каждому участнику свой `.dika`.
Защита — от случайного, не от намеренного.
Она останавливает того, кто «нажал не туда».
Но не остановит того, кто целенаправленно взламывает.
Если нужна полная конфиденциальность — не собирайте
все работы в один файл.
Когда включать
- Коллективная работа над одним документом — нет, участники и так работают вместе
- Разделение по страницам — да, чтобы каждый видел только свою страницу
- Отдельные файлы каждому — защита не нужна, файлы разные
8. Распределение страниц
Владелец может назначить каждую страницу конкретному
участнику. Это удобно, когда документ — набор
независимых частей: каждый участник видит
только свою страницу.
Как назначить
- Нажмите «Распределение страниц» в панели
- Откроется таблица: страница — назначена — показывать другим
- В колонке «Назначена» выберите участника
- Для назначенной страницы можно включить «Показывать другим»
- Закройте — изменения применятся сразу
Варианты назначения
- (общая) — видят все участники
- (владелец) — только владелец
- Конкретный участник — только он и владелец
Флаг «Показывать другим»
- Включён — назначенный участник видит, остальные тоже
- Выключен — только назначенный участник и владелец
- Действует только для назначенных страниц
Совет: перед началом работы распределите
страницы — каждый получит свою. После завершения можно
снять назначения — все работы будут видны.
9. Курсоры и статусы
В реальном времени каждый участник видит
курсоры и статусы партнёров. Это
помогает понять, кто где работает и не мешать друг другу.
Как отображаются курсоры
- Цветной кружок с именем партнёра рядом
- Цвет — из профиля участника, стабилен
- Показывается только на той же странице, что открыта у вас
- Устаревшие (>10 сек без движения) — бледнеют
Настройки
- «Показывать курсоры партнёров» — включить/выключить отображение
- «Отправлять мой курсор партнёрам» — делиться своим положением
- Обе настройки сохраняются в профиле
Список участников
- Показывает всех, кто сейчас в комнате
- Цветной маркер · имя · страница · статус
- ● работает — участник активно редактирует
- Без маркера — просто смотрит
Совет: если курсоры мешают — отключите
«Показывать курсоры партнёров». Ваш курсор при этом
продолжит отправляться — другие его увидят.
10. Блокировки и «Я работаю»
В совместной работе есть два уровня
блокировки: мягкая (предупреждение) и жёсткая
(полный запрет).
«Я работаю на этой странице»
- Чекбокс в панели, включён по умолчанию
- Показывает другим: «этот человек сейчас редактирует»
- При навигации по страницам — включается автоматически
- Если снять — вы «просто смотрите»
Мягкая блокировка
- Если партнёр «работает» на вашей странице — при попытке рисовать появится предупреждение
- «Иван работает на этой странице. Продолжить?»
- Можно согласиться — блокировка не жёсткая
- Предупреждение показывается один раз на страницу
Жёсткая блокировка
- Чекбокс «Запретить редактирование другим»
- Активен только когда включено «Я работаю»
- Другие не смогут рисовать на этой странице, пока вы её не отпустите
- При попытке — сообщение «{Имя} запретил редактирование этой страницы»
- Заблокированная страница помечена плашкой в углу
Важно: если вы включили «Запретить
редактирование» и забыли выключить — другие не смогут
работать. Отключайте, когда закончили. При выходе из
комнаты блокировка снимается автоматически.
11. История и журнал
В совместной работе есть два
независимых журнала: история изменений (для отмены)
и журнал действий (для контроля).
История изменений
- Кнопка «История изменений» в панели
- Показывает действия текущего пользователя на всех страницах
- Отдельно для каждой страницы — свой стек undo/redo
- Двойной клик по записи — подробности
- Кнопка «Показать на странице» — переход к аннотации
- Свои действия можно отменить (Ctrl+Z), чужие — нет
Журнал действий (в .dika)
- Сохраняется в
collab_history.json внутри .dika
- Все действия всех участников
- Открывается через «История изменений» (объединено с локальной)
- Содержит: время, автор, тип действия, страницу, детали
- Переживает перезапуск — сохраняется в архиве
История не удаляется при выходе участников.
Все действия остаются в collab_history.json и
доступны после перезапуска программы.
12. Автосохранение
Все изменения в комнате автоматически
сохраняются на сервер. Не нужно нажимать
Ctrl+S после каждого действия.
Как это работает
- Вы добавили аннотацию — она мгновенно ушла через SignalR
- Через 2 секунды сработает debounce-таймер
- Файл `.dika` пересобирается и заливается на сервер
- Остальные участники получают актуальную версию
Если добавили много подряд
- Таймер сбрасывается при каждом новом действии
- Сохранение произойдёт через 2 сек после последнего
- Не нагружает сервер лишними запросами
Ручное сохранение
- Ctrl+S — сохранить немедленно
- Работает у всех участников
- Владелец сохраняет локальный `.dika` + заливает на сервер
- Участник сохраняет только на сервер (локальная копия не создаётся — для защиты от утечки)
Совет: при включённой защите участник
нажимает Ctrl+S — изменения уходят на сервер. Это
нормальный режим, не ошибка. Остальные участники видят
изменения в реальном времени.
13. Восстановление
Комната на сервере удаляется через 7 дней
после последней активности. Но это не значит,
что работа потеряна.
Как восстановить
- Откройте файл `.dika` с компьютера (двойной клик)
- Программа прочитает `collab_room.json` внутри архива
- Появится диалог «Документ из комнаты XXXX. Открыть для совместной работы?»
- Нажмите «Да» — программа создаст комнату с тем же кодом
- Файл автоматически зальётся на сервер
- Участники смогут зайти по старому коду
Что восстанавливается
- Код комнаты — тот же, что был
- Файл — все аннотации и страницы
- Снимок — назначения страниц и участники
- История — журнал действий из `collab_history.json`
- Пароль комнаты — тот же (для защищённых файлов)
Восстановление работает только при открытии `.dika`,
а не при вводе кода в панели. Ввод кода в пустом
CollaborationPanel — это попытка войти в существующую
комнату. Если её нет — «Комната не найдена».
Что НЕ восстанавливается
- Если `.dika` потерян — восстановить нечего (снимок на сервере не содержит PDF и аннотации)
- Старые соединения участников — они должны зайти заново
- Локальные копии участников — у них свои версии
14. Ограничения
Совместная работа — это режим для команды или проектной
группы. Ниже — что важно знать заранее.
Что важно знать:
- Нужен интернет — без него только локальная работа
- Код комнаты — 6 символов
- Комната живёт 7 дней после последней активности, после удаляется
- Защита файла — от случайного, не от намеренного взлома
- Все участники работают с одной версией на сервере — локальные копии могут отличаться
- Если владелец удалил файл с сервера — комната закрыта, нужно заново открыть файл и создать комнату
- Если владелец потерял файл `.dika` и комната удалена — работу восстановить нельзя
- Аннотации чужих участников нельзя отменить через Ctrl+Z — только свои
- При защите участник не может сохранять PDF / распечатать — только работать в комнате
Совет: для длительных проектов — оставляйте
хотя бы один клиент открытым в комнате. Это продлевает
жизнь комнаты. Или Ctrl+S после каждой
сессии — тогда снимок в `.dika` обновлён, и даже после
удаления комнаты файл восстановится при следующем открытии.