Einzelnen Beitrag anzeigen

Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

IRC-Client über IdTelnet

  Alt 17. Okt 2005, 14:09
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
Miniaturansicht angehängter Grafiken
telnet_166.gif  
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat