// ĠVer i Block ĠNode Core Ċ // ĠCopyright Ġ 2 0 1 7 - 2 0 1 9 ĠX en ios ĠSE ZC Ċ // ĠAll Ġrights Ġreserved . Ċ // Ġhttps :// www . ver ib lock . org Ċ // ĠDistributed Ġunder Ġthe ĠMIT Ġsoftware Ġlicense , Ġsee Ġthe Ġaccompanying Ċ // Ġfile ĠLICENSE Ġor Ġhttp :// www . opensource . org / licenses / mit - license . php . Ċ Ċ package Ġnode core . min ers . pop . api Ċ Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . features . Call Logging Ċ import Ġio . ktor . features . Content Neg otiation Ċ import Ġio . ktor . features . Default Headers Ċ import Ġio . ktor . gson . gson Ċ import Ġio . ktor . routing . Routing Ċ import Ġio . ktor . routing . route Ċ import Ġio . ktor . server . engine . Application Engine Ċ import Ġio . ktor . server . engine . embedded Server Ċ import Ġio . ktor . server . netty . Net ty Ċ import Ġmu . Kotlin Logging Ċ import Ġnode core . min ers . pop . api . controller . Api Controller Ċ import Ġnode core . min ers . pop . api . controller . status Pages Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠApi Server ( ĊĠĠĠ Ġprivate Ġval Ġcontrollers : ĠList < Api Controller > Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġrunning Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġport : ĠInt Ġ= Ġ 8 0 8 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Port Ġcannot Ġbe Ġset Ġafter Ġthe Ġserver Ġhas Ġstarted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġaddress : ĠString Ġ= Ġ" 0 . 0 . 0 . 0 " ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Address Ġcannot Ġbe Ġset Ġafter Ġthe Ġserver Ġhas Ġstarted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġserver : ĠApplication Engine ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Starting ĠHTTP ĠAPI Ġon Ġ{} :{} ", Ġaddress , Ġport ) ĊĊĠĠĠĠĠĠĠ Ġserver Ġ= Ġembedded Server ( Net ty , Ġport Ġ= Ġport , Ġhost Ġ= Ġaddress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Default Headers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Call Logging ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Pages () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Routing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute ("/ api ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( controller Ġin Ġcontrollers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( controller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Api () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĊĠĠĠĠĠĠĠ Ġrunning Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshutdown () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġserver ?. stop ( 3 , Ġ 1 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġrunning Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ