Сообщения поступают от пользователей в произвольном порядке, поэтому сервер должен следить за адресом каждого пользователя и связывать его с соответствующим объектом ChatObjects::User. С другой стороны, клиент взаимодействует только с одним сервером. Однако он должен обрабатывать ввод и от сервера, и от пользователя, поэтому в нем применяется простой цикл select () для мультиплексирования входных данных, поступающих из двух источников.Классы объектов, применяемые в серверной программе, предназначены для создания подклассов. Это позволяет доработать систему интерактивной переписки для использования преимуществ многоадресной рассылки, как будет описано далее.
Клиент системы интерактивной я переписки
Вначале рассматривается клиентская программа. Она принимает команды от пользователя и передает их в соответствующем формате на сервер системы интерактивной переписки, а затем принимает сообщения с сервера и преобразовывает их в вывод, предназначенный для восприятия человеком, который передается пользователю.
В клиентской программе для обработки команд пользователя и сообщений о событиях, поступающих с сервера, применяются две таблицы переходов. Хеш %COMMANDS служит для обработки команд, введенных пользователем. Ключами этого хеша являются тексты команд (например, “join”), а значениями - анонимные подпрограммы, которые вызываются при получении соответствующей команды.