package Ġcom . music player . a ow . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . wifi . Wifi Manager Ċ import Ġandroid . os . Environment Ċ import Ġandroid . text . format . Formatter Ċ import Ġandroid . util . Log Ċ import Ġcom . music player . a ow . application . Injection Ċ import Ġcom . music player . a ow . ui . settings . server . WebServer Ċ import Ġfi . iki . el onen . Simple WebServer Ċ import Ġjava . io . File Ċ import Ġjava . net . Bind Exception Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . NetworkInterface Ċ Ċ class ĠFile Server (){ ĊĊĠĠĠ Ġ// file Ġserver ĊĠĠĠ Ġvar Ġserver : ĠSimple WebServer ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġip Ġ= ĠInet Address . get Loop back Address (). host Address ĊĠĠĠ Ġprivate Ġvar Ġlocal ip Ġ= Ġ" 1 9 2 . 1 6 8 . 4 3 . 1 " ĊĊĠĠĠ Ġfun Ġinit Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġserver Ġ= ĠSimple WebServer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( Environment . get External Storage Directory (). absolute Path ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġre Init Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġserver Ġ= ĠSimple WebServer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ local ip ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( Environment . get External Storage Directory (). absolute Path ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġserver Ip (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlocal ip ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Server (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( server Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! server !!. is Alive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver !!. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" server ", Ġ" started Ġ" Ġ+ ĠInet Address . get Loop back Address (). host Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠBind Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" server ", Ġ" err : Ġnot Ġrunning , Ġaddress Ġin Ġuse . Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( server !!. was Started ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" server ", Ġ" started Ġ" Ġ+ ĠInet Address . get Loop back Address (). host Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" server ", Ġ" not Ġstarted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" server ", Ġ" running ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Server (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( server Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver !!. close All Connections () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver !!. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" server ", Ġ" stopped ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose All Connections (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( server Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver !!. close All Connections () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠGet Device ip Mobile Data (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen Ġ= ĠNetwork Interface . get Network Interfaces () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( en . hasMore Elements ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork interface Ġ= Ġen . nextElement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenum Ip Addr Ġ= Ġnetwork interface . inet Addresses ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( enum Ip Addr . hasMore Elements ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinet Address Ġ= Ġenum Ip Addr . nextElement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! inet Address . is Loop back Address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Current ĠIP ", Ġinet Address . host Address . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinet Address . host Address . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Current ĠIP ", Ġex . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠGet Device ip WiFi Data (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwm Ġ= ĠInjection . provide Context () !!. getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ĊĠĠĠĠĠĠĠ ĠLog . e (" Current ĠIP ", ĠFormatter . format IpAddress ( wm . connection Info . ipAddress )) ĊĠĠĠĠĠĠĠ Ġreturn ĠFormatter . format IpAddress ( wm . connection Info . ipAddress ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġs Instance : ĠFile Server ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠFile Server ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( File Server . Companion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Instance Ġ= ĠFile Server () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs Instance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }