MonkeyGNet

Monkey Forums/Monkey Code/MonkeyGNet

EdzUp(Posted 2013) [#1]
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


DiabloV(Posted 2013) [#2]
line : Local GNET_Stream:TcpStream = New TcpStream

get an error : type TCpstream not found


EdzUp(Posted 2013) [#3]
Weird will have a look asap, it used to compile perfectly under v6x