spot on! Thanks again!:O)
Code archives/Networking/gnet conversion
This code has been declared by its author to be Public Domain code.
Download source code
| er yup |
Type networkgnet
Const host:String = "www.blitzbasic.com"
Const hostget:String = "/gnet/gnet.php"
Const port:Int = 80
Global socket:tsocket
Global stream:tsocketstream
Function gnet_esc:String(t:String)
t = Replace(t,"&","")
t = Replace(t,"%","")
t = Replace(t,"'","")
t = Replace(t,Chr(34),"")
t = Replace(t," ","_")
Return t
End Function
Function gnet_open:tsocketstream(opt:String)
networkgnet.socket = CreateTCPSocket()
ConnectSocket(networkgnet.socket,HostIp(networkgnet.host),networkgnet.port)
networkgnet.stream = CreateSocketStream(networkgnet.socket,True)
WriteLine networkgnet.stream,"GET "+networkgnet.hostget+"?opt="+opt+" HTTP/1.0"
WriteLine networkgnet.stream,"HOST: "+networkgnet.host
WriteLine networkgnet.stream,""
FlushStream(networkgnet.stream)
While ReadLine(networkgnet.stream) <> ""
Wend
Return networkgnet.stream
End Function
Function gnet_exec(opt:String,game:String,server:String)
opt = opt+"&game="+networkgnet.gnet_esc(game)
If server <> "" opt = opt+"&server="+networkgnet.gnet_esc(server)
Local t:tsocketstream = networkgnet.gnet_open(opt)
If Not t Then Return False
Local ok = False
If ReadLine(t) = "OK" Then ok = True
CloseSocket(networkgnet.socket)
Return ok
End Function
Function gnet_ping:String()
Local t:tsocketstream = networkgnet.gnet_open("ping")
If Not t Then Return False
Local ip:String = ReadLine(t)
CloseSocket(networkgnet.socket)
Return ip
End Function
Function gnet_addserver(game:String,server:String="")
Return networkgnet.gnet_exec("add",game,server)
End Function
Function gnet_refreshserver(game:String,server:String="")
Return networkgnet.gnet_exec("ref",game,server)
End Function
Function gnet_removeserver(game:String)
Return networkgnet.gnet_exec("rem",game,"")
End Function
Function gnet_listservers(game:String="")
For Local n:networkgnet_server = EachIn networkserverlist
networkserverlist.remove(n)
n = Null
Next
FlushMem
Local t:tsocketstream = networkgnet.gnet_open("list")
If Not t Then Return False
Local t_game:String
Local t_server:String
Local t_ip:String
Repeat
t_game = ReadLine(t)
If t_game = "" Then Exit
t_server = ReadLine(t)
t_ip = ReadLine(t)
If game = "" Or game = t_game
Local p:networkgnet_server = New networkgnet_server
p.game = t_game
p.server = t_server
p.ip = t_ip
networkserverlist.addfirst(p)
EndIf
Forever
CloseSocket(networkgnet.socket)
Return 1
End Function
End Type
Global networkserverlist:TList = New TList
Type networkgnet_server
Field game:String
Field server:String
Field ip:String
End Type |
Comments
I fixed some problems (warning about header and problems recongizing games).
Heres my fixed gnet_listservers function:
Except for that, good job :D
Heres my fixed gnet_listservers function:
Function gnet_listservers:Int(game:String="") For Local n:TNetworkGNetServer=EachIn GNetServerList GNetServerList.remove(n) n = Null Next Local t:tsocketstream = TNetworkGNet.gnet_open("list") If Not t Then Return False Local t_game:String Local t_server:String Local t_ip:String Repeat t_game = ReadLine(t) If Left(t_game,2)<>"<b" And t_game<>"" t_server = ReadLine(t) t_ip = ReadLine(t) If game = "" Or gnet_esc(game) = t_game Local p:TNetworkGNetServer=New TNetworkGNetServer p.game = t_game p.server = t_server p.ip = t_ip GNetServerList.addfirst(p) EndIf EndIf Until Eof(t) CloseSocket(TNetworkGNet.socket) Return 1 End Function
Except for that, good job :D