package Ġcom . cop per leaf . ball ast Ċ Ċ /** Ċ Ġ* ĠNotifications Ġsent Ġto Ġ[ Ball ast Interceptor ] Ġto Ġinspect Ġthe Ġinternal Ġstate Ġof Ġthe ĠViewModel . Ċ Ġ*/ Ċ public Ġsealed Ġclass ĠBall ast Notification < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠ Ġpublic Ġval Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, Ċ ) Ġ{ Ċ Ċ // ĠViewModel Ċ // Ġ---------------------------------------------------------------- ------------------------------------------------ ----- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠViewModel Ġwas Ġcreated Ġand Ġhas Ġstarted Ġinternal Ġprocessing . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠViewModel Started < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" ViewModel Ġstarted : Ġ$ vm " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠViewModel Ġwas Ġcleared . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠViewModel Cle ared < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" ViewModel Ġcleared : Ġ$ vm " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠInputs Ċ // Ġ---------------------------------------------------------------- ------------------------------------------------ ----- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn ĠInput Ġwas Ġsuccessfully Ġsend Ġinto Ġthe Ġinput Ġchannel , Ġbut Ġhas Ġnot Ġbeen Ġfiltered Ġchecked Ġthrough Ġthe Ġfilter Ġyet . ĊĠĠĠĠ Ġ* ĠIf Ġthe ĠInput Ġwas Ġqueued , Ġthe Ġinput Ġchannel Ġwas Ġnot Ġfull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠInput Queued < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġinput : ĠInputs , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Input ĠQue ued : Ġ$ input " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn ĠInput Ġwas Ġsuccessfully Ġqueued Ġin Ġthe ĠViewModel 's ĠInputs Ġchannel Ġand Ġpassed Ġits ĠFilter , Ġso Ġwill Ġbe Ġaccepted ĊĠĠĠĠ Ġ* Ġand Ġpassed Ġto Ġthe ĠHandler Ġfor Ġprocessing . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠInput Accepted < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġinput : ĠInputs , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Accept ing Ġinput : Ġ$ input " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn ĠInput Ġwas Ġsuccessfully Ġqueued Ġin Ġthe ĠViewModel 's ĠInputs Ġchannel Ġbut Ġfailed Ġto Ġpass Ġits ĠFilter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠInput Rejected < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġstate When Rejected : ĠState , ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġinput : ĠInputs , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Reject ing Ġinput : Ġ$ input " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠViewModel 's ĠInputs Ġchannel 's Ġbuffer Ġwas Ġfull Ġand Ġthe ĠInput Ġcould Ġnot Ġeven Ġbe Ġqueued Ġto Ġbe Ġprocessed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠInput Dropped < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġinput : ĠInputs , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" D ro pping Ġinput : Ġ$ input " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn ĠInput Ġwas Ġcancelled Ġduring Ġprocessing , Ġeither Ġdue Ġto Ġa Ġnew Ġinput Ġcoming Ġin Ġwhile Ġit Ġwas ĊĠĠĠĠ Ġ* Ġstill Ġprocessing , Ġor Ġbecause Ġthe ĠViewModel Ġwent Ġout Ġof Ġscope . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠInput Handled Successfully < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġinput : ĠInputs , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Input Ġhandled Ġsuccessfully : Ġ$ input " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn ĠInput Ġwas Ġcancelled Ġduring Ġprocessing , Ġeither Ġdue Ġto Ġa Ġnew Ġinput Ġcoming Ġin Ġwhile Ġit Ġwas ĊĠĠĠĠ Ġ* Ġstill Ġprocessing , Ġor Ġbecause Ġthe ĠViewModel Ġwent Ġout Ġof Ġscope . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠInput Cancelled < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġinput : ĠInputs , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Input Ġcancelled : Ġ$ input " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġnormal Ġexception Ġwas Ġthrown Ġduring Ġhandling Ġof Ġan ĠInput . ĠInputs Ġshould Ġtypically Ġhandle Ġerrors Ġin Ġother Ġways , ĊĠĠĠĠ Ġ* Ġbut Ġit Ġis Ġnot Ġconsidered Ġa Ġfatal Ġissue Ġthat Ġshould Ġterminate Ġthe Ġapp , Ġsince Ġit Ġwas Ġable Ġto Ġbe Ġcaught Ġby Ġthe ĊĠĠĠĠ Ġ* ĠViewModel . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠInput Handler Error < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġinput : ĠInputs , ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġthrowable : ĠThrowable , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Error Ġhandling Ġinput : Ġ$ input Ġ(${ throwable . message })" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠEvents Ċ // Ġ---------------------------------------------------------------- ------------------------------------------------ ----- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn ĠEvent Ġwas Ġposted Ġto Ġthe Ġqueue Ġto Ġeventually Ġbe Ġdelivered Ġto Ġthe ĠEventHandler . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠEvent Queued < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġevent : ĠEvents , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Event ĠQue ued : Ġ$ event " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn ĠEvent Ġwas Ġposted Ġto Ġthe ĠEventHandler . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠEvent Emit ted < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġevent : ĠEvents , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Emit ting Ġevent : Ġ$ event " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn ĠEvent Ġwas Ġposted Ġto Ġthe ĠEventHandler . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠEvent Handled Successfully < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġevent : ĠEvents , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Event Ġhandled Ġsuccessfully : Ġ$ event " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġnormal Ġexception Ġwas Ġthrown Ġduring Ġdis pt ch ing Ġof Ġan ĠEvent . ĠEvents Ġshould Ġtypically Ġhandle Ġerrors Ġin Ġother Ġways , ĊĠĠĠĠ Ġ* Ġbut Ġit Ġis Ġnot Ġconsidered Ġa Ġfatal Ġissue Ġthat Ġshould Ġterminate Ġthe Ġapp , Ġsince Ġit Ġwas Ġable Ġto Ġbe Ġcaught Ġby Ġthe ĊĠĠĠĠ Ġ* ĠViewModel . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠEventHandler Error < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġevent : ĠEvents , ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġthrowable : ĠThrowable , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Error Ġhandling Ġevent : Ġ$ event Ġ(${ throwable . message })" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠUI ĠEventHandler Ġhas Ġbecome Ġin Ġa Ġvalid ĠLifecycle Ġstate Ġand Ġhas Ġstarted Ġprocessing ĠEvents ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠEvent Processing Started < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Event Ġprocessing Ġstarted " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠUI ĠEventHandler Ġhas Ġbecome Ġin Ġan Ġinvalid ĠLifecycle Ġstate Ġand Ġhas Ġstopped Ġprocessing ĠEvents ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠEvent Processing Stopped < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Event Ġprocessing Ġstopped " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠStates Ċ // Ġ---------------------------------------------------------------- ------------------------------------------------ ----- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġnew ĠState Ġwas Ġemitted Ġto Ġthe ĠUI . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠState Changed < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġstate : ĠState , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" State Ġchanged : Ġ$ state " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠSide ĠJobs Ċ // Ġ---------------------------------------------------------------- ------------------------------------------------ ----- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġside Job Ġwas Ġqueued , Ġbut Ġhas Ġnot Ġstarted Ġyet ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠSide Job Queued < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġkey : ĠString , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" side Job Ġqueued : Ġ$ key " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġside Job Ġwas Ġstarted Ġor Ġrestarted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠSide Job Started < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġrestart State : ĠSide Job Scope . Restart State , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( restart State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSide Job Scope . Restart State . Initial Ġ-> Ġ" side Job Ġstarted : Ġ$ key " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSide Job Scope . Restart State . Re started Ġ-> Ġ" side Job Ġrestarted : Ġ$ key " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġside Job Ġran Ġto Ġcompletion ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠSide Job Completed < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġrestart State : ĠSide Job Scope . Restart State , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" side Job Ġfinished : Ġ$ key " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġside Job Ġwas Ġcancelled ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠSide Job Cancelled < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġrestart State : ĠSide Job Scope . Restart State , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" side Job Ġcancelled : Ġ$ key " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġexception Ġwas Ġthrown Ġinside Ġa Ġside Job ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠSide Job Error < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġrestart State : ĠSide Job Scope . Restart State , ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġthrowable : ĠThrowable , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Error Ġin Ġside Job : Ġ$ key Ġ(${ throwable . message })" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠOther Ċ // Ġ---------------------------------------------------------------- ------------------------------------------------ ----- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġexception Ġwas Ġthrown Ġsomewhere Ġwithin Ġthe ĠViewModel , Ġbut Ġwe 're Ġnot Ġquite Ġsure Ġfrom Ġwhere . ĠThis Ġis Ġusually Ġa ĊĠĠĠĠ Ġ* Ġserious Ġconcern , Ġand Ġlikely Ġa Ġcandidate Ġto Ġterminate Ġthe Ġapp Ġ( if Ġit Ġdidn 't Ġterminate Ġitself Ġalready ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġclass ĠUnhandled Error < Inputs Ġ: ĠAny , ĠEvents Ġ: ĠAny , ĠState Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġvm : ĠBall ast ViewModel < Inputs , ĠEvents , ĠState >, ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġthrowable : ĠThrowable , ĊĠĠĠ Ġ) Ġ: ĠBall ast Notification < Inputs , ĠEvents , ĠState >( vm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Un caught Ġerror Ġ(${ throwable . message })" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ