Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IRC-Client über IdTelnet (https://www.delphipraxis.net/55155-irc-client-ueber-idtelnet.html)

faux 17. Okt 2005 14:09


IRC-Client über IdTelnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Ich versuche grad einen simplen IRC-Client mittels der Telnet-Komonente von Indy zu programmieren.

Bis jetzt habe ich eine Form (siehe Anhang) mit zwei ComboBoxen, einem Edit und einem Memo. Ins Memo kommt die Aus- und Eingabe, in der ersten ComboBox steht der Befehl (zB NICK, JOIN oder PRIVMSG), in der zweiten ComboBox das Ziel (zB ein Channel oder ein User) und in der Edit steht der Text geführt von einem Doppelpunkt.
Ich baue per TIdTelnet (Indy Telnet) die Verbindung zum Server auf und sende die Befehle wie folgt:

Delphi-Quellcode:
procedure TForm1.CommandSending(Sender: TObject; var Key: Char);
var
  tmp: String;
begin
  if (Key = #13) and (Telnet1.Connected) then
  begin
    tmp := ComboBox1.Text + ' ' +  ComboBox2.Text + ' ' + Edit1.Text;
    Telnet1.WriteLn(tmp); //Hier der eigentlich Befehl
    Memo1.Lines.Add('*** SEND: '+tmp);
    if (ComboBox1.Text <> '') and (ComboBox1.Items.IndexOf(ComboBox1.Text) = -1) then
      ComboBox1.Items.Add(ComboBox1.Text);
    if (ComboBox2.Text <> '') and (ComboBox2.Items.IndexOf(ComboBox2.Text) = -1) then
      ComboBox2.Items.Add(ComboBox2.Text);
    Key := #0;
    Edit1.Text := ':';
    Edit1.SelStart := 1;
    Edit1.SelLength := 0;
  end
  else if (Key = #13) and (not Telnet1.Connected) then
    Memo1.Lines.Add('*** NOT CONNECTED');
end;
Die Daten vom Server empfange ich so:
Delphi-Quellcode:
procedure TForm1.Telnet1DataAvailable(Sender: TIdTelnet;
  const Buffer: String);
begin
  Memo1.Lines.Add(Buffer);
end;
Und das Programm beendet so:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: Integer;
begin
  if Telnet1.Connected then
  begin
    Telnet1.WriteLn('QUIT :');
    Memo1.Lines.Add('*** QUITTING');
    while Telnet1.Connected do
      for i := 0 to 10000 do
        Application.ProcessMessages;
  end;
end;
So, nun aber zu den Fragen:

1. Mache ich in den genannten Codesegmenten alles richtig? Also sendet man den Text per WriteLn, oder doch eher über SendCmd? Und geht das Beenden nur auf so umständlichem Wege, oder gibt es da eine bessere Lösung?

2. Wie kann ich jetzt auf Text vom Server reagieren? ZB: Wie kann ich einen Ping der Form PING :12345678 pongen? Oder wie kann ich die Fehlernummern abfragen? Nick existiert hat IMHO den Fehler nummer 433 denn wenn ich einen existierenden Nick benutzen will, passiert das:
Code:
:online2.no.quakenet.org 433 * faux :Nickname is already in use.
So das wärs dann mal. Ich hoffe ihr könnt mir helfen.
Danke schon mal.

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr.

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