Einzelnen Beitrag anzeigen

BlackHawk2006

Registriert seit: 1. Jul 2006
Ort: Schwanewede
3 Beiträge
 
#1

TeamSpeak-Playerliste über Telnet auslesen

  Alt 1. Jul 2006, 11:21
Moin, moin!

Ich habe vor kurzem eine (meiner Meinung nach gute) Methode gefunden die Playerliste aus dem Telnet sauber in einem TValueListEditor darzustellen!!!

Was ihr braucht:
- Indy 9
- 1x TValueListEditor (Den nennt ihr "Liste")
- 1x TIdTCPClient (Den nennt ihr "TS")
- 1x TXPManifest (Nur damit's besser aussieht)
- 1x TListBox (Die nennt ihr "Log")
- 2x TButton

Dann kannst ja losgehen!
Nachdem ihr die Komponenten so genannt habt, wie oben vergeschrieben, fangen wir mit dem Verbinden an...

Hierzu habe ich den ersten Button (OnClick) verwendet:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TS do
  begin
    Host := '192.168.1.1'; // Server IP
    Port := 51234; // Query/TCP Port (Nicht UDP)
    Connect();
    Log.Items.Add(ReadLn()); // [TS] abfrage
    WriteLn('sel 8767'); // Server wählen (mit UDP Port)
    Log.Items.Add(ReadLn()); // Port abfrage
  end;
end;
Die "with .. do" Schleife habe ich nur gewählt damit das ganze einfacher ist.
Host, Port, und UDP müsst ihr selbst angeben!

OK, jetzt wird's hart, nun kommt die Auslese der Playerliste!!!
Wer es nicht versteht, darf natürlich gerne Fragen.
Hier kommt der 2. Button ins Spiel:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Ende: Boolean;
    Antwort, Playername, Playerid, Antwort2: String;
    Count, i, a: Integer;
begin
  Ende := false;
  TS.WriteLn('pl');
  repeat
    Antwort := TS.ReadLn; // Telnet auslesen
    Antwort2 := Antwort; // Backup machen
    if Antwort = 'OKthen Ende := true;
    // Playername auslesen
    for i := 0 to Length(Antwort2) do
    begin
      if Antwort2[i] = '"then
        Inc(Count);
      if Count = 3 then
        break;
    end;
    for i := i+1 to Length(Antwort2) do
    begin
      if Antwort2[i] <> '"then
        Playername := Playername+Antwort2[i]
      else
        break;
    end;
    // Player ID auslesen
    for a := 1 to 10 do
    begin
      if Antwort2[a] = '   then
        break
      else
        Playerid := Playerid+Antwort[a];
    end;
    Liste.InsertRow(Playerid,Playername,true); // Werte schreiben
    Playername := ''; // Variablen resetten
    Playerid := '';
    Count := 0;
  until Ende; // So lange bis Ende := true ist
  Liste.DeleteRow(1); // 1. Zeile löschen
end;
Hier spare ich mir erläuterungen, weil es einfach zu viel Code ist, postet einfach eure Fragen,
ich werde sie natürlich beantworten!!!

Das Projekt geschrieben mit Delphi 2005 Architect findet ihr im Anhang...


MFG
BlackHawk2k6

[edit=Chakotay1308]Titel geändert. Mfg, Chakotay1308[/edit]
Angehängte Dateien
Dateityp: zip ts-tool_530.zip (7,8 KB, 139x aufgerufen)
if Copy_Paste.Unmöglich then
begin
Programmierer.Hilflos := true;
end;
  Mit Zitat antworten Zitat