Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Закрытие проги - инди сервер виснет.   Найти похожие ветки 

 
Kacnep ©   (2006-07-24 11:10) [0]

Д6, Инди 10, IdCmdTCPServer.
Программа не может прекратить вою работу - только если придет комманда SHUTDOWN  от клиента.
1. Запускается любая программа, а затем уже
2. ЗАКРЫВАЕТСЯ ИНДИ СЕРВЕР
3. Программа завершет свою работу

Внимание! По приходу команды Шатдаун  - сервер сразу отключает клиента (у команды св-во Disconnected:=True)

Вот небольшой кусок кода с коментариями
procedure Tf_Main.id_SrvCommandHandlers0Command(ASender: TIdCommand);
var
 scr:array[0..800] of char;
begin
 //если пришедшая команда от IP пользователя который в списке то
 if (lb_IPs.Count>0) and (lb_IPs.Items.IndexOf(ASender.Context.Connection.Socket.Binding.PeerIP)>-1) then begin
   le_Script.Text:=trim(le_Script.Text)+" ";
   le_Script.Text:=trim(copy(le_Script.Text,1,pos(" ",le_Script.Text)));
   StrPCopy(scr,le_Script.Text);
 //запускаем нужную нам программу и забываем про нее
   ShellExecute(Application.Handle,"open",scr,nil,nil,SW_ShowNormal);
//устанавливаем ТАГ в 1 (он нам пригодиться далее)
   Tag:=1;
// говорим закрыть программу
   f_Main.Close;
 end;//if
end;


Клозе вызывает

procedure Tf_Main.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
 i:integer;
begin
 CanClose:=f_Main.Tag=1; //никогда нельзя закрыть прогу только если ТАГ сменился на 1 а это происходит по приходу команды шатдун - выше процедура
 if not CanClose then begin //если просто пользователь нажал ЗАКРЫТЬ прогу то
   cti_Main.HideMainForm; // сворачиваем в трей
 end
 else begin //если пришла команда  ШАТДАУН то должны выгрузить прогу
   if id_Srv.Active then // если сервер инди активен то
     if StopServer then begin //останавливам сервер (следующая процедура)
       Application.Terminate; //вроде как
     end //begin
     else begin //какая то ошибка при закрытии ИНДИ сервера
       ShowMessage("Error stopping server.");
       CanClose:=false;
     end;
 end;
end;


Ну и теперь что собственно приостановке сервера происходит

function Tf_Main.StopServer: Boolean;
begin
 id_Srv.Active:=false;
// id_Srv.Bindings.Clear; // вот это я вообще ТУПо взял из примера и не знаю надо - нет?
 Result:=not id_Srv.Active;
 if result then begin
   sb_Main.SimpleText:="Server stopped";
 end
 else begin
   sb_Main.SimpleText:="Server running";
 end;
end;


Все...
Итак по приходу команды Шатдаун - из первой процедуры ShellExecute выполняется и программа вроде должна завершить свою работу закрыв сервер - но этого не происходит :(
Может кто нить что нить подсказать?
Спасибо.


 
Kacnep ©   (2006-07-24 11:51) [1]

function Tf_Main.StopServer: Boolean;
begin
id_Srv.Active:=false;
---  сразу после этой команды код не выполняется! и программа не завершает свою работу :((



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
15-1163422460
Игорь Ситиков
2006-11-13 15:54
2006.12.10
Контакты сайта


8-1146213177
xman
2006-04-28 12:32
2006.12.10
Canvas с тенью


15-1163624797
unknown
2006-11-16 00:06
2006.12.10
GMail


2-1164512326
YayinAkisi
2006-11-26 06:38
2006.12.10
TV Programlari


2-1163932298
SergP
2006-11-19 13:31
2006.12.10
Сравнение записей.