package Ġcom . mob . lee . fast air . service Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . mob . lee . fast air . R Ċ import Ġcom . mob . lee . fast air . io . http . Http Ċ import Ġcom . mob . lee . fast air . io . socket . Connect Listener Ċ import Ġcom . mob . lee . fast air . localhost .* Ċ import Ġcom . mob . lee . fast air . service . Notification . Companion . LOCAL _ HOST Ċ import Ġcom . mob . lee . fast air . service . Notification . Companion . LOCAL _ HOST _ CODE Ċ import Ġcom . mob . lee . fast air . service . Notification . Companion . LOCAL _ HOST _ NAME Ċ import Ġcom . mob . lee . fast air . service . Notification . Companion . cancel Notify Ċ import Ġcom . mob . lee . fast air . service . Notification . Companion . channel Ċ import Ġcom . mob . lee . fast air . service . Notification . Companion . foreground Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġjava . net . Inet SocketAddress Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ class ĠHost Service () Ġ: ĠService (), ĠCor outine Scope Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context = ĠSuper visor Job () Ġ+ ĠDispatch ers . Main . immediate ; ĊĠĠĠ Ġvar Ġm Host : ĠHttp ? Ġ= Ġnull ĊĠĠĠ Ġval Ġm Status = Mutable LiveData < Boolean >() ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPORT Ġ= Ġ" port " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE START Ġ= Ġ" restart " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ PORT Ġ= Ġ 9 5 2 7 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Host Service " ĊĠĠĠĠĠĠĠ Ġfun Ġstart ( context : ĠContext ?, Ġport : ĠInt Ġ= ĠDEFAULT _ PORT , restart : Boolean = false ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠHost Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( PORT , Ġport ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( RE START , Ġrestart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. start Service ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġchannel ( LOCAL _ HOST , ĠLOCAL _ HOST _ NAME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠB inder Impl ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġintent ?. getInt Extra ( PORT , ĠDEFAULT _ PORT ) Ġ?: ĠDEFAULT _ PORT ĊĠĠĠĠĠĠĠ Ġval Ġrestart Ġ= Ġintent ?. getBoolean Extra ( RE START , Ġfalse ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG ," ------- Start ĠHost Ġwith Ġport Ġ= Ġ$ port , restart Ġ= Ġ$ restart ") ĊĠĠĠĠĠĠĠ Ġif ( null == m Host ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart ( port ) ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( null != m Host && restart ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart ( port ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onStart Command ( intent , Ġflags , Ġstart Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart ( port : Int ){ ĊĠĠĠĠĠĠĠ Ġm Host = Http ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener = object : Connect Listener (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Status . value = true ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforeground ( LOCAL _ HOST , ĠLOCAL _ HOST _ CODE ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Title ( getString ( R . string . server _ run ing )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Status . value = false ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Host !!. start Loop ( Inet SocketAddress ( port )) ĊĠĠĠĠĠĠĠ Ġm Host !!. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Handler ( Home Handler ( this @ Host Service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Handler ( Category Handler ( m Scope , this @ Host Service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Handler ( Image Handler ( this @ Host Service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Handler ( Download Handler ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Handler ( Chat Handler ( this @ Host Service )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Handler ( Upload Handler ( this @ Host Service )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop (){ ĊĠĠĠĠĠĠĠ Ġm Host ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Status . value = false ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Host = null ĊĠĠĠĠĠĠĠ Ġstop Foreground ( true ) ĊĠĠĠĠĠĠĠ Ġstop Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠ Ġcoroutine Context . cancel () ĊĠĠĠ Ġ} Ċ }