Procházet zdrojové kódy

WIP httprequest tweaks.

Mark Sibly před 7 roky
rodič
revize
4528606cf9

binární
modules/httprequest/bin/wget.exe


+ 59 - 0
modules/httprequest/httprequest_desktop.monkey2

@@ -0,0 +1,59 @@
+
+Namespace httprequest
+
+Function Hello()
+End
+
+Class HttpRequest Extends HttpRequestBase
+	
+	Protected
+
+	Method OnSetHeader( header:String,value:String ) Override
+	End
+	
+	Method OnSend( text:String ) Override
+		
+		Global id:=0
+		
+		id+=1
+		
+		Local tmp:=GetEnv( "TMP" )+"\wget-"+id+".txt"
+		
+	#if __TARGET__="macos"
+	
+		Local cmd:="curl -s -m "+timeout+" -o ~q"+tmp+"~q ~q"+url+"~q"
+		
+	#else
+		Local post_data:=_method="POST" ? " -post-data=~q"+text+"~q" Else ""
+		Local cmd:="wget -q -T "+_timeout+" -O ~q"+tmp+"~q --method="+_method+post_data+" ~q"+_url+"~q"
+	#endif
+		
+		Local process:=New Process
+		
+		process.Finished=Lambda()
+		
+			If process.ExitCode=0
+				
+				_status=200
+				
+				_response=LoadString( tmp )
+				
+				SetReadyState( ReadyState.Done )
+				
+			Else
+				
+				_status=404
+				
+				SetReadyState( ReadyState.Error )
+				
+			Endif
+			
+			DeleteFile( tmp )
+		End
+		
+		SetReadyState( ReadyState.Loading )
+		
+		process.Start( cmd )
+		
+	End
+End

+ 86 - 0
modules/httprequest/httprequest_emscripten.monkey2

@@ -0,0 +1,86 @@
+
+Namespace httprequest
+
+#Import "<emscripten>"
+
+Using emscripten..
+
+Class HttpRequest Extends HttpRequestBase
+	
+	Protected
+	
+	Method OnSetHeader( header:String,value:String ) Override
+	End
+	
+	Method OnSend( text:String ) Override
+		
+		Local attr:emscripten_fetch_attr_t
+		
+		emscripten_fetch_attr_init( Varptr attr )
+		
+		_method.ToCString( attr.requestMethod,4 )
+		attr.attributes=EMSCRIPTEN_FETCH_LOAD_TO_MEMORY
+		attr.onsuccess=FetchSuccess
+		attr.onerror=FetchError
+		
+		SetReadyState( ReadyState.Loading )
+		
+		_fetch=emscripten_fetch( Varptr attr,_url )
+		
+		_sending.Add( Self )
+	End
+	
+	Private
+	
+	Field _fetch:emscripten_fetch_t Ptr
+	
+	Global _sending:=New Stack<HttpRequest>
+	
+	Method Close()
+		
+		emscripten_fetch_close( _fetch )
+		
+		_sending.Remove( Self )
+	End
+	
+	Method Success()
+		
+		_response=String.FromCString( _fetch->data,_fetch->numBytes )
+		
+		_status=_fetch->status
+		
+		SetReadyState( ReadyState.Done )
+		
+		Close()
+	End
+	
+	Method Error()
+		
+		_status=_fetch->status
+		
+		SetReadyState( ReadyState.Error )
+		
+		Close()
+	End
+	
+	Function FindRequest:HttpRequest( fetch:emscripten_fetch_t Ptr )
+
+		For Local request:=Eachin _sending
+			If request._fetch=fetch Return request
+		Next
+		
+		Return Null
+	End
+	
+	Function FetchSuccess( fetch:emscripten_fetch_t Ptr )
+		
+		FindRequest( fetch )?.Success()
+	End
+	
+	Function FetchError( fetch:emscripten_fetch_t Ptr )
+
+		FindRequest( fetch )?.Error()
+	End
+		
+	
+End