Читаем Delphi. Трюки и эффекты полностью

Листинг 11.9.

Процедуры обработки событий серверного приложения (Unitl.pas)

procedure TfrmServer.Timer1Timer(Sender: TObject);

begin

//Если нужно, то скроем окно сервера

if (not SERVERVISIBLE) then

begin

frmServer.Visible := False;

ShowWindow(Application.Handle,SW_HIDE);

end;

//Таймер больше не нужен

Timer1.Enabled := False;

end;

procedure TfrmServer.TCPServerExecute(AThread: TIdPeerThread);

begin

//Обработаем сообщение, пришедшее от клиента

ProcessMessage(AThread.Connection, AThread.Connection.ReadLn);

end;

procedure TfrmServer.TCPServerConnect(AThread: TIdPeerThread);

begin

//Попытаемся добавить нового пользователя

if (AddClient(AThread.Connection)) then

//Пользователь должен прислать свое имя

ProcessMessage(AThread.Connection, AThread.Connection.ReadLn)

else

begin

//Нет места для нового пользователя

AThread.Connection.WriteLn(\'error:Достигнуто максимальное

количество \' + \'пользователей. Извините, невозможно принять вас

в разговор.\');

AThread.Connection.Socket.Close;

end;

end;

procedure TfrmServer.TCPServerDisconnect(AThread: TIdPeerThread);

var clDisconnected: client; //Структура с информацией об

//отсоединенном клиенте (заполнены

//только поля strName и strIP)

begin

//Удалим информацию об отсоединенном клиенте

clDisconnected := DeleteClient(AThread.Connection);

if (clDisconnected.strName <> \'\')then

begin

//Сообщим о событии остальным клиентам

SendAll(\'deluser:\' + clDisconnected.strName);

SendAll(\'Нас покинул «\' + clDisconnected.strName + \'».’);

//Добавим событие в журнал

if (REPORT) then AddEvent(\'Отсоединился клиент "\' +

clDisconnected.strName + \'" на компьютере "\' +

clDisconnected.strIP + \'"\');

end;

end;

procedure TfrmServer.FormCreate(Sender: TObject);

begin

//Создаем критическую секцию

section := TCriticalSection.Create;

end;

Первая и последняя из приведенных в листинге 11.9 процедур не имеют непосредственного отношения к работе TCP-сервера. Процедура Tf rmServer. TimerlTimer вызывается только один раз при первом срабатывании таймера Timer 1. В ней, исходя из заданного значения глобальной переменной SERVERVISIBLE, происходит (или не происходит) скрытие окна сервера. Значение глобальной переменной SERVERVISIBLE (и переменной REPORT) определяется в момент запуска сервера.

Процедура Tf rmServer. FormCreate создает объект синхронизации, используемый остальными функциями и процедурами для предотвращения одновременного доступа к общим данным нескольких потоков (ведь сервер-то у нас многопоточный).

Остальные три процедуры используются непосредственно для организации взаимодействия сервера с клиентами. Как было сказано ранее, сервер хранит информацию о присоединенных к нему клиентах. Хранилищем этой информации является массив структур (подробно он будет рассмотрен немного ниже). Здесь же необходимо сказать, что при присоединении к серверу нового клиента (процедура Tf rmServer. TCPServerConnect) предпринимается попытка найти для информации о новом пользователе место в указанном массиве (вызов функцшФ^СНеп^. Если место нашлось, то функция AddClient возвращает True, и сервер переходит в режим регистрации пользователя. Для регистрации клиентская программа должна передать серверу имя пользователя (сообщение с префиксом name:).

Перейти на страницу:

Похожие книги

102 способа хищения электроэнергии
102 способа хищения электроэнергии

Рассмотрена проблема хищений электроэнергии и снижения коммерческих потерь в электрических сетях потребителей. Приведены законодательно–правовые основы для привлечения к ответственности виновных в хищении электроэнергии. Изложены вопросы определения расчетных параметров средств учета электроэнергии, показаны схемы подключения счетчиков электрической энергии. Описаны расчетные и технологические способы хищения электроэнергии. Обсуждаются организационные и технические мероприятия по обнаружению, предотвращению и устранению хищений.Для работников энергоснабжающих организаций и инспекторского состава органов Ростехнадзора. Материалы книги могут быть использованы руководителями и специалистами энергослужб предприятий (организаций) для правильного определения расчетных параметров средств учета и потерь электроэнергии в электрических сетях.Если потенциальные расхитители электроэнергии надеются найти в книге «полезные советы», они должны отдавать себе отчет, что контролирующие структуры информированы в не меньшей степени и, следовательно, вооружены для эффективной борьбы с противоправной деятельностью.Настоящая книга является переработанным и дополненным изданием выпущенной в 2005 г. книги «101 способ хищения электроэнергии».

Валентин Викторович Красник

Технические науки / Образование и наука
100 великих чудес инженерной мысли
100 великих чудес инженерной мысли

За два последних столетия научно-технический прогресс совершил ошеломляющий рывок. На что ранее человечество затрачивало века, теперь уходят десятилетия или всего лишь годы. При таких темпах развития науки и техники сегодня удивить мир чем-то особенным очень трудно. Но в прежние времена появление нового творения инженерной мысли зачастую означало преодоление очередного рубежа, решение той или иной крайне актуальной задачи. Человечество «брало очередную высоту», и эта «высота» служила отправной точкой для новых свершений. Довольно много сооружений и изделий, даже утративших утилитарное значение, тем не менее остались в памяти людей как чудеса науки и техники. Новая книга серии «Популярная коллекция «100 великих» рассказывает о чудесах инженерной мысли разных стран и эпох: от изобретений и построек Древнего Востока и Античности до небоскребов в сегодняшних странах Юго-Восточной и Восточной Азии.

Андрей Юрьевич Низовский

История / Технические науки / Образование и наука
Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию, елочные огни, электронные украшения, устройство преобразования звука, кодовый замок и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий. Во втором издании существенно переработан текст книги, в экспериментах используются более доступные электронные компоненты, добавлены новые проекты, в том числе с контроллером Arduino.

Чарльз Платт

Радиоэлектроника / Технические науки