Читаем 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:).

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных