package Ġre net ik . android . client . request Ċ Ċ import Ġre net ik . kotlin . collections . isEmpty Ċ import Ġre net ik . kotlin . collections . list Ċ import Ġre net ik . kotlin . collections . put Ċ import Ġre net ik . kotlin . collections . put All Ċ Ċ open Ġclass ĠCS Concurrent Process < T Ġ: ĠAny >( data : ĠMutable List < T >) Ġ: ĠCS Process Base < List < T >>( data ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġprocesses : ĠMutable List < CS Process Base < T >> Ġ= Ġlist () ĊĠĠĠ Ġprivate Ġval Ġrunning Processes : ĠMutable List < CS Process Base < T >> Ġ= Ġlist () ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis ( list ()) ĊĊĠĠĠ Ġconstructor ( var arg Ġadding : ĠCS Process Base < T >) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġrunning Processes . put All ( processes . put All (* adding )). forEach Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . on Success Ġ{ Ġon Response Success ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . on Failed Ġ{ Ġon Response Failed ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( process : ĠCS Process Base < T >) Ġ= ĊĠĠĠĠĠĠĠ Ġrunning Processes . put ( processes . put ( process )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġon Response Success ( it ) Ġ}. on Failed Ġ{ Ġon Response Failed ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Response Success ( succeeded Process : ĠCS Process Base <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrunning Processes . remove ( succeeded Process ) ĊĠĠĠĠĠĠĠ Ġif Ġ( running Processes . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable List Data Ġ= Ġ( data Ġas ĠMutable List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocesses . forEach Ġ{ Ġresponse Ġ-> Ġmutable List Data . add ( response . data !! ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess ( mutable List Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Response Failed ( failed Process : ĠCS Process Base <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrunning Processes . apply Ġ{ Ġremove ( failed Process ) Ġ}. forEach Ġ{ Ġresponse Ġ-> Ġresponse . cancel () Ġ} ĊĠĠĠĠĠĠĠ Ġfailed ( failed Process ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġrunning Processes . forEach Ġ{ Ġit . cancel () Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . cancel () ĊĠĠĠ Ġ} Ċ }