package Ġcom . gr arch t . sh ut tle . framework . coroutines . channel Ċ Ċ import Ġandroid . util . Log Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . channels . Closed Receive Channel Exception Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ import Ġkotlinx . coroutines . flow . consume As Flow Ċ import Ġkotlin . coroutines . c ancellation . Cancellation Exception Ċ Ċ private Ġconst Ġval ĠDEFAULT _ LOG _ TAG Ġ= Ġ" Retry If Available " Ċ Ċ /** Ċ Ġ* ĠRel ays Ġthe Ġflow Ġof Ġdata Ġif Ġthis Ġ[ Channel ] Ġand Ġthe Ġ[ receiver ] Ġ[` Channel ] Ġare Ġnot Ġnull . Ċ Ġ* Ġ@ param Ġreceiver Ġto Ġrelay Ġthe Ġdata Ġto Ċ Ġ* Ġ@ param Ġlog Tag Ġfor Ġlog Ġmessages Ġif Ġexceptions Ġwere Ġto Ġoccur Ġwith Ġreceiving Ċ Ġ*/ Ċ suspend Ġfun Ġ< E > ĠChannel < E > ?. relay Flow If Available ( receiver : ĠChannel < E >? Ġ= Ġnull , Ġlog Tag : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġif Ġ( null Ġ!= Ġthis Ġ&& Ġnull Ġ!= Ġreceiver ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġlog Tag Ġ?: ĠDEFAULT _ LOG _ TAG ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsume As Flow (). collect Latest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver . send ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClosed Receive Channel Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( tag , Ġ" Ca ught Ġwhen Ġrelay ing .", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠC ancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( tag , Ġ" Ca ught Ġwhen Ġrelay ing .", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(@ Suppress (" Too Generic Exception Ca ught ") Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( tag , Ġ" Ca ught Ġwhen Ġrelay ing .", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ