package Ġdev . apes . p aw m ance . data . conversation Ċ Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġdev . apes . p aw m ance . data . auth . Pet Info Ċ import Ġdev . apes . p aw m ance . di . Io Dispatcher Ċ import Ġio . get stream . chat . android . client . Chat Client Ċ import Ġio . get stream . chat . android . client . call . await Ċ import Ġio . get stream . chat . android . client . models . Connection Data Ċ import Ġio . get stream . chat . android . client . models . User Ċ import Ġio . get stream . chat . android . client . token . Token Provider Ċ import Ġio . get stream . chat . android . client . utils . on Success Suspend Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . flow On Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠCreate Channel Source Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġchat Client : ĠChat Client , ĊĠ Ġ@ Io Dispatcher Ġprivate Ġval Ġdispatcher : ĠCor outine Dispatcher Ċ ) Ġ{ ĊĊĠ Ġfun Ġcreate Channel ( their Id : ĠString , Ġour Id : ĠString ) Ġ= Ġflow Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġchat Client . create Channel (" messaging ", ĠlistOf ( their Id , Ġour Id )). await () ĊĠĠĠ Ġresult . on Success Suspend Ġ{ ĊĠĠĠĠĠ Ġemit ( it ) ĊĠĠĠ Ġ} ĊĠ Ġ}. flow On ( dispatcher ) Ċ } Ċ Ċ interface ĠStream Client Connector Ġ{ ĊĠ Ġfun Ġconnect User ( userId : ĠString , Ġinfo : ĠPet Info ): ĠFlow < Connection Data > ĊĠ Ġfun Ġdisconnect User ( userId : ĠString ) Ċ } Ċ Ċ class ĠStream Client Connector Impl Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġchat Client : ĠChat Client , ĊĠ Ġ@ Io Dispatcher Ġprivate Ġval Ġdispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĠStream Client Connector Ġ{ ĊĊĠ Ġ@ Worker Thread ĊĠ Ġoverride Ġfun Ġconnect User ( userId : ĠString , Ġinfo : ĠPet Info ) Ġ= Ġflow Ġ{ ĊĠĠĠ Ġdisconnect User ( userId ) ĊĊĠĠĠ Ġval Ġuser Ġ= ĠUser ( ĊĠĠĠĠĠ Ġid Ġ= ĠuserId , ĊĠĠĠĠĠ Ġextra Data Ġ= Ġinfo . extra Data ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġdev Token Ġ= Ġchat Client . dev Token ( userId ) ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġchat Client . connect User ( user , Ġdev Token ). await () ĊĊĠĠĠĠĠ Ġresult . on Success Suspend Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . e (" Connection ĠData Ġ$ it ") ĊĠĠĠĠĠĠĠ Ġemit ( it ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠ Ġ} ĊĊĠ Ġ}. flow On ( dispatcher ) ĊĊĠ Ġoverride Ġfun Ġdisconnect User ( userId : ĠString ) Ġ{ ĊĠĠĠ Ġval ĠcurrentUser Ġ= Ġchat Client . getCurrent User () ĊĠĠĠ Ġif Ġ( currentUser Ġ!= Ġnull Ġ&& ĠuserId Ġ== ĠcurrentUser . id ) Ġ{ ĊĠĠĠĠĠ Ġchat Client . disconnect () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Published Api Ċ internal Ġconst Ġval ĠEX TRA _ NAME Ġ= Ġ" name " Ċ Ċ @ Published Api Ċ internal Ġconst Ġval ĠEX TRA _ IMAGE Ġ= Ġ" image " Ċ Ċ @ Published Api Ċ internal Ġconst Ġval ĠEX TRA _ TEAM Ġ= Ġ" team " Ċ Ċ val ĠPet Info . extra Data : ĠMutable Map < String , ĠAny > ĊĠ Ġinline Ġget () Ġ= Ġmutable Map Of ( ĊĠĠĠ ĠEX TRA _ NAME Ġto Ġthis . pet Name (). or Empty (), ĊĠĠĠ ĠEX TRA _ IMAGE Ġto Ġthis . pet Primary Profile (). or Empty () ĊĠ Ġ) Ċ