Если все реализуешь ты сам, то у тебя должна быть реализация undo/redo, отмена действий и их обратный повтор. Реализуется это обычно тем что либо на машине локально сохраняются состояния документа (буквально память) на каждое действие отмены, либо для каждого действия у тебя должна быть обратная операция.
Что значит обратная операция - нарисовать линию - удалить линию, удалить линию - нарисовать линию (т.е. буквально в момент удаления линии ты должен в лог действий сформировать запись о том как эту линию создать)
Соответственно каждое твое действие с документом должно логироваться в лог действий (пар действий).
Именно этот лог нужно передавать по сети сразу всем открывшим документ (в т.ч. на чтение), он обычно максимально компактный, так как олицетворяет в себе как раз изменения в документе.
Теперь самое главное - нужен самый главный (сервер или в p2p среде случайно выбранный один из участников) которому весь лог отправляется и который перенаправляет действия остальным, на самом деле можно паралельно и напрямую отсылать для отзывчивости но главный разруливает конфликты, или даже не допускает (реальное изменение происходит как только главный скажет что данные дошли до всех клиентов, но визуально это лаги, это некомфортно). Разруливать конфликт можно просто откатом операции автоматически (например прописать приоритетность для каждого действия). Если сделаешь механизм ручного разруливания конфликтов - тебе пользователи спасибо скажут.