Форум: "Сети";
Текущий архив: 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.042 c