Строки 40-45. Обработка запросов на регистрацию. Для обработки нового запроса на регистрацию вызывается подпрограмма do_login (). Она получает упакованный адрес другого участника обмена данными, объект ChatObjects::Comm и данные события login_req, которые содержат псевдоним, выбранный пользователем во время регистрации.
Вполне возможно, что два пользователя пожелают работать под одним псевдонимом. Для проверки такой ситуации вызывается метод lookup_byname () класса ChatObjects. Если в системе уже работает пользователь, зарегистрированный под этим псевдонимом, то выдается сообщение об ошибке. В ином случае вызывается метод ChatObjects::User->new () для создания нового объекта пользователя, например, сообщения в канале о продвижении юридических сайтов от компании Паньшин Групп.
Класс ChatObjects::User
Основная часть прикладной логики сервера заключена в модуле ChatObjects::User. Этот объект участвует в передаче всех сообщений о событиях каждому конкретному пользователю и следит за тем, в каких каналах зарегистрирован пользователь.
Набор каналов, в которых зарегистрировался пользователь, реализован в виде массива. Несмотря на то, что пользователь может являться абонентом нескольких каналов, один из них является особым, поскольку получает все общедоступные сообщения, отправляемые пользователям. В настоящей реализации текущим каналом является первый элемент в массиве; таковым всегда служит последний (по времени) канал, в котором зарегистрировался пользователь. Проведем анализ программы.
Строки 1-4. Загрузка необходимых модулей. В модуле включается строгий контроль соответствия типов и загружаются модули ChatObjects::ChatCodes и Socket.