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