package Ġgg . r sm od . game . model . queue Ċ Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġjava . util .* Ċ import Ġkotlin . coroutines . create Coroutine Ċ Ċ /** Ċ Ġ* ĠA Ġsystem Ġresponsible Ġfor Ġtask Ġcoroutine Ġlogic . Ċ Ġ* Ċ Ġ* Ġ@ author ĠTom Ġ< rsp sm ods @ gmail . com > Ċ Ġ*/ Ċ abstract Ġclass ĠQueue Task Set Ġ{ ĊĊĠĠĠ Ġprotected Ġval Ġqueue : ĠLinkedList < Queue Task > Ġ= ĠLinkedList () ĊĊĠĠĠ Ġval Ġsize : ĠInt Ġget () Ġ= Ġqueue . size ĊĊĠĠĠ Ġabstract Ġfun Ġcycle () ĊĊĠĠĠ Ġfun Ġqueue ( ctx : ĠAny , Ġdispatcher : ĠCor outine Dispatcher , Ġpriority : ĠTask Priority , Ġblock : Ġsuspend ĠQueue Task .( Coroutine Scope ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠQueue Task ( ctx , Ġpriority ) ĊĠĠĠĠĠĠĠ Ġval Ġsuspend Block Ġ= Ġsuspend Ġ{ Ġblock ( task , ĠCor outine Scope ( dispatcher )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtask . coroutine Ġ= Ġsuspend Block . create Coroutine ( completion Ġ= Ġtask ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( priority Ġ== ĠTask Priority . STRONG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġterminate Tasks () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġqueue . add First ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn - game Ġevents Ġsometimes Ġmust Ġreturn Ġa Ġvalue Ġto Ġa Ġplugin . ĠAn Ġexample Ġare ĊĠĠĠĠ Ġ* Ġdialog s Ġwhich Ġmust Ġreturn Ġvalues Ġsuch Ġas Ġinput , Ġbutton Ġclick , Ġetc . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue ĊĠĠĠĠ Ġ* ĠThe Ġreturn Ġvalue Ġthat Ġthe Ġplugin Ġhas Ġasked Ġfor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsubmit ReturnValue ( value : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġqueue . peek () Ġ?: Ġreturn Ġ// ĠShould n 't Ġcall Ġthis Ġmethod Ġwithout Ġa Ġqueued Ġtask . ĊĠĠĠĠĠĠĠ Ġtask . request ReturnValue Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġall Ġ[ Queue Task ] Ġfrom Ġour Ġ[ queue ], Ġinvoking Ġeach Ġtask 's Ġ[ Queue Task . terminate ] ĊĠĠĠĠ Ġ* Ġbefore - hand . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġterminate Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġqueue . forEach Ġ{ Ġit . terminate () Ġ} ĊĠĠĠĠĠĠĠ Ġqueue . clear () ĊĠĠĠ Ġ} Ċ } Ċ