hi
ich erstelle einen
tcp server zur laufzeit (indy10) in meiner dienstanwendung, die kommunikation läuft wie gewünscht mit dem entsprechenden anderen tool...
nach der interaktion soll nun der
tcp server neu "aufgesetzt" werden...
d.h. max connections := 0...
wenn eine
exception auftritt, soll der server so zurückgesetzt werden, dass wieder eine eingehende verbindung angenommen wird...
damit alles sauber verläuft möchte ich die komponente zerstören und neu erstellen, ich kriegs aber einfach nicht hin...
hab schon 1000 varianten probiert ohne erfolg jedoch.
so sollte es z.b. aussehen:
Delphi-Quellcode:
// RE/ACTIVATE TCP SERVER
procedure TSisterWatch.ActivateTCPServer;
var
i,port: Integer;
Cont:TIdContext;
begin
if fulllog
then LogFile.Log(msg0045);
if assigned(TCPServer)
then
begin
if fulllog
then LogFile.Log('
1 assigned');
if TCPServer.Active
then
begin
//// disconnect clients (it should not have some established)
// for i:=TCPServer.Contexts.LockList.Count-1 downto 0 do
// begin
// Cont:=TIdContext(TCPServer.Contexts.LockList.Items[i]);
// Cont.Connection.Disconnect;
// end;
// TCPServer.Contexts.Clear;
// TCPServer.Contexts.UnLockList;
// if fulllog then LogFile.Log('1.2 is active try to set inactive');
// TCPServer.Active := false;
// if fulllog then LogFile.Log('1.3 successfully deactivated');
end;
//if fulllog then LogFile.Log('2 deactivated');
//TCPServer.Bindings.Clear;
//if fulllog then LogFile.Log('3 bindings cleared');
//TCPServer.Contexts.Clear;
//if fulllog then LogFile.Log('4 contexts cleared');
//FreeAndNil(TCPServer);
if fulllog
then LogFile.Log('
cleanup instance');
TCPServer.CleanupInstance;
if fulllog
then LogFile.Log('
5- try to destroy');
TCPServer.Free;
if fulllog
then LogFile.Log('
5 destroyed');
end;
// create the server new
TCPServer := TIdTCPServer.Create(Self);
if fulllog
then LogFile.Log('
6 created new');
// link server actions
if assigned(TCPServer)
then
begin
if fulllog
then LogFile.Log('
7 assigned');
TCPServer.OnExecute := TCPServerExecute;
if fulllog
then LogFile.Log('
8 applyed on execute');
// enough error handling in TCPServerOnExecute...
//TCPServer.OnException := TCPServerException;
TCPServer.OnConnect := TCPServerConnect;
if fulllog
then LogFile.Log('
9 applyed on connect');
TCPServer.OnDisconnect := TCPServerDisconnect;
if fulllog
then LogFile.Log('
10 applyed on disconnect');
TCPServer.Active := false;
if fulllog
then LogFile.Log('
11 active falsed');
port := GetPort;
if fulllog
then LogFile.Log('
12 get port');
TCPServer.DefaultPort := port;
if fulllog
then LogFile.Log('
13 set port');
TCPServer.Active := True;
if fulllog
then LogFile.Log('
14 activated now');
end
else
if fulllog
then LogFile.Log(msg0042);
if fulllog
then LogFile.Log('
reactivate procedure ended..');
end;
da ichs nicht hinkriege den dienst zu debuggen, habe ich halt vorübergehend meldungen in ein log file umgeleitet, dasselbe passiert mit den exceptions...
die funktion wird in einem mit try except block ausgeführt, jedoch erhalte ich keine
exception meldung...
wie auch immer die letzte meldung mit diesem code in meinem log ist: "-try to destroy"
Ich kann den TCPServer weder Active = False setzten noch freeen oder destroyen ... bei all diesen sachen bleibt der dienst einfach stehen..
worauf muss ich achten dass ich den server löschen und dann erneut erstellen kann?