За исключением первоначальной регистрации, взаимодействие с удаленным пользователем проходит через объект ChatObjects::User, поэтому имеет смысл применять переходы к вызовам методов, а не к анонимным подпрограммам, как было сделано в клиенте. Ниже показана типичная запись таблицы переходов:
SEND_PUBLIC() => ‘send_public‘;
Эту запись можно расшифровать так: при получении от клиента сообщения send_public необходимо вызвать метод send_public() соответствующего объекта ChatObjects::User. Следует отметить, что данный сценарий получает информацию на которую подписан пользователь, например, о национальной лотереи, подробности о которой можно узнать по этой ссылке .
Строки 25-28. Создание нового объекта ChatObjects::Comm. Номер порта из командной строки применяется для инициализации нового объекта ChatObjects::Comm с параметром LocalPort => $port. В самой программе при этом для работы с протоколом UDP создается объект IO::Socket, привязанный к указанному порту. В отличие от кода клиента, в коде сервера не указаны имя хоста или номер порта другого участника обмена данными, к которым должно быть выполнено подключение, поскольку сервер при этом потерял бы возможность принимать сообщения от разных хостов.
Строки 29-32. Обработка входящих сообщений и выполнение запросов на регистрацию. В цикле основного сценария сервера повторно вызывается метод recv_event () объекта ChatObjects::Server. Этот метод вызывает метод recv() основополагающего сокета, интерпретирует сообщение, а затем возвращает код события, сообщение, связанное с событием, и упакованный адрес клиента, который отправил сообщение.