Главная страница
    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.45 MB
Время: 0.04 c
15-1163932576
Palladin
2006-11-19 13:36
2006.12.10
CrystalReports


15-1163698600
ProgRAMmer Dimonych
2006-11-16 20:36
2006.12.10
Microsoft готова уйти из Китая


15-1164201013
Тульский
2006-11-22 16:10
2006.12.10
Победить глюк №2328 в Windows 2000 Server (SP3)


11-1140168494
tigra
2006-02-17 12:28
2006.12.10
memo1


9-1139701704
Bogdan1024
2006-02-12 02:48
2006.12.10
Armed Man v1.07 Last Call





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский