package Ġnet . rx aa . http Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġnet . rx aa . util . Exception Code Ċ import Ġnet . rx aa . util . Json Ċ import Ġnet . rx aa . util . Msg Exception Ċ import Ġnet . rx aa . util . df Ċ import Ġnet . rx aa . ext .* Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executors Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . resume With Exception Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ Ċ open Ġclass ĠHttp Req < T Ġ: ĠAny >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ çº¿ç¨ĭ æ±ł ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġpool Http Ġ= ĠExec utors . new Fixed ThreadPool ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ä¸Ĭä¼ł çº¿ç¨ĭ æ±ł ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġpool Upload Ġ= ĠExec utors . new Fixed ThreadPool ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġhttp æĹ¥å¿Ĺ çĽ®å½ķ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġget Http LogFile Ġ= Ġ{ ĠFile Ext . getFile Dir () Ġ+ Ġ"/ http . txt " Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġget Http Error LogFile Ġ= Ġ{ ĠFile Ext . getFile Dir () Ġ+ Ġ"/ http Error . txt " Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar ĠCharset Ġ= Ġ" UTF - 8 " ĊĠĠĠ Ġvar Ġurl Ġ= Ġ""; ĊĠĠĠ Ġvar Ġis Post Ġ= Ġtrue ; ĊĊĠĠĠ Ġfun Ġis GET (): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġis Post Ġ= Ġfalse ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhttp è¯·æ±Ĥ åħ¥ åıĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpar as Ġ= ĠHashMap < String , ĠAny >(); ĊĊĠĠĠ Ġ// æī©å±ķ åıĤæķ° ĊĠĠĠ Ġvar Ġext Par as Ġ= Ġ""; ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĩį è½½ - åı· ï¼Į èµĭåĢ¼ ç»Ļ par as ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġ< B Ġ: ĠAny > ĠString . minus ( that : ĠB ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpar as [ this ] Ġ= Ġthat ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġvar Ġfail Msg Ġ= Ġtrue ; ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ éļĲèĹı éĶĻè¯¯ æıĲç¤º æ¶Īæģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhide Msg (): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfail Msg Ġ= Ġfalse ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Msg (): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfail Msg Ġ= Ġtrue ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġvar Ġshow Prog Ġ= Ġtrue ; ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ éļĲèĹı è¿Ľ åº¦ æĿ¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhide Prog (): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Prog Ġ= Ġfalse ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Prog (): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Prog Ġ= Ġtrue ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġprog Text Ġ= Ġ" åĬłè½½ ä¸Ń ï¼Į è¯· ç¨ į åĢĻ ... "; ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® è¿Ľ åº¦ æĿ¡ æĸĩæľ¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprog Text ( text : ĠString ): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġprog Text Ġ= Ġtext ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġact i : ĠActivity ? Ġ= Ġnull ; ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ³èģĶ ä¸Ģä¸ª activity , å½ĵ activity åħ³éĹŃ æĹ¶ , åıĸæ¶Ī ä¼łè¾ĵ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġactivity ( act : ĠContext ?): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( act Ġis ĠActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġact i Ġ= Ġact ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġvar Ġis Cancel Ġ= Ġfalse ; ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĸæ¶Ī ä¼łè¾ĵ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Cancel Ġ= Ġtrue ; ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġvar Ġprog Recv : Ġ( transfer Size : ĠLong , ĠfileSize : ĠLong ) Ġ-> ĠUnit Ġ= Ġ{ Ġt , Ġf Ġ-> Ġ}; ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸ĭè½½ è¿Ľ åº¦ åĽŀè°ĥ ( æŃ¤ åĽŀè°ĥ åľ¨ çº¿ç¨ĭ æ±ł ä¸Ń è¿Ĳè¡Į , æľª è½¬ åĪ° ä¸» çº¿ç¨ĭ ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġprogress Recv ( func : Ġ( transfer Size : ĠLong , ĠfileSize : ĠLong ) Ġ-> ĠUnit ): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġprog Recv Ġ= Ġfunc ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġprog Send : Ġ( transfer Size : ĠLong , ĠfileSize : ĠLong ) Ġ-> ĠUnit Ġ= Ġ{ Ġt , Ġf Ġ-> Ġ}; ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ĭä¼ł è¿Ľ åº¦ åĽŀè°ĥ ( æŃ¤ åĽŀè°ĥ åľ¨ çº¿ç¨ĭ æ±ł ä¸Ń è¿Ĳè¡Į , æľª è½¬ åĪ° ä¸» çº¿ç¨ĭ ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġprogress Send ( func : Ġ( transfer Size : ĠLong , ĠfileSize : ĠLong ) Ġ-> ĠUnit ): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġprog Send Ġ= Ġfunc ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ĭä¼ł è¿Ľ åº¦ å¤ĦçĲĨ åĩ½æķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġprogress Send Proc Ġ= Ġfun ( transfer Size : ĠLong , ĠfileSize : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprog Send ( transfer Size , ĠfileSize ); ĊĠĠĠĠĠĠĠ Ġis Cancel () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġis Cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġact i . notNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Finish ing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMsg Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åıĸæ¶Ī ä¼łè¾ĵ , activity Ġclose ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException Code . activity Closed . ordinal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMsg Exception (" åıĸæ¶Ī ä¼łè¾ĵ ", ĠException Code . cancel Http . ordinal , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è§£æŀĲ http è¿ĶåĽŀ åĨħå®¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġparse Resp Ġ= Ġfun ( resp : ĠString , Ġcode : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠMsg Exception (" æľª å®ŀçİ° parse Resp ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġpost åĨħå®¹ æł¼å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġvar Ġpost Content Ġ= Ġ{ Ġhttp : ĠHttp Ex Ġ-> ĊĠĠĠĠĠĠĠ Ġhttp . set ContentType JSON () ĊĠĠĠĠĠĠĠ ĠJson . obj ToJson ( par as ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMultip art åĨħå®¹ åĩ½æķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġpost Multipart Func : Ġ(( form : ĠMultip art Form ) Ġ-> ĠUnit )? Ġ= Ġnull ; ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ä¸Ĭä¼ł Multipart çļĦåĨħå®¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġpost Multipart ( func : ĠMultip art Form .( form : ĠHttp Req < T >) Ġ-> ĠUnit ): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġpost Multipart Func Ġ= Ġ{ Ġit . func ( this ) Ġ}; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// http è¯·æ±Ĥ åıĤæķ° ĊĠĠĠ Ġinternal Ġvar Ġon New Http Ex Ġ= Ġ{ ĠHttp Ex ( url ). set Accept GZIP (). set KeepAlive () Ġ} ĊĊĠĠĠ Ġfun Ġset On New Http Ex ( func : Ġ() Ġ-> ĠHttp Ex ): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġon New Http Ex Ġ= Ġfunc ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĭ ¼ æİ¥ get è¯·æ±Ĥ url åıĤæķ° åĽŀè°ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġon Get Url Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( par as . size Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Ex . obj To Form ( par as , ĠCharset ). not Empty Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ+= ĠgetUrl Mark Ġ+ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar Ġwrite Log Ġ= Ġ{ Ġcont : ĠString Ġ-> ĊĠĠĠĠĠĠĠ ĠFile Ext . write Log ( cont , Ġget Http LogFile ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* æĺ¯åĲ¦ å¼ĢåĲ¯ ä¼łè¾ĵ æĹ¥å¿Ĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġhttp Log Ġ= Ġtrue ; ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget è¯·æ±Ĥ åıĤæķ° åĪĨ éļĶ ç¬¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar ĠgetUrl Mark Ġ= Ġ"? "; ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåıĳ èµ· è¯·æ±Ĥ , åĲĮæŃ¥ èİ·åıĸ ç»ĵæŀľ ( éĺ» å¡ŀ ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġrequest Ġ= Ġsuspend Ġ{ ĊĠĠĠĠĠĠĠ Ġis Cancel () ĊĠĠĠĠĠĠĠ Ġ// æĭ ¼ æİ¥ get Ġurl åıĤæķ° ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Post ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Get Url () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// https è¯·æ±Ĥ ĊĠĠĠĠĠĠĠ Ġval Ġhttp Ġ= Ġon New Http Ex () ĊĠĠĠĠĠĠĠ Ġis Cancel () ĊĊĠĠĠĠĠĠĠ Ġpost Multipart Func . notNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmulti Ġ= Ġhttp . post Multipart ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( http Log ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Log (" post Multipart :\ r \ n " Ġ+ Ġurl Ġ+ Ġ"\ r \ n " Ġ+ Ġmulti . text Str ) ĊĠĠĠĠĠĠĠ Ġ}. no pe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Post ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġpost Content ( http ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( http Log ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Log (" post : Ġ" Ġ+ Ġurl Ġ+ Ġ"\ r \ n " Ġ+ Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp . post ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( http Log ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Log (" get :\ r \ n " Ġ+ Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Cancel () ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġhttp . resp Code (); ĊĠĠĠĠĠĠĠ Ġis Cancel () ĊĠĠĠĠĠĠĠ Ġval Ġresp Cont Ġ= Ġhttp . resp Content Prog ( prog Recv ) ĊĠĠĠĠĠĠĠ Ġresp Text Ġ= Ġresp Cont ; ĊĠĠĠĠĠĠĠ Ġif Ġ( http Log ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( code Ġ>= Ġ 4 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Ext . write Log (" resp Ġcode : Ġ" Ġ+ Ġcode , Ġget Http LogFile ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Ext . write Log (" resp Ġcode : Ġ" Ġ+ Ġcode Ġ+ Ġ"\ r \ n " Ġ+ Ġresp Cont , Ġget Http Error LogFile ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Ext . write Log (" resp Ġcode : Ġ" Ġ+ Ġcode Ġ+ Ġ"\ r \ n " Ġ+ Ġresp Cont , Ġget Http LogFile ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġparse Resp ( resp Cont , Ġcode ); ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar Ġbe for Request Ġ= Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġafter Request Ġ= Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġvar Ġfail Fun : Ġ( e : ĠThrowable ) Ġ-> ĠThrowable ? Ġ= Ġ{ Ġe : ĠThrowable Ġ-> Ġe Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè¯·æ±Ĥ å¤±è´¥ åĽŀè°ĥ ( è¿Ĳè¡Į äºİ UI çº¿ç¨ĭ ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfailed ( res : Ġ( e : ĠThrowable ) Ġ-> ĠThrowable ?): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfail Fun Ġ= Ġres ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æį ķ èİ· åĪ° å¼Ĥå¸¸ åĽŀè°ĥ ,( è¿Ĳè¡Į äºİ çº¿ç¨ĭ æ±ł , ä¼ĺåħĪ äºİ fail Fun ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġon Failed : Ġsuspend Ġ( e : ĠThrowable ) Ġ-> ĠUnit Ġ= Ġ{ Ġe : ĠThrowable Ġ-> Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Pool () Ġ= Ġif Ġ( post Multipart Func Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġpool Upload ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġpool Http ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪĩæį¢ åĪ° çº¿ç¨ĭ æ±ł ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġrun To Pool () Ġ= Ġdf . run To Pool ( get Pool ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¼ĵåŃĺ åĽŀè°ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġbuffer Func : Ġ( suspend Ġ( dat : ĠT ) Ġ-> ĠUnit )? Ġ= Ġnull ; ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼ĢåĲ¯ æİ¥åı£ ç¼ĵåŃĺ ï¼Ī å¼ĢåĲ¯ åĲİ await () è¿ĶåĽŀ ç¼ĵåŃĺ æķ°æį® ï¼Į buffer Func åĽŀè°ĥ è¿ĶåĽŀ è¿ľç¨ĭ æķ°æį® ï¼ī ĊĠĠĠĠ Ġ* Ġ@ param Ġfunc ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuffer ( func : Ġ( suspend Ġ( dat : ĠT ) Ġ-> ĠUnit )? ): ĠHttp Req < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . buffer Func Ġ= Ġfunc ; ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġresp Text Ġ= Ġ""; ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ http åĵįåºĶ ç»ĵæŀľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġopen Ġfun Ġawait (): ĠT Ġ= Ġsuspend Coroutine < T > Ġ{ Ġcont Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġkey Ġ= Ġ""; ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . buffer Func Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å°Ŀè¯ķ ä»İ ç¼ĵåŃĺ ä¸Ń èİ·åıĸ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġthis . url Ġ+ ĠJson . obj ToJson ( par as ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġdf . getItem ( key ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Ġ!= Ġnull ) Ġ{// æī¾åĪ° ç¼ĵåŃĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . run On Pool ( get Pool ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġrequest () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . run On Ui Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . setItem ( key , Ġresp Text ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . buffer Func !! ( resp ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( parse Resp ( res , Ġ 2 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ suspend Coroutine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbe for Request (); ĊĊĠĠĠĠĠĠĠ Ġval Ġpool Ġ= Ġget Pool () ĊĠĠĠĠĠĠĠ Ġdf . run On Pool ( pool ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġrequest () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . run On Ui Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . buffer Func Ġ!= Ġnull )// ç¼ĵåŃĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . setItem ( key , Ġresp Text ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter Request (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( resp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failed ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . run On Ui Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres E Ġ= Ġfail Fun ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res E Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume With Exception ( res E ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊ