Листинг 11.20.
Обработка сообщения от клиента
procedure ProcessMessage(Connection: TIdTCPServerConnection;
strMessage: string);
var
strName: string; //Имя отправителя сообщения
strAction: string; //Строка с обозначением действия (префикс)
len: Integer; //Длина строки strAction
begin
//Определим действие, которое хочет выполнить клиент
len := Pos(\':\', strMessage);
strAction := Copy(strMessage,1,len-1);
Delete(strMessage,1,len);
if (strAction = \'name\') then
begin
//Клиент сообщает свое имя – пытаемся его зарегистрировать
RegisterClient(Connection, strMessage);
end
else if (strAction = \'text\') then
begin
//Клиент передает сообщение всем – подпишем сообщение и отошлем
strMessage := GetClientName(Connection) + \': \' + strMessage;
SendAll(\'text:\' + strMessage);
//Если надо, то сохраняем сообщение в списке событий
if (REPORT) then AddEvent(\'Сообщение от \' + strMessage);
end
else
begin
//Клиент передает сообщение определенному собеседнику
//(строка strAction содержит имя собеседника)
strName := GetClientName(Connection);
SendTo(\'text:\' + strName + \': \' + strMessage, strAction);
if (strName <> strAction) then
//Передадим копию сообщения отправителю
Connection.WriteLn(\'text:\' + strName + \' для \' +
strAction + \': \' + strMessage);
//Если надо, то сохраняем сообщение в списке событий
if (REPORT) then AddEvent(\'Сообщение для \' + strAction +
\' от \' + strName + \': \' + strMessage);
end;
end;
Информация о каждом пользователе (участнике разговора) хранится в отдельной структуре client: