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
| ||
| spot on! Thanks again!:O) |
| ||
| I fixed some problems (warning about header and problems recongizing games). Heres my fixed gnet_listservers function: Except for that, good job :D |
| ||
Regular K's function is better but he changed the variable names so here's the faithful update to "gnet_listservers". Function gnet_listservers:Int(game:String="")
For Local n:networkgnet_server=EachIn networkserverlist
networkserverlist.remove(n)
n = Null
Next
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 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:networkgnet_server=New networkgnet_server
p.game = t_game
p.server = t_server
p.ip = t_ip
networkserverlist.addfirst(p)
EndIf
EndIf
Until Eof(t)
CloseSocket(networkgnet.socket)
Return 1
End Function |
| ||
And here's a test based on the b3d gnet_v1 demo. This includes a working ping. See here for gnet_v1 demo and doc.' gnet conversion test SuperStrict Import "gnet conversion.bmx" Global gnet:networkgnet = New networkgnet Global gnet_server:networkgnet_server = Null Local my_game$="my_gnet_game",my_server$="my_gnet_server" Local p$=gnet.gnet_ping() Print "~nPing:"+p gnet.gnet_listservers() print_servers() Print "~nAdding server..." gnet.gnet_addserver( my_game$ ) gnet.gnet_listservers() print_servers() Input "~nHit return to refresh server..." gnet.gnet_refreshserver( my_game$,my_server$ ) gnet.gnet_listservers( my_game$ ) 'list just my game print_servers() Input "~nHit return to remove server and exit..." gnet.gnet_removeserver( my_game$ ) gnet.gnet_listservers() print_servers() Function print_servers() Print "" For gnet_server:networkgnet_server = EachIn networkserverlist If gnet_server<>Null Print "Game:"+gnet_server.game+" Server:"+gnet_server.server+" IP:"+gnet_server.ip EndIf Next EndFunction |
Code Archives Forum