package Ġorg . chr ish at ton . example . ui Ċ Ċ import Ġorg . chr ish at ton . example . client Ċ import Ġorg . chr ish at ton . example . model . Person Ċ import Ġorg . chr ish at ton . example . net Scope Ċ import Ġorg . chr ish at ton . example . ui . contract . First Presenter Contract Ċ import Ġorg . chr ish at ton . example . ui . contract . First View Contract Ċ import Ġorg . chr ish at ton . example . ui Scope Ċ import Ġio . ktor . client . request . post Ċ import Ġio . ktor . client . request . url Ċ import Ġio . ktor . http . ContentType Ċ import Ġio . ktor . http . contentType Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . launch Ċ Ċ @ kotlin x . coroutines . Internal Cor outines Api Ċ @ kotlin x . coroutines . Experimental Cor outines Api Ċ class ĠFirst Presenter ( ĊĠĠĠĠĠĠĠ Ġval ĠbaseUrl Ġ: ĠString , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġview : ĠFirst View Contract Ċ ) Ġ: ĠFirst Presenter Contract Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠsetName Channel Ġ: ĠChannel < String > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpeople Channel Ġ Ġ: ĠChannel < Pair < Person , ĠPerson >> ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠsetName Channel Ġ= ĠChannel () ĊĠĠĠĠĠĠĠ Ġpeople Channel Ġ Ġ= ĠChannel () ĊĊĠĠĠĠĠĠĠ Ġnet Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( name Ġin ĠsetName Channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= ĠPerson ( names Ġ= Ġname . split (" Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Person Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" A ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Person Ġ= Ġclient . post < Person > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl ("$ baseUrl / person ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġperson ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" B ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Person ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Exception : Ġ$ e , Ġcause : Ġ${ e . cause }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPerson (" Ni gel ", Ġ" Er nest ", Ġ" Body ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpeople Channel . send ( person Ġto Ġother Person ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor (( person , other Person ) Ġin Ġpeople Channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . display G reeting ( text Ġ= Ġ" Hello Ġ${ person . firstName }, Ġdo Ġyou Ġknow Ġ${ other Person . fullName }? ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetName Channel . close () ĊĠĠĠĠĠĠĠ Ġpeople Channel . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid SetName ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" Hi ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetName Channel . send ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ