package Ġcom . pat res . automation . server Ċ Ċ import Ġcom . sun . net . http server . Basic Authenticator Ċ import Ġcom . sun . net . http server . HttpContext Ċ import Ġcom . sun . net . http server . HttpServer Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . net . Bind Exception Ċ import Ġjava . net . Inet SocketAddress ĊĊ Ċ object ĠServer Boot Ġ{ ĊĊĠĠĠ Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Server Boot :: class . java ) !! ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ PORT Ġ= Ġ 8 0 1 2 ĊĠĠĠ Ġconst Ġval ĠMIN _ PORT Ġ= Ġ 0 ĊĠĠĠ Ġconst Ġval ĠMAX _ PORT Ġ= Ġ 6 5 5 3 5 ĊĠĠĠ Ġvar ĠerrorMessage : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġaction Handlers Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction Run Http Handler (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction Stop Http Handler (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGetAll Actions Http Handler (" GET ", Ġ"/ action / buttons ")) ĊĊĠĠĠ Ġfun Ġrun ( port : ĠInt Ġ= ĠDEFAULT _ PORT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Ġ= ĠHttp Server . create ( Inet SocketAddress ( port ), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Handlers . forEach Ġ{ Ġaction Handler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . create Context ( action Handler . url , Ġaction Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . executor Ġ= Ġnull Ġ// Ġcreates Ġa Ġdefault Ġexecutor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Server Ġis Ġstarting ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . start () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠBind Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Cannot Ġrun Ġa Ġserver ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Port : Ġ$ port Ġ- Ġ${ e . message }" ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Cannot Ġrun Ġa Ġserver ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġe . message ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun With Authenticator ( port : ĠInt Ġ= ĠDEFAULT _ PORT , Ġusername : ĠString ? Ġ= Ġnull , Ġpassword : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Ġ= ĠHttp Server . create ( Inet SocketAddress ( port ), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Handlers . forEach Ġ{ Ġaction Handler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġserver . create Context ( action Handler . url , Ġaction Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Authenticator ( context , Ġusername , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . executor Ġ= Ġnull Ġ// Ġcreates Ġa Ġdefault Ġexecutor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Server Ġis Ġstarting ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . start () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠBind Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Cannot Ġrun Ġa Ġserver ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Port : Ġ$ port Ġ- Ġ${ e . message }" ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Cannot Ġrun Ġa Ġserver ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġe . message ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Authenticator ( context : ĠHttp Context , Ġusername : ĠString ?, Ġpassword : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . auth enticator Ġ= Ġobject Ġ: ĠBasic Authenticator (" Automation Boot ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Credentials ( user : ĠString , Ġpwd : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Ġ== Ġusername Ġ&& Ġpwd Ġ== Ġpassword ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }