A simple module conversion of the Blitz3d GNet server thing that is over at blitzbasic.com
'
' MonkeyGNet.monkey - Copyright İMark Sibly and EdzUp (conversion)
' Programmed by Mark Sibly, Converted to monkey by Ed 'EdzUp' Upton
'
Strict
Import brl.httprequest
Const GNET_HOST:String = "www.blitzbasic.com"
Const GNET_PORT:Int = 80
Const GNET_GET:String = "/gnet/gnet.php"
Class GNET_Server
Field game:String
Field server:String
Field ip:String
End
'the list for the servers
Global GNET_List:List<GNET_Server> = New List<GNET_Server>
Class GNetClass
Method GNET_Esc:String( t:String )
t.Replace( "&", "" )
t.Replace( "%","" )
t.Replace( "'","" )
t.Replace( String.FromChar( 34 ), "" )
t.Replace( " ", "_" )
Return t
End
Method GNET_Open:TcpStream( opt:String )
Local GNET_Stream:TcpStream = New TcpStream
If Not GNET_Stream.Connect( GNET_HOST, GNET_PORT )
Return Null
Endif
GNET_Stream.WriteLine "GET "+GNET_GET+"?opt="+opt+" HTTP/1.0"
GNET_Stream.WriteLine "HOST:"+GNET_HOST
GNET_Stream.WriteLine ""
While GNET_Stream.ReadLine()<>""
Wend
Return GNET_Stream
End
Method GNET_Exec:Int( opt:String, game:String, server:String )
Local ok:Bool = True
Local GNET_Stream:TcpStream = New TcpStream
opt += "&game="+GNET_Esc( game )
If server <>"" opt += "&server=" +GNET_Esc( server )
GNET_Stream =GNET_Open( opt )
If Not GNET_Stream Then Return 0
ok=False
If( GNET_Stream.ReadLine()="OK" ) Then ok=True
GNET_Stream.Close()
Return ok
End
Method Ping:String()
Local ip:String = ""
Local GNET_Stream:TcpStream = New TcpStream
GNET_Stream =GNET_Open( "ping" )
If Not GNET_Stream Then Return ""
ip = GNET_Stream.ReadLine()
GNET_Stream.Close()
Return ip
End
Method AddServer:Int( game:String, server:String ="" )
Return GNET_Exec( "add", game, server )
End
Method RefreshServer:Int( game:String, server:String ="" )
Return GNET_Exec( "ref", game, server )
End
Method RemoveServer:Int( game:String )
Return GNET_Exec( "rem", game, "" )
End
Method ListServers:Int( game:String ="" )
Local GNET_Stream:TcpStream = New TcpStream
Local Temp:GNET_Server = New GNET_Server 'server entry for list
Local NewGame:String
Local NewServer:String
Local NewIP:String
GNET_List.Clear() 'clear old list
GNET_Stream = GNET_Open( "list" )
If Not GNET_Stream Then Return 0 'failed
Repeat
NewGame = GNET_Stream.ReadLine()
If NewGame="" Then Exit
NewServer = GNET_Stream.ReadLine()
NewIP = GNET_Stream.ReadLine()
If game="" Or game = NewGame
Temp = New GNET_Server
Temp.game = NewGame
Temp.server = NewServer
Temp.ip = NewIP
GNET_List.AddLast( Temp )
Endif
Forever
GNET_Stream.Close() 'close it afterwards
Return 1
End
End
Global GNet:GNetClass = New GNetClass
And the test app
'Simple gnet demo
'
'Check out www.blitzbasic.com/gnet/gnet_servers.php while running!
'
'converted by Ed 'EdzUp' Upton
Import mojo
Import MonkeyGNet
Global my_game:String = "My_Game"
Global Timer:Int 'so we can see whats going on :D
Function Main:Int()
New GNetTest
Return 0
End
Class GNetTest Extends App
Method OnCreate:Int()
SetUpdateRate 30
Timer =0
Return 0
End
Method OnUpdate:Int()
If Timer=0
'ping!
Print "Ping:"+GNet.Ping()
Print ""
Endif
If Timer=25
'list active servers
'
ListServers()
Endif
If Timer=50
'add a server!
'
Print "Adding server..."
Print ""
If Not GNet.AddServer( my_game )
Print "FAILED"
Error "Failed to add server"
Endif
Endif
If Timer=75
'list active servers
'
ListServers()
Endif
If Timer=100
'refresh server!
'
Print ""
If Not GNet.RefreshServer( my_game,"New Server Name!" )
Error "Failed to refresh server"
Endif
Endif
If Timer=125
'list active servers
'
ListServers()
Endif
If Timer=150
'remove ourselves!
'
Print ""
If Not GNet.RemoveServer( my_game )
Error "Failed to remove server"
Endif
Endif
If KeyDown( KEY_ESCAPE )=1 Or Timer=200 Then Error ""
Timer+=1
Return 0
End
Method OnRender:Int()
Cls 0, 0, 0
Return 0
End
End
Function ListServers()
Local Temp:GNET_Server = New GNET_Server
If Not GNet.ListServers()
Error "Failed to list servers"
Endif
Print "Game, Server, IP"
Print "-----------------------------------"
For Temp = Eachin GNET_List
Print Temp.game+", "+Temp.server+", "+Temp.ip
Next
Print ""
End
Took me little over an hour which does show the versatility of monkey :D
|