package Ġcom . vin ay . ip cc lient . ui . messenger Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os .* Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . vin ay . ip cc lient .* Ċ import Ġcom . vin ay . ip cc lient . databinding . Fragment Messenger Binding ĊĊ Ċ class ĠMess enger Fragment Ġ: ĠFragment (), ĠService Connection , ĠView . OnClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Messenger Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġview Binding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġ// ĠIs Ġbound Ġto Ġthe Ġservice Ġof Ġremote Ġprocess ĊĠĠĠ Ġprivate Ġvar Ġis Bound : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ// ĠMess enger Ġon Ġthe Ġserver ĊĠĠĠ Ġprivate Ġvar Ġserver Messenger : ĠMess enger ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠMess enger Ġon Ġthe Ġclient ĊĠĠĠ Ġprivate Ġvar Ġclient Messenger : ĠMess enger ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠHandle Ġmessages Ġfrom Ġthe Ġremote Ġservice ĊĠĠĠ Ġvar Ġhandler : ĠHandler Ġ= Ġobject Ġ: ĠHandler ( Looper . get Main Looper ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ) Ġ{ ĊĉĉĠĠĠ Ġ// ĠUpdate ĠUI Ġwith Ġremote Ġprocess Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġmsg . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . linear Layout Client Info . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . btn Connect . text Ġ= ĠgetString ( R . string . disconnect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . txt Server Pid . text Ġ= Ġbundle . getInt ( PID ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . txt Server Connection Count . text Ġ= Ġbundle . getInt ( CONNECTION _ COUNT ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Messenger Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview Binding . btn Connect . setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( is Bound ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Un bind Service () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Bind Service () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name ?, Ġservice : ĠI Binder ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġserver Messenger Ġ= ĠMess enger ( service ) ĊĠĠĠĠĠĠĠ Ġ// ĠReady Ġto Ġsend Ġmessages Ġto Ġremote Ġservice ĊĠĠĠĠĠĠĠ ĠsendMessage ToServer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( className : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear UI () ĊĠĠĠĠĠĠĠ Ġserver Messenger Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear UI (){ ĊĠĠĠĠĠĠĠ Ġview Binding . txt Server Pid . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġview Binding . txt Server Connection Count . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġview Binding . btn Connect . text Ġ= ĠgetString ( R . string . connect ) ĊĠĠĠĠĠĠĠ Ġview Binding . linear Layout Client Info . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Un bind Service () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Bind Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġclient Messenger Ġ= ĠMess enger ( handler ) ĊĠĠĠĠĠĠĠ ĠIntent (" messenger example "). also Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent .` package ` Ġ= Ġ" com . vin ay . ipc server " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. application Context ?. bind Service ( intent , Ġthis , ĠContext . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Bound Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Un bind Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Bound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. application Context ?. unbind Service ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Bound Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsendMessage ToServer () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Bound ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠMessage . obtain ( handler ) ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . putString ( DATA , Ġview Binding . ed t Client Data . text . toString ()) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( PACKAGE _ NAME , Ġcontext ?. packageName ) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( PID , ĠProcess . my Pid ()) ĊĠĠĠĠĠĠĠ Ġmessage . data Ġ= Ġbundle ĊĠĠĠĠĠĠĠ Ġmessage . reply To Ġ= Ġclient Messenger Ġ// Ġwe Ġoffer Ġour ĠMess enger Ġobject Ġfor Ġcommunication Ġto Ġbe Ġtwo - way ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Messenger ?. send ( message ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRemoteException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ