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