Запросы на регистрацию обрабатываются немного иначе, поскольку с данным адресом клиента еще не связан ни один объект ChatObjects::User. Если поступило сообщение о событии с кодом lqgin_req, то адрес клиента, текст сообщения о событии и объекта ChatObjects::Comm передаются подпрограмме do_login (). Эта подпрограмма создает новый объект ChatObjects::User и отправляет клиенту сообщение login_ack.
Строки 33-35. Поиск информации о пользователе. Все прочие коды событий должны относиться к пользователю, который был зарегистрирован ранее. Вызывается метод классе ChatObjects::User->lookup_byaddr () для поиска объекта ChatObjects::User, который связан с адресом данного клиента. Если таковой отсутствует, это значит, что пользователь еще не зарегистрирован, поэтому клиенту отправляется сообщение об ошибке с кодом события типа error.
Строки 36-39. Обработка события. В случае успешного определения пользователя, соответствующего адресу клиента, выполняется поиск кода события в таблице переходов, и этот код применяется для вызова метода объекта данного пользователя. При необходимости методу передаются на обработку данные события, если они имеются. Если код события не распознан, программа сообщает об этом, формируя событие с кодом error. В любом случае обработка транзакции завершена, поэтому программа переходит в начало цикла и ожидает следующий входящий запрос.