AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke teamspeak server online benutzer ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

teamspeak server online benutzer ermitteln

Ein Thema von lbccaleb · begonnen am 14. Nov 2007 · letzter Beitrag vom 17. Nov 2007
 
cyxcyx

Registriert seit: 16. Nov 2007
6 Beiträge
 
#6

Re: teamspeak server online benutzer ermitteln

  Alt 16. Nov 2007, 16:56
Sers @ all!

Es wird benötigt:
  • 1x TIdTCPClient
  • 1x TListBox
  • 1x TButton


Delphi-Code + erklärung:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  PlayerID, PlayerName: String;
  EOfRead: Boolean; //End Of Read
  aLine: String;
  I: Integer;
begin
  with IdTCPClient1 do
  begin
    Host := '127.0.0.1'; //Server IP-Adresse
    Port := 51234; //Server TCP-Port
    Connect(); //Verbindung herstellen

    if (Connected) then //Verbindung erfolgreich aufgebaut, dann...
    begin
      aLine := ReadLn; //1. Zeile aus dem Buffer holen
      if not (aLine = '[TS]') then //Wenn die erste Zeile nicht "[TS]" ist dann
      begin
        Disconnect(); //Disconnecten vom Server
        MessageDlg('Kein TeamSpeak 2 Server', //Fehler meldung zeigen
                   mtError,[mbOK],0);
        Exit; //Procedure beenden
      end;

      WriteLn('SEL 8767'); //Server auswählen, "SEL " + UDP Port
      aLine := ReadLn; //Zeile aus dem Buffer holen
      if not (aLine = 'OK') then //Wenn Server nicht ausgwählt werden kann, dann...
      begin
        Disconnect(); //Disconnecten vom Server
        MessageDlg('UDP-Port Falsch!', //Fehler meldung zeigen
                   mtError,[mbOK],0);
        Exit; //Procedure beenden
      end;

      WriteLn('PL'); //Player Liste anfordern!
      EOfRead := False; //Ende der Repeat schleife = False
      repeat
        aLine := ReadLn; //Nächste Zeile aus dem Buffer
        if (aLine[1] +
            aLine[2] +
            aLine[3] +
            aLine[4] = 'p_id') then aLine := ReadLn; //Wenn die erste Zeile p_id ist dann
                                                                       //MUSS nochmal eine Zeile ausgelesen werden!!

        if (UpperCase(aLine[1] +
                      aLine[2] +
                      aLine[3] +
                      aLine[4] +
                      aLine[5]) = 'ERROR') or (aLine = 'OK') then
                      EOfRead := True // Wenn niemand auf dem Server ist wird direkt nach p_id,
                                                                       //"error" oder "OK" ausgegeben, damit die App nicht abstürzt MUSS dies auch sein!
        else begin
          PlayerID := aLine; //Sollte einleuchtend sein
          Delete(PlayerID,Pos(#9,PlayerID),Length(PlayerID)); //Die "ID" vom rest trennen

          PlayerName := aLine;
          for I := 1 to 3 do Delete(PlayerName,1,Pos('"',PlayerName)); //Dies muss 3x durch geführt werden weil als erstes die IP ausgegeben wird, dann erst der Name!
          Delete(PlayerName,Pos('"',PlayerName),Length(PlayerName)); //Ab dem nächsten " den rest löschen!

          ListBox1.Items.Add(PlayerID + ' ' + PlayerName); //ID und Name in die ListBox eintragen!
        end;
        Application.ProcessMessages; //Alle nachrichten verarbeiten
      until (EOfRead) or (ReadLnTimedOut); //Auf EOfRead = True oder ReadLnTimedOut = True warten
    end;
    Disconnect(); //Verbindung Trennen
  end;
end;
Mit freundlichen Grüßen, Andre
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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