TS2 Viewer
Verfasst: 14.02.2010 15:40
Hier mal ein sehr alter Code von mir.
Glaube so vor 3 Jahren ist der entstanden.
Damit kann man auf TS2 Server schauen und sehn wer Online ist.
Davür muss man den QPort kennen, den Server Port und die IP adresse.
Leider hat der Code noch ein paar macken bei einiegen TS Server.
Ich weis das er schlecht Programiert ist
Ist ein anfangs versuch gewesen mit PB.

Quelltext und Image Download
Glaube so vor 3 Jahren ist der entstanden.
Damit kann man auf TS2 Server schauen und sehn wer Online ist.
Davür muss man den QPort kennen, den Server Port und die IP adresse.
Leider hat der Code noch ein paar macken bei einiegen TS Server.
Ich weis das er schlecht Programiert ist

Ist ein anfangs versuch gewesen mit PB.

Code: Alles auswählen
InitNetwork()
UsePNGImageDecoder()
;{ Global
Global id.l, EOL.s = Chr(13)+Chr(10)
Global TAB.s = Chr(9)+Chr(10), UserName.l, qport.l = 51234
Global HauptRaum.l, NebenRaum.l, host.s, port.l,lastr.l
;}
;{ Declare
Declare.s send(Daten.s)
Declare.s ServerWahl()
Declare.s OpenConnection()
Declare CloseConnection()
Declare UserScann()
Declare.s Info(wert.l)
Declare.s Filter(typ.l, Daten.s, such.l,teil.l)
Declare.s Bereiniegen(Daten.s,typ.l=0)
Declare.s RaumRechte(Flag.s)
Declare RaumScann()
Declare.s PlayerRechte(userstatus.s,privileg.s,attribute.s)
Declare Usersadd(id.s,typ.l)
Declare ServerAuswahl()
Declare.l PlayerDisplayImage(attribute.s)
Declare TSFenster()
Declare UserList()
;}
;{ Server Verbindungs Daten
Structure ServerStruc
id.s
port.l
host.s
pw.s
EndStructure
;}
;{ User Infos
#user_playerid = 1
#user_channelid = 2
#user_receivedpackets = 3
#user_receivedbytes = 4
#user_sentpackets = 5
#user_sentbytes = 6
#user_paketlost = 7
#user_pingtime = 8
#user_totaltime = 9
#user_idletime = 10
#user_privileg = 11
#user_userstatus = 12
#user_attribute = 13
#user_ip = 14
#user_playername = 15
#user_loginname = 16
Structure UserStruc
playerid.s
channelid.s
receivedpackets.s
receivedbytes.s
sentpackets.s
sentbytes.s
paketlost.s
pingtime.s
totaltime.s
idletime.s
privileg.s
userstatus.s
attribute.s
ip.s
playername.s
loginname.s
EndStructure
;}
;{ Raum Infos
#raum_id=1
#raum_codec=2
#raum_parent=3
#raum_order=4
#raum_maxusers=5
#raum_name=6
#raum_flags=7
#raum_password=8
#raum_topic=9
Structure RaumStruc
raum_id.s
raum_codec.s
raum_parent.s
raum_order.s
raum_maxusers.s
raum_name.s
raum_flags.s
raum_password.s
raum_topic.s
raum_zahl.s
EndStructure
;}
;{ Server Info
#server_id=1
#server_name=2
#server_platform=3
#server_welcomemessage=4
#server_webpost_linkurl=5
#server_webpost_posturl=6
#server_password=7
#server_clan_server=8
#server_udpport=9
#server_maxusers=10
#server_allow_codec_celp51=11
#server_allow_codec_celp63=12
#server_allow_codec_gsm148=13
#server_allow_codec_gsm164=14
#server_allow_codec_windowscelp52=15
#server_allow_codec_speex2150=16
#server_allow_codec_speex3950=17
#server_allow_codec_speex5950=18
#server_allow_codec_speex8000=19
#server_allow_codec_speex11000=20
#server_allow_codec_speex15000=21
#server_allow_codec_speex18200=22
#server_allow_codec_speex24600=23
#server_packetssend=24
#server_bytessend=25
#server_packetsreceived=26
#server_bytesreceived=27
#server_uptime=28
#server_currentusers=29
#server_currentchannels=30
#server_bwinlastsec=31
#server_bwoutlastsec=32
#server_bwinlastmin=33
#server_bwoutlastmin=34
;}
;{ TS2 Server Adreasse & Port
; Test Server XCORE
;qport = Query Port, fals er nicht standart 51234 ist.
port = 8767
host = "81.169.152.93"
;}
Procedure.s send(Daten.s)
SendNetworkString(ID, Daten)
Buffer = AllocateMemory(4096)
send2 = ReceiveNetworkData(ID, Buffer, 4096)
Daten = PeekS(Buffer,send2-2)
FreeMemory(Buffer)
ProcedureReturn Daten
EndProcedure
Procedure.s ServerWahl()
Daten.s = send("sel "+Str(port)+EOL)
ProcedureReturn Daten
EndProcedure
Procedure.s OpenConnection()
ID.l = OpenNetworkConnection(host, qport)
If id
Buffer = AllocateMemory(4096)
send2.l = ReceiveNetworkData(id, Buffer, 4096)
temp2.s = PeekS(Buffer,send2-2)
FreeMemory(Buffer)
EndIf
ProcedureReturn temp2
EndProcedure
Procedure CloseConnection()
If id
SendNetworkString(ID, "quit"+EOL)
CloseNetworkConnection(ID)
EndIf
EndProcedure
Procedure.s Info(wert.l)
Daten.s = send("si"+EOL)
Daten.s = StringField(Daten, wert, EOL)
Daten.s = StringField(Daten, 2, "=")
ProcedureReturn Daten
EndProcedure
Procedure.s Filter(typ.l, Daten.s, such.l,teil.l)
Daten.s = StringField(Daten, teil, EOL)
If typ = 0
Daten = StringField(Daten, such, TAB)
Else
Daten = StringField(Daten, such, EOL)
EndIf
ProcedureReturn Daten
EndProcedure
Procedure.s Bereiniegen(Daten.s,typ.l=0)
If typ = 0
Daten = StringField(Daten, 2, Chr(34))
ElseIf typ = 1
Daten = StringField(Daten, 2, Chr(10))
EndIf
ProcedureReturn Daten
EndProcedure
Procedure.s RaumRechte(Flag.s)
Flags = Val(Flag)
If (Flags & 1) = 1 : Daten.s = "U" : Else : Daten = "R" : EndIf
If (Flags & 2) = 2 : Daten = Daten + "M" : EndIf
If (Flags & 4) = 4 : Daten = Daten + "P" : EndIf
If (Flags & 8) = 8 : Daten = Daten + "S" : EndIf
If (Flags & 16) = 16 : Daten = Daten + "D" : EndIf
ProcedureReturn "("+Daten+")"
EndProcedure
Procedure.s PlayerRechte(userstatus.s,privileg.s,attribute.s)
If UserName > -1
userstatus2 = Val(userstatus) : privilegs = Val(privileg) : attributes = Val(attribute)
If (userstatus2 & 4) = 4 : Daten.s = "R" : Else : Daten = "U" : EndIf
If (userstatus2 & 1) = 1 : Daten = Daten + " SA" : EndIf
If (privilegs & 1) = 1 : Daten = Daten + " CA" : EndIf
If (privilegs & 8) = 8 : Daten = Daten + " AO" : EndIf
If (privilegs & 16) = 16 : Daten = Daten + " AV" : EndIf
If (privilegs & 2) = 2 : Daten = Daten + " O" : EndIf
If (privilegs & 4) = 4 : Daten = Daten + " V" : EndIf
If (attributes & 64) = 64 : Daten = Daten + " REC" : EndIf
Daten = "("+Daten+")"
Else
Daten = ""
EndIf
ProcedureReturn Daten
EndProcedure
Procedure.l PlayerDisplayImage(attribute.s)
If UserName > -1
attributes = Val(attribute)
If (attributes & 8) = 8 : Daten = CatchImage(0, ?away)
ElseIf (attributes & 32) = 32 : Daten = CatchImage(0, ?mutespeakers)
ElseIf (attributes & 16) = 16 : Daten = CatchImage(0, ?mutemicrophone)
ElseIf (attributes & 1) = 1 : Daten = CatchImage(0, ?channelcommander)
Else : Daten = CatchImage(0, ?normal) : EndIf
Else
Daten = 0
EndIf
ProcedureReturn Daten
EndProcedure
Procedure UserScann()
Daten.s = send("pl"+EOL)
UserName.l = CountString(Daten, EOL) - 2
If UserName > -1
Global Dim Users.UserStruc(UserName)
For t = 0 To UserName
Users(t)\channelid = Filter(0, Daten, #user_channelid, t+2)
Users(t)\playername = Bereiniegen(Filter(0, Daten, #user_playername, t+2))
Users(t)\privileg = Filter(0, Daten, #user_privileg, t+2)
Users(t)\userstatus = Filter(0, Daten, #user_userstatus, t+2)
Users(t)\attribute = Filter(0, Daten, #user_attribute, t+2)
Next
SortStructuredArray(Users(), 0, OffsetOf(UserStruc\playername), #PB_Sort_String)
Else
Global Dim Users.UserStruc(0)
Users(0)\playername = "Kein User Online"
EndIf
EndProcedure
Procedure Usersadd(id.s,typ.l)
For t = 0 To UserName
If Users(t)\channelid = id
Daten.s = PlayerRechte(Users(t)\userstatus,Users(t)\privileg,Users(t)\attribute)
AddGadgetItem (0, -1, Users(t)\playername + " " + Daten, PlayerDisplayImage(Users(t)\attribute), typ)
EndIf
Next
EndProcedure
Procedure UserList()
Daten.s = Info(#server_name) + " Ts Server. Es sind "+Info(#server_currentusers)+"/"
Daten = Daten + Info(#server_maxusers)+" User on."
SetWindowTitle(0, Daten)
SetGadgetItemText(2, -1, Info(#server_currentusers) + " User Online:",0)
If UserName > -1
For t = 0 To UserName
Daten.s = PlayerRechte(Users(t)\userstatus,Users(t)\privileg,Users(t)\attribute)
AddGadgetItem (2, -1, Users(t)\playername + " " + Daten, PlayerDisplayImage(Users(t)\attribute), 0)
If FindString(Daten,"SA",1) > 0
SetGadgetItemColor(2, t, #PB_Gadget_FrontColor, $0000FF)
ElseIf FindString(Daten,"U",1) > 0
SetGadgetItemColor(2, t, #PB_Gadget_FrontColor, $000000)
Else
SetGadgetItemColor(2, t, #PB_Gadget_FrontColor, $FF0000)
EndIf
Next
Else
Daten.s = PlayerRechte(Users(0)\userstatus,Users(0)\privileg,Users(0)\attribute)
AddGadgetItem (1, -1, Users(0)\playername + " " + Daten, 0, 0)
EndIf
EndProcedure
Procedure RaumScann()
Daten.s = send("cl"+EOL)
teil.l = CountString(Daten, EOL)
HauptRaum = 0 : NebenRaum = 0 : For t = 2 To teil : If Filter(0, Daten.s, #raum_parent, t) = "-1"
HauptRaum = HauptRaum + 1 : Else : NebenRaum = NebenRaum + 1 : EndIf : Next
NebenRaum = NebenRaum - 1 : hr = 0 : nr = 0 : Global Dim HRaum.RaumStruc(HauptRaum)
If NebenRaum > -1
Global Dim NRaum.RaumStruc(NebenRaum)
For t = 2 To teil
If Filter(0, Daten.s, #raum_parent, t) > "-1"
NRaum(nr)\raum_id=Bereiniegen(Filter(0, Daten.s, #raum_id, t),1)
NRaum(nr)\raum_codec=Filter(0, Daten.s, #raum_codec, t)
NRaum(nr)\raum_parent=Filter(0, Daten.s, #raum_parent, t)
NRaum(nr)\raum_order=Filter(0, Daten.s, #raum_order, t)
NRaum(nr)\raum_maxusers=Filter(0, Daten.s, #raum_maxusers, t)
NRaum(nr)\raum_name=Bereiniegen(Filter(0, Daten.s, #raum_name, t))
NRaum(nr)\raum_flags=Filter(0, Daten.s, #raum_flags, t)
NRaum(nr)\raum_password=Filter(0, Daten.s, #raum_password, t)
NRaum(nr)\raum_topic=Filter(0, Daten.s, #raum_topic, t)
NRaum(nr)\raum_zahl = "0"
nr = nr + 1
EndIf
Next
EndIf
For t = 2 To teil
If Filter(0, Daten.s, #raum_parent, t) = "-1"
HRaum(hr)\raum_id=Bereiniegen(Filter(0, Daten.s, #raum_id, t),1)
HRaum(hr)\raum_codec=Filter(0, Daten.s, #raum_codec, t)
HRaum(hr)\raum_parent=Filter(0, Daten.s, #raum_parent, t)
HRaum(hr)\raum_order=Filter(0, Daten.s, #raum_order, t)
HRaum(hr)\raum_maxusers=Filter(0, Daten.s, #raum_maxusers, t)
HRaum(hr)\raum_name=Bereiniegen(Filter(0, Daten.s, #raum_name, t))
HRaum(hr)\raum_flags=Filter(0, Daten.s, #raum_flags, t)
HRaum(hr)\raum_password=Filter(0, Daten.s, #raum_password, t)
HRaum(hr)\raum_topic=Filter(0, Daten.s, #raum_topic, t)
HRaum(hr)\raum_zahl = Str(hr+1)
hr = hr + 1
EndIf
Next
SortStructuredArray(NRaum(), 0, OffsetOf(RaumStruc\raum_name), #PB_Sort_String)
SortStructuredArray(HRaum(), 0, OffsetOf(RaumStruc\raum_order), #PB_Sort_String)
EndProcedure
Procedure Usersadd2(raum.s)
UUser.l = 0
For t = 0 To HauptRaum
If HRaum(t)\raum_name + " " + RaumRechte(HRaum(t)\raum_flags) = raum
raum_id.s = HRaum(t)\raum_id : ok = 1 : Break
EndIf
Next
If ok = 0
For t = 0 To NebenRaum
If NRaum(t)\raum_name = raum
raum_id.s = NRaum(t)\raum_id : ok = 1 : Break
EndIf
Next
EndIf
If ok = 1 : For t = 0 To UserName
If Users(t)\channelid = raum_id
Daten.s = PlayerRechte(Users(t)\userstatus,Users(t)\privileg,Users(t)\attribute)
AddGadgetItem (1, -1, Users(t)\playername + " " + Daten, PlayerDisplayImage(Users(t)\attribute), typ)
UUser = UUser + 1
EndIf
Next
SetGadgetItemText(1, -1, Str(UUser) + " User Online:",0)
EndIf
EndProcedure
Procedure TSFenster()
Antwort.s = OpenConnection()
If Antwort <> "[TS]"
MessageRequester("Error", "TS Server Offline oder Port "+Str(qport)+" nicht offen!"+Chr(10)+Chr(10)+Antwort)
CloseConnection()
End
EndIf
Antwort = ServerWahl()
If Antwort <> "OK"
MessageRequester("Error", "Es ist ein Fehler bei der Server Wahl aufgetreten!"+Chr(10)+Chr(10)+Antwort)
CloseConnection()
End
EndIf
UserScann()
RaumScann()
OpenWindow(0, 0, 0, 690, 485, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(0, 10, 10, 250, 460)
ListIconGadget(1, 270, 10, 200, 420, "0 User im Raum", 195)
ListIconGadget(2, 480, 10, 200, 420, "", 195)
ButtonGadget(4, 580, 450, 80, 20, "Ende")
For t = 0 To HauptRaum
AddGadgetItem (0, -1, HRaum(t)\raum_name + " " + RaumRechte(HRaum(t)\raum_flags), CatchImage(0, ?channel), 0)
;Usersadd(HRaum(t)\raum_id,1)
If NebenRaum > -1
For y = 0 To NebenRaum
If NRaum(y)\raum_parent = HRaum(t)\raum_zahl
AddGadgetItem (0, -1, NRaum(y)\raum_name, CatchImage(0, ?channel), 1)
;Usersadd(NRaum(y)\raum_id,2)
EndIf
Next
EndIf
Next
UserList()
EndProcedure
;{ Haupt Schleiffe
TSFenster()
Repeat
Event = WindowEvent()
If Event = #PB_Event_Gadget
GadgetID = EventGadget()
If GadgetID = 4
Break
ElseIf GadgetID = 0
ClearGadgetItems(1)
Usersadd2(GetGadgetText(0))
lastr = GetGadgetState(0)
EndIf
EndIf
If Timer = 6000
ClearGadgetItems(1)
ClearGadgetItems(2)
UserScann()
UserList()
If lastr > -1
Usersadd2(GetGadgetItemText(0, lastr, 0))
EndIf
Timer = 0
Else
Timer+ 1
EndIf
Delay(1)
Until Event = #PB_Event_CloseWindow
CloseConnection()
CloseWindow(0)
;}
;{ DataSection
DataSection
away:
IncludeBinary "player_away.png"
mutespeakers:
IncludeBinary "player_mutespeakers.png"
mutemicrophone:
IncludeBinary "player_mutemicrophone.png"
channelcommander:
IncludeBinary "player_channelcommander.png"
normal:
IncludeBinary "player_normal.png"
channel:
IncludeBinary "channel.png"
EndDataSection
;}