package Ġinfo . s ini 6 a . arch server Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . async Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . Exception Ċ import Ġjava . net .* Ċ import Ġjava . nio . channels . Illegal Blocking Mode Exception Ċ Ċ @ Experimental Unsigned Types Ċ suspend Ġfun Ġwake up ( ip : ĠString , Ġmac Ġ: ĠString , Ġport Ġ: ĠInt Ġ= Ġ 9 ) Ġ: ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠGlobal Scope . async ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstatus Ġ: ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmac Bytes Ġ= Ġget Mac Bytes ( mac ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠU ByteArray ( size Ġ= Ġ 6 Ġ+ Ġ 1 6 Ġ* Ġmac Bytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmac Bytes . forEach Indexed Ġ{ Ġindex , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes [ index ] Ġ= Ġ 0 xff . to U Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 1 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmac Bytes . copy Into ( bytes , Ġi Ġ* Ġ 6 , Ġ 0 , Ġmac Bytes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= ĠInet Address . get ByName ( ip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= ĠData gram Packet ( bytes . toByteArray (), Ġbytes . size , Ġaddress , Ġport ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsocket Ġ= ĠData gram Socket () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . send ( packet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Wake - on - lan Ġpackets Ġsend !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" No Ġaccessible ĠIP ĠAddress Ġfound : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Security Ġexception Ġoccurred : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSocket Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Socket Ġcould Ġnot Ġbe Ġopened Ġor Ġbound Ġto Ġspecified Ġport : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Input / Output Ġerror : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPort Un reachable Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Port Ġis Ġnot Ġreachable : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal Blocking Mode Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Illegal Ġblocking Ġmode Ġexception : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġjava . lang . IllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Illegal Ġargument Ġexception : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Unknown Ġerror Ġoccurred : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Failed Ġto Ġsend ĠW ake - on - LAN Ġpackets : Ġ$ e ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn @ async Ġstatus ĊĠĠĠ Ġ}. await () Ċ } Ċ Ċ @ Experimental Unsigned Types Ċ private Ġfun Ġget Mac Bytes ( mac Ġ: ĠString ) Ġ: ĠU ByteArray Ġ{ ĊĠĠĠ Ġval Ġbytes Ġ: ĠU ByteArray Ġ= ĠU ByteArray ( 6 ) ĊĠĠĠ Ġval Ġhex Ġ: ĠList < String > Ġ= Ġmac . split (" :", Ġ"- ") ĊĠĠĠ Ġif ( hex . size Ġ!= Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( hex . size ) ĊĠĠĠĠĠĠĠ Ġprintln ( hex ) ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Invalid ĠMAC ĠAddress .") ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġhex . forEach Indexed Ġ{ Ġindex , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( hex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbytes . set ( index , Ġhex . get ( index ). to U Byte ( 1 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Byte : Ġ${ bytes [ index ]} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Invalid Ġhex Ġdigit Ġin ĠMAC Ġaddress ."); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġbytes Ċ }