package Ġxyz . po esch l . k ixel fl ut . utils Ċ Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . net . Server Socket Ċ import Ġkotlin . concurrent . thread Ċ Ċ class ĠMock Server ( port : ĠInt ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠLOGGER Ġ= ĠKotlin Logging . logger Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġrequests Ġ= ĠArrayList < String >() ĊĊĠĠĠ Ġprivate Ġval Ġwhen Cases Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠ Ġprivate Ġvar Ġrunning Ġ= Ġfalse ; ĊĠĠĠ Ġprivate Ġval Ġserver Socket Ġ= ĠServer Socket ( port ) ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġrunning Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= Ġserver Socket . accept () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info Ġ{ Ġ" Client Ġconnected : Ġ${ client . inet Address . host Address }" Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= Ġclient . getInputStream (). buffered Reader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= Ġclient . get OutputStream (). buffered Writer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwhole Command Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġreader . readLine (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhole Command Ġ+= Ġcommand Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( reader . ready ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info Ġ{ Ġ" Received Ġcommand Ġ'${ whole Command . replace ("\ n ", Ġ"| ")} '" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequests . add ( whole Command ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġwhen Cases . get OrDefault ( whole Command , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( response Ġ+ Ġ'\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġrunning Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġserver Socket . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwhen Request ( command : ĠString , Ġresponse : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Cases . put ( command , Ġresponse ) ĊĠĠĠ Ġ} Ċ } Ċ