/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠToast ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . toast tab . pulse man . state Ċ Ċ import Ġandroidx . compose . foundation . Scroll State Ċ import Ġandroidx . compose . runtime . Mutable State Ċ import Ġandroidx . compose . runtime . mutable State ListOf Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . snapshots . Snapshot State List Ċ import Ġandroidx . compose . runtime . snapshots . Snapshot State Map Ċ import Ġcom . toast tab . pulse man . entities . Button State Ċ import Ġcom . toast tab . pulse man . entities . Received Messages Ċ import Ġcom . toast tab . pulse man . j ars . Run Time Jar Loader . add J ars To ClassLoader Ċ import Ġcom . toast tab . pulse man . pulsar . Message Handling Ċ import Ġcom . toast tab . pulse man . pulsar . Pul sar Ċ import Ġcom . toast tab . pulse man . pulsar . handlers . Pul sar Message Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġorg . apache . pulsar . client . api . Consumer Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠReceive Message ( ĊĠĠĠ Ġprivate Ġval ĠsetUser Feedback : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġpul sar Settings : ĠP ul sar Settings , ĊĠĠĠ Ġselected Receive Classes : ĠSnapshot State Map < Pul sar Message , ĠBoolean > Ċ ) Ġ{ ĊĠĠĠ Ġval Ġscope Ġ= ĠCor outine Scope ( Dispatch ers . IO Ġ+ ĠSuper visor Job ()) ĊĊĠĠĠ Ġval Ġsubscribe State Ġ= Ġmutable State Of ( Button State . WAIT ING ) ĊĠĠĠ Ġval Ġclear State Ġ= Ġmutable State Of ( Button State . WAIT ING ) ĊĠĠĠ Ġval Ġclose State Ġ= Ġmutable State Of ( Button State . WAIT ING ) ĊĊĠĠĠ Ġval Ġreceived Messages : ĠSnapshot State List < Received Messages > Ġ= Ġmutable State ListOf () ĊĠĠĠ Ġprivate Ġval Ġmessage Handling Ġ= ĠMessage Handling ( selected Receive Classes , Ġreceived Messages , ĠsetUser Feedback ) ĊĊĠĠĠ Ġprivate Ġval Ġpul sar : ĠMutable State < Pul sar ?> Ġ= Ġmutable State Of ( null ) ĊĠĠĠ Ġprivate Ġvar Ġconsumer : ĠConsumer < ByteArray >? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġstate Vertical Ġ= ĠScroll State ( 0 ) ĊĊĠĠĠ Ġfun Ġon Subscribe () Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumer ?. close () ĊĠĠĠĠĠĠĠ Ġpul sar . value ?. close () ĊĠĠĠĠĠĠĠ Ġpul sar . value Ġ= ĠP ul sar ( pulsar Settings , ĠsetUser Feedback ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd J ars To ClassLoader () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubscribe Future Ġ= Ġpul sar . value ?. createNew Consumer ( message Handling :: parse Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe Future ?. get ( 9 0 , ĠTimeUnit . SECONDS )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUser Feedback (" Sub scribed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpul sar . value ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUser Feedback (" Fail Ġto Ġsubscribe :$ ex ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Clear () Ġ{ ĊĠĠĠĠĠĠĠ Ġreceived Messages . clear () ĊĠĠĠĠĠĠĠ ĠsetUser Feedback (" Cle ared Ġhistory ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClose Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumer ?. close () ĊĠĠĠĠĠĠĠ Ġpul sar . value ?. close () ĊĠĠĠĠĠĠĠ ĠsetUser Feedback (" Connection Ġclosed ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumer ?. close () ĊĠĠĠĠĠĠĠ Ġpul sar . value ?. close () ĊĠĠĠĠĠĠĠ Ġscope . cancel (" Shut ting Ġdown ĠReceive Message ") ĊĠĠĠ Ġ} Ċ } Ċ