package Ġcom . enter se kt . f ido 2 . activity _ host Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . enter se kt . f ido 2 . R Ċ import Ġcom . enter se kt . f ido 2 . app data . Data Manage Ċ import Ġkotlinx . android . synt hetic . main . activity _ host .* Ċ import Ġkotlinx . android . synt hetic . main . item _ host .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . Data InputStream Ċ import Ġjava . io . Data OutputStream Ċ import Ġjava . net . Socket ĊĊ Ċ class ĠHost Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsocket Ġ= ĠSocket () ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġwrite Socket : ĠData OutputStream ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġread Socket : ĠData InputStream ĊĠĠĠĠĠĠĠ Ġvar Ġip Ġ= Ġ" 1 9 2 . 1 6 8 . 0 . 2 5 4 " Ġ Ġ// ìĦľ ë²Ħ Ġip ĊĠĠĠĠĠĠĠ Ġvar Ġport Ġ= Ġ 9 9 9 9 ĊĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠ Ġvar Ġcnt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġdatas Ġ= Ġmutable ListOf < Host Data >() ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġhost Ad p ater : ĠHost Ad p ater ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ host ) ĊĠĠĠĠĠĠĠ Ġdatas . clear () ĊĊĠĠĠĠĠĠĠ Ġbtn _ back . setOnClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠHost Disconnect (). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhost Ad p ater Ġ= ĠHost Ad p ater ( this , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠHost ViewHolder . on ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick Item ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChange Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas [ position ]. txt _ HostName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas [ position ]. txt _ MAC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas [ position ]. txt _ IP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas [ position ]. status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ëĭ¤ ìĭľ Ġìŀ¬ ìłķ ë¹Ħ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ad p ater . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrv _ host . adapter Ġ= Ġhost Ad p ater ĊĠĠĠĠĠĠĠ Ġrv _ host . setLayout Manager ( Linear LayoutManager ( this , ĠLinearLayoutManager . VERTICAL , Ġfalse )) ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ad p ater . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠChange Status ( position : ĠInt , Ġhost : ĠString , Ġmac : ĠString , Ġip : ĠString , Ġstatus : ĠBoolean ){ ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend Host Ġ= Ġhost ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend Mac Ġ= Ġmac ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend Ip Ġ= Ġip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġstatus ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ìķĦ ìĿ´ íħľ íģ ´ ë¦ Ń ", Ġ"$ position , Ġ$ send Host , Ġ$ send Mac , Ġ$ send Ip , Ġ$ status ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket Ġ= ĠSocket ( Companion . ip , Ġport ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Socket Ġ= ĠData OutputStream ( socket . get OutputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Socket Ġ= ĠData InputStream ( socket . getInputStream ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" datas ize Ġ: Ġ${ datas . size }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! status ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġ"${ Data Manage . mac Address }/ block person /${ host }/${ mac }/${ Companion . ip }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas [ position ]. status Ġ= Ġ! datas [ position ]. status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġ"${ Data Manage . mac Address }/ allow person /${ host }/${ mac }/${ Companion . ip }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas [ position ]. status Ġ= Ġ! datas [ position ]. status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Socket . write ( msg . toByteArray ()) ĠĠĠ Ġ// ë© Ķ ìĭľ ì§Ģ ĠìłĦ ìĨ ¡ Ġëªħ ëł ¹ ĠìłĦ ìĨ ¡ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfirst () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" ì² « ë²Ī ì§¸ Ġíķ¨ìĪĺ Ġìĭ¤íĸī ") ĊĠĠĠĠĠĠĠ Ġsocket Ġ= ĠSocket ( ip , Ġport ) ĊĠĠĠĠĠĠĠ Ġwrite Socket Ġ= ĠData OutputStream ( socket . get OutputStream ()) ĊĠĠĠĠĠĠĠ Ġread Socket Ġ= ĠData InputStream ( socket . getInputStream ()) ĊĊĠĠĠĠĠĠĠ Ġmsg Ġ= Ġ"${ Data Manage . mac Address }/ list " ĊĠĠĠĠĠĠĠ Ġwrite Socket . write ( msg . toByteArray ()) ĠĠĠ Ġ// ë© Ķ ìĭľ ì§Ģ ĠìłĦ ìĨ ¡ Ġëªħ ëł ¹ ĠìłĦ ìĨ ¡ ĊĊĠĠĠĠĠĠĠ Ġvar Ġdata Arr Ġ= ĠByteArray ( 1 0 2 4 ) Ġ// Ġ 1 0 2 4 ë§Į íģ ¼ Ġëį°ìĿ´íĦ° Ġë°Ľ ê¸° ĊĠĠĠĠĠĠĠ Ġread Socket . read ( data Arr ) Ġ// Ġbyte Ġarray ìĹĲ Ġëį°ìĿ´íĦ°ë¥¼ Ġì Ķ ģ ëĭĪëĭ¤ . ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠString ( data Arr ) Ċ // ĠĠĠĠĠĠĠ Ġcnt Ġ= Ġdata . split ('/ ')[ 0 ]. toInt () ĊĠĠĠĠĠĠĠ Ġcnt Ġ= Ġdata . split ('/ ')[ 0 ]. toInt () ĊĠĠĠĠĠĠĠ Ġprintln (" load Data Ġ: Ġ$ data Ġ$ cnt ") ĊĠĠĠĠĠĠĠ Ġprintln (" ì² « ë²Ī ì§¸ Ġíķ¨ìĪĺ Ġë ģ Ŀ ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsecond () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" ëĳĲ ë²Ī ì§¸ Ġíķ¨ìĪĺ Ġìĭ¤íĸī ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġk Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcnt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . split ('/ ')[ i Ġ+ Ġ 1 ] Ġ== Ġ" block ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHost Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ HostName Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 2 ]. split (', ')[ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ MAC Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 2 ]. split (', ')[ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ IP Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 2 ]. split (', ')[ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( k Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHost Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ HostName Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 1 ]. split (', ')[ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ MAC Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 1 ]. split (', ')[ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ IP Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 1 ]. split (', ')[ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( k Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatas . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHost Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ HostName Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 2 ]. split (', ')[ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ MAC Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 2 ]. split (', ')[ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ IP Ġ= Ġdata . split ('/ ')[ i Ġ+ Ġ 2 ]. split (', ')[ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhost Ad p ater . datas Ġ= Ġdatas ĊĠĠĠĠĠĠĠ Ġprintln (" ëĳĲ ë²Ī ì§¸ Ġíķ¨ìĪĺ Ġë ģ Ŀ ") ĊĠĠĠ Ġ} Ċ Ċ }