Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.044 c
1-1161938497
Krants
2006-10-27 12:41
2006.12.10
PopupMenu и Hint


15-1164108292
V.I.P
2006-11-21 14:24
2006.12.10
Нужно сделать программу за $$$


2-1164199959
Галинка
2006-11-22 15:52
2006.12.10
Можно ли узнать модификатор свойств компонента


2-1164008669
novice_man
2006-11-20 10:44
2006.12.10
Количество элементов ....


15-1164014998
homm
2006-11-20 12:29
2006.12.10
Аналог printf в javascript





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский