[к списку]

Чат-дерево

Разработать приложение для узла "надежной" сети для передачи сообщений. Узлы логически объединены в дерево, каждый узел может отправлять UDP сообщения только своему непосредственному предку и непосредственным потомкам. Приложение принимает в качестве параметров собственное имя узла, процент потерь, собственный порт, а также опционально IP адрес и порт узла-предка. Приложение, которому не был передан IP адрес и порт узла-предка, становится корнем дерева.

Сообщение, введенное на любом из узлов сети, передается на все остальные узлы дерева и выводится на каждом ровно один раз. Все сообщения идентифицируются с помощью GUID. Для обеспечения "надёжности" доставка сообщений должна быть подтверждена.

Для реализации требований, каждый узел может вести учёт отправленных и полученных сообщений, однако неограниченное расходование памяти не допускается.

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

При поступлении любого входящего сообщения, узел генерирует случайное число от 0 до 99 включительно. Если это число строго меньше, чем заданный в параметрах процент потерь, сообщение игнорируется полностью, имитируя сетевую потерю пакета. Это необходимо для тестирования надёжности доставки сообщений.

На случай, если какой-то узел исчёз (завершил работу или стал недоступен), узлы, которые отправляют ему сообщения, не получив подтверждений, через заданный в программе таймаут (или число попыток переотправки) должны переставать отправлять ему сообщения, и перестать считать его предком или потомком. Таким образом, дерево развалится на несколько деревьев, каждое из которых будет корректно функционировать, но уже изолированно друг от друга.

Баллов за задачу: 2.