123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- Namespace httprequest
- #Import "<jni>"
- #Import "<std>"
- #Import "<mojo>"
- #Import "<sdl2>"
- #Import "native/Monkey2HttpRequest.java"
- #Import "native/httprequest.cpp"
- #Import "native/httprequest.h"
- Using jni..
- Using std..
- Using mojo..
- Using sdl2..
- Extern Private
- Global onReadyStateChanged:Void(jobject,Int)="bbHttpRequest::onReadyStateChanged"
- Global onResponseReceived:Void(jobject,String,Int,Int)="bbHttpRequest::onResponseReceived"
- private
- Function OnMainFiber( func:Void() )
-
- If Fiber.Current()=Fiber.Main() func() Else App.Idle+=func
-
- End
- Public
- Enum ReadyState
-
- Unsent=0
- Opened=1
- HeadersReceived=2
- Loading=3
- Done=4
- Error=5
- End
- Class HttpRequest
-
- Field ReadyStateChanged:Void()
-
- Method New()
- Local env:=Android_JNI_GetEnv()
-
- Init( env )
-
- Local obj:=env.AllocObject( _class )
-
- _obj=env.NewGlobalRef( obj )
-
- Insert()
- End
-
- Method New( req:String,url:String,readyStateChanged:Void()=Null )
- Self.New()
-
- ReadyStateChanged=readyStateChanged
-
- Open( req,url )
- End
-
- Property ReadyState:ReadyState()
-
- Return Cast<ReadyState>( _readyState )
- End
-
- Property ResponseText:String()
-
- Return _response
- End
-
- Property Status:Int()
-
- Return _status
- End
-
- Method Discard()
-
- Remove()
-
- Local env:=Android_JNI_GetEnv()
-
- env.DeleteGlobalRef( _obj )
-
- End
-
- Method Open( req:String,url:String )
-
- OnMainFiber( Lambda()
-
- Local env:=Android_JNI_GetEnv()
-
- env.CallVoidMethod( _obj,_open,New Variant[]( req,url ) )
- End )
- End
-
- Method SetHeader( header:String,value:String )
-
- OnMainFiber( Lambda()
- Local env:=Android_JNI_GetEnv()
-
- env.CallVoidMethod( _obj,_setHeader,New Variant[]( header,value ) )
- End )
- End
-
- Method Send()
-
- Send( "" )
- End
-
- Method Send( text:String )
-
- OnMainFiber( Lambda()
- Local env:=Android_JNI_GetEnv()
-
- env.CallVoidMethod( _obj,_send,New Variant[]( text ) )
-
- End )
-
- End
-
- Private
-
- Global _list:HttpRequest
-
- Field _succ:HttpRequest
- Field _obj:jobject
- Field _readyState:Int
- Field _response:String
- Field _status:int
-
- Method New( peer:jobject )
- _obj=peer
- End
-
- Method Insert()
- _succ=_list
- _list=Self
- End
-
- Method Remove()
- local inst:=_list,pred:HttpRequest=Null
- While inst
- If inst=Self
- If pred
- pred._succ=_succ
- Else
- _list=_succ
- Endif
- Return
- Endif
- pred=inst
- inst=inst._succ
- Wend
- End
-
- Global _class:jclass
- Global _open:jmethodID
- Global _setHeader:jmethodID
- Global _send:jmethodID
-
- Function OnReadyStateChanged( obj:jobject,state:Int )
-
- Local env:=Android_JNI_GetEnv()
-
- Local inst:=_list
-
- While inst
-
- If env.IsSameObject( obj,inst._obj )
-
- inst._readyState=state
-
- inst.ReadyStateChanged()
-
- Return
- Endif
-
- inst=inst._succ
- Wend
-
- End
-
- Function OnResponseReceived( obj:jobject,response:String,status:Int,state:Int )
- Local env:=Android_JNI_GetEnv()
-
- Local inst:=_list
-
- While inst
-
- If env.IsSameObject( obj,inst._obj )
-
- inst._response=response
-
- inst._status=status
-
- inst._readyState=state
-
- inst.ReadyStateChanged()
-
- Endif
- inst=inst._succ
- wend
- End
-
- Function Init( env:JNIEnv )
- If _class Return
-
- _class=env.FindClass( "com/monkey2/lib/Monkey2HttpRequest" )
- If Not _class RuntimeError( "Can't find com.monkey2.lib.Monkey2HttpRequest class" )
-
- _open=env.GetMethodID( _class,"open","(Ljava/lang/String;Ljava/lang/String;)V" )
-
- _setHeader=env.GetMethodID( _class,"setHeader","(Ljava/lang/String;Ljava/lang/String;)V" )
-
- _send=env.GetMethodID( _class,"send","(Ljava/lang/String;)V" )
-
- onReadyStateChanged=OnReadyStateChanged
-
- onResponseReceived=OnResponseReceived
- End
-
- End
-
|