Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Internet / LAN / ASP.NET (https://www.delphipraxis.net/23-library-internet-lan-asp-net/)
-   -   Delphi TeamSpeak-Playerliste über Telnet auslesen (https://www.delphipraxis.net/72485-teamspeak-playerliste-ueber-telnet-auslesen.html)

BlackHawk2006 1. Jul 2006 11:21


TeamSpeak-Playerliste über Telnet auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
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 = 'OK' then 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]


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:39 Uhr.

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