Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [RAS] Verbindungsaufbau abbrechen (https://www.delphipraxis.net/89003-%5Bras%5D-verbindungsaufbau-abbrechen.html)

Mazel 24. Mär 2007 14:56


[RAS] Verbindungsaufbau abbrechen
 
Hallo,

ich stelle mit Hilfe einer Ras-Funktion eine Internetverbindung her. Nun ist es aber so, dass manchmal, aus welchen Gründen auch immer, keine Verbindung hergestellt werden kann. Dies merke ich daran, dass ich lange Zeit, etwa 20 Sekunden, warten muss. Nun weiss ich aber aus Erfahrung, dass, wenn schon nach 5 Sekunden keine Verbindung besteht, ich die Aktion abbrechen könnte, ich aber nicht weiss wie.

Hier ist mein Code zum Aufbau der Verbindung:
Delphi-Quellcode:
{--[Dial]----------------------------------------------------------------------}

function Dial(Entry: String): Boolean;
var
 RasDialParams : TRasDialParams;
 Connection    : DWORD;

begin
 RasHangUp(Main.ConnectionID);       // Main-ConnectionID ist die Verbindungs-ID
 FillChar(RasDialParams, SizeOf(RasDialParams), 0);
 RasDialParams.dwSize := SizeOf(RasDialParams);
 StrPCopy(RasDialParams.szEntryName, Entry);
 StrPCopy(RasDialParams.szUserName, '*****');
 StrPCopy(RasDialParams.szPassword, '*****');
 Main.ConnectionID := 0;
 Connection := RasDial(nil, nil, RasDialParams, 0, nil, Main.ConnectionID); // hier wird Verbingung aufgebaut
 If Connection = 0 then Result := True
 Else
  begin
   RasHangUp(Main.ConnectionID);
   Result := False;
  end;
end;
Nun habe ich schon versucht mit RasHangUp(Main.ConnectionID); während der Aktion den Aufbau zu unterbrechen, war aber nur aus Hilflosigkeit geschehen, da ich keinen anderen Weg weiss. Darum hoffe ich, jemand hier zu finden, der mir einen Rat geben könnte.

Gruß
Mazel

Mazel 27. Mär 2007 13:34

Re: [RAS] Verbindungsaufbau abbrechen
 
Keiner eine Idee?

hincapie 27. Mär 2007 19:59

Re: [RAS] Verbindungsaufbau abbrechen
 
Also ich verwende die Komponente RASComm (leider keine ahnung mehr, wo ich die her habe, ist schon ein paar Jährchen her) und frage den Parameter RasConnState ab:
Delphi-Quellcode:
procedure TsMain.rasCommDial(Sender: TObject; RASConnState, ErrorCode: Longint;
  status, device, modem: string);
begin
  StatusBar1.Panels[0].Text := 'Gerät: ' + Modem;
  Log(status);
  if (errorcode <> 0) then
  begin
    Log(rasComm.RASGetError(errorCode)+'['+inttostr(errorcode)+']');
    Dialerror := errorcode;
    DialingIsDone := true;
    rasComm.RASHangUp;
    exit;
  end;
  if (RasConnState = RASCS_DISCONNECTED) then
  begin
    DialError      := 0;
    DialingIsDone  := true;
    rasComm.RASHangUp;
    ...
  end;
So etwas müßte es bei Deinen Ras-Funktionen doch eigentlich auch geben? :gruebel:

Mazel 28. Mär 2007 10:12

Re: [RAS] Verbindungsaufbau abbrechen
 
Hallo,

danke erstmal. :)

Ich vermute, dass es sowas gibt, aber ich wusste nicht nach was ich suchen soll. Ich habe nach allen möglichen Funktionen gesucht aber nicht nach RasConnState. :wall:

Ich schau mir die RAS-Funktionen heute Nachmittag nochmal an (bin grad in der Schule). Ich werde sicher etwas finden.

Gruß
Mazel

Mazel 28. Mär 2007 14:07

Re: [RAS] Verbindungsaufbau abbrechen
 
Ich habe eben mal nachgeschaut, RasConnectionState ist vorhanden, jedoch bringt mir das momentan nicht viel, weil ich nicht den Verbindungsaufbau abfangen kann. Also ich kann zwar den Status abfragen, aber mein Programm reagiert erst wieder, nachdem entweder Verbindung oder keine Verbindung möglich ist.
Ich habe schon an verschiedenen Stellen Application.ProcessMessages eingebaut um den Button in der Form zu betätigen, leider ohne Erfolg.
Die Funktion RasDial ist also das Problem, an die ich nicht heran komme.

Gruß
Mazel

hincapie 28. Mär 2007 16:33

Re: [RAS] Verbindungsaufbau abbrechen
 
Also, mit dieser Routine wird der markierte Eintrag aus der RasList(TListView) angewählt:
Delphi-Quellcode:
procedure TsMain.DialEntries;
begin
  // Logbuch leeren und einblenden.
  LogBuch.items.clear;
  SwitchToExplorer(false);
  DialingIsDone := false;
  Dialerror := 0;
  sMain.PlayWaveSound('ERING');
  repeat
    Log('- Wähle: '+RasList.ItemFocused.Caption);
    rasComm.RASDialEntry(RasList.ItemFocused.Caption);
    repeat
      application.processmessages;
    until DialingIsDone;
    if (Dialerror <> 0) then
    begin
      DialIngIsDone := false;
      Break;
    end;
  until DialingIsdone;
  if (Dialerror <> 0) then
  begin
    ShowMessage('Es konnte keine Verbindung hergestellt werden');
    SwitchToExplorer(true);
  end;
end;
Wenn ich den Prozess des Wählens unterbrechen will, betätige ich den Stop-Button:
Delphi-Quellcode:
procedure TsMain.StopBtnClick(Sender: TObject);
begin
  Screen.Cursor := crHourglass;
  // Parallelprozeß abbrechen.
  DialError    := 0;
  DialingIsDone := true;
  // Verbindung abbrechen.
  rasComm.RASHangUp;

  Log('Verbindung wird getrennt');
  BulbOff(true);
  LogBuch.refresh;
  ShowMessage('Verbindung wurde getrennt.');
  SwitchToExplorer(true);
  ...
end;
Entscheidend ist dabei die Variable DialingIsDone: wenn ich die auf True setze, wird das Einwählen sofort abgebrochen.

Mazel 28. Mär 2007 18:07

Re: [RAS] Verbindungsaufbau abbrechen
 
Ich habe versucht, meinen Code so umzubauen, dass er deinem ähnelt und so eventuell funktioniert.
Leider ohne Erfolg.
Das Programm wartet leider solange, bis RasDial ein Wert zurück liefert. Daher kann ich in diesem Zeitabschnitt nichts mit der Form unternehmen.

Dein rasComm.RASDialEntry würde mein RasDial entsprechen, nun verstehe ich nicht, warum bei mir solange auf ein Wert gewartet wird. Bei dir scheint es so zu sein, dass deine Repeat-Until Schleife sofort ausgeführt wird und wenn DialingIsDone gesetzt ist, die Schleife verlassen wird.
Soweit komme ich wie geschrieben nicht, die Schleife wird bei mir erst nachdem RasDial ausgeüfhrt wurde abgehandelt, was mir aber aufgrund des Themas nichts nützt.

hincapie 28. Mär 2007 20:59

Re: [RAS] Verbindungsaufbau abbrechen
 
Hhhmmm, ich habe mir mein Programm noch einmal genauer angesehen und muss mich daher etwas korrigieren:
Wenn ich den Stop-Button betätige, dauert es während des Verbindungsaufbaus doch etwas länger, bis das Einwählen abgebrochen wird, bzw. muss ich manchmal nach dem Beenden des Wählvorgangs noch einmal den Button drücken, da das Programm vorher offenbar nicht reagiert hat.

Ich würde diese Verzögerung aber der RAS-Api zuweisen, da kann man meiner Ansicht nach programmiertechnisch nicht viel ändern. :gruebel:

Mazel 30. Mär 2007 07:01

Re: [RAS] Verbindungsaufbau abbrechen
 
Dann wird es wohl so bleiben müssen wie es ist. Ich kann sicher noch etwas die Zeit verkürzen aber mehr ist wahrscheinlich wirklich nicht möglich.

Ich danke dir trotzdem für deinen Mühen hincapie :wink:

Gruß
Mazel


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz