[bmx] gnet conversion by boomboommax [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:43

Previous topic - Next topic

BlitzBot

Title : gnet conversion
Author : boomboommax
Posted : 1+ years ago

Description : er yup

Code :
Code (blitzmax) Select
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 :


necky(Posted 1+ years ago)

 spot on! Thanks again!:O)


Regular K(Posted 1+ years ago)

 I fixed some problems (warning about header and problems recongizing games).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


markcw(Posted 1+ years ago)

 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



markcw(Posted 1+ years ago)

 And here's a test based on the b3d gnet_v1 demo. This includes a working ping. See <a href="http://www.blitzmax.com/toolbox/toolbox.php?tool=61" target="_blank">here</a> 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