Главная страница
    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.046 c
11-1128680360
shalex
2005-10-07 14:19
2006.12.10
Меню со стилем OfficeXP


15-1163794567
Витян
2006-11-17 23:16
2006.12.10
Микроконтроллер ATmega16


2-1163583511
Stasmor
2006-11-15 12:38
2006.12.10
Почему код не работает на Win98, но чудесно работает в XP(RS232)


15-1164020434
seul
2006-11-20 14:00
2006.12.10
субд


2-1164536274
Ded222
2006-11-26 13:17
2006.12.10
Программа занимает 20 мб памяти в Диспетчере задач.





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