package Ġmodel . game . phase Ċ Ċ import Ġcommon . get Big gest Sub Set Ċ import Ġcommon . random Sub Set Ċ import Ġcommon . tribute Req Resp Ċ import Ġgame . T ribut e Validator Ċ import Ġmodel . game .* Ċ import Ġstate . Player Phase State Ċ import Ġstate . phase . T ribut e Phase State Ċ Ċ class ĠT ribut e Phase ( game : ĠGame ) Ġ: ĠGame Phase < Set < Int >>( game ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Handler ( object Ġ: ĠPhase RequestHandler < Set < Int >, ĠUnit >( tribute Req Resp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle ( player : ĠGame . Player , Ġreq : ĠSet < Int >) Ġ= Ġgame . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . check Can Resolve Cur Task () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT ribut e Validator . validate ( state , Ġplayer . id , Ġreq ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . cur Phase Task !!. finish ( req ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame State Emitter . emit State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠT ribut e Task ( player : ĠGame . Player ) Ġ: ĠPhase Task ( player ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Resolve ( result : ĠSet < Int >): ĠUnit Ġ= Ġgame . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . cards . hand Set . moveTo ( cards . temporary Set , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ("${ player . name } è¿Ľ è´ ¡ äºĨ ${ result . size } å¼ł çīĮ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame State Emitter . emit State () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Timeout Result (): ĠSet < Int > Ġ= Ġplayer . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġroom User . owe T ribut e Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcards . hand Set . get Big gest Sub Set ( size , Ġgame . prime Suit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġshould Execute (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgame . players . sum Of Ġ{ Ġit . room User . de serve T ribut e Count Ġ} Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġexecute (): ĠUnit Ġ= Ġgame . run Ġ{ ĊĠĠĠĠĠĠĠ Ġplayers . filter Ġ{ Ġit . room User . owe T ribut e Count Ġ> Ġ 0 Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . cur Phase Task Ġ= ĠT ribut e Task ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog (" çŃīå¾ħ çİ© å®¶ è¿Ľ è´ ¡ ") ĊĠĠĠĠĠĠĠ Ġgame State Emitter . emit State () ĊĠĠĠĠĠĠĠ Ġplayers . wait All Tasks Resolved ( game Config . is Test Config ) ĊĠĠĠĠĠĠĠ Ġplayers . filter Ġ{ Ġit . room User . de serve T ribut e Count Ġ> Ġ 0 Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Set Ġ= Ġcards . temporary Set . random Sub Set ( it . room User . de serve T ribut e Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcards . temporary Set . moveTo ( it . cards . hand Set , Ġid Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgame State Emitter . emit State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġstate : ĠT ribut e Phase State ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠT ribut e Phase State (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame . players . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . cur Phase Task Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . userData Map [ it . id ] Ġ= ĠPlayer Phase State ( it . cur Phase Task !!. is Finished , Ġit . room User . owe T ribut e Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" è¿Ľ è´ ¡ éĺ¶æ®µ " Ċ }