/** Ċ Ġ* Ġ" Common s ĠClause " ĠLicense ĠCondition Ġv 1 . 0 Ċ Ġ* Ċ Ġ* ĠThe ĠSoftware Ġis Ġprovided Ġto Ġyou Ġby Ġthe ĠLic ensor Ġunder Ġthe ĠLicense , Ġas Ġdefined Ċ Ġ* Ġbelow , Ġsubject Ġto Ġthe Ġfollowing Ġcondition . Ċ Ġ* Ċ Ġ* ĠWithout Ġlimiting Ġother Ġconditions Ġin Ġthe ĠLicense , Ġthe Ġgrant Ġof Ġrights Ġunder Ġthe Ċ Ġ* ĠLicense Ġwill Ġnot Ġinclude , Ġand Ġthe ĠLicense Ġdoes Ġnot Ġgrant Ġto Ġyou , Ġthe Ġright Ġto Ċ Ġ* ĠS ell Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠFor Ġpurposes Ġof Ġthe Ġfore going , ĠâĢľ Sell âĢĿ Ġmeans Ġpract icing Ġany Ġor Ġall Ġof Ġthe Ġrights Ċ Ġ* Ġgranted Ġto Ġyou Ġunder Ġthe ĠLicense Ġto Ġprovide Ġto Ġthird Ġparties , Ġfor Ġa Ġfee Ġor Ċ Ġ* Ġother Ġconsideration Ġ( including Ġwithout Ġlimitation Ġfees Ġfor Ġhosting Ġor Ċ Ġ* Ġconsult ing / Ġsupport Ġservices Ġrelated Ġto Ġthe ĠSoftware ), Ġa Ġproduct Ġor Ġservice Ċ Ġ* Ġwhose Ġvalue Ġder ives , Ġentirely Ġor Ġsubstant ially , Ġfrom Ġthe Ġfunctionality Ġof Ġthe Ċ Ġ* ĠSoftware . ĠAny Ġlicense Ġnotice Ġor Ġat tribution Ġrequired Ġby Ġthe ĠLicense Ġmust Ġalso Ċ Ġ* Ġinclude Ġthis ĠCommons ĠClause ĠLicense ĠCondition Ġnotice . Ċ Ġ* Ċ Ġ* ĠSoftware : ĠInf init ic Ċ Ġ* Ċ Ġ* ĠLicense : ĠMIT ĠLicense Ġ( https :// opensource . org / licenses / MIT ) Ċ Ġ* Ċ Ġ* ĠLic ensor : Ġinf init ic . io Ċ Ġ*/ Ċ Ċ package Ġio . inf init ic . common . tasks . engine . messages Ċ Ċ import Ġio . inf init ic . common . messages . Envelope Ċ import Ġio . inf init ic . common . ser De . avro . Av ro Ser De Ċ import Ġio . inf init ic . common . tasks . data . TaskId Ċ import Ġkotlinx . serialization . Serializable Ċ Ċ @ Serializable Ċ data Ġclass ĠTask Engine Envelope ( ĊĠĠĠ Ġval ĠtaskId : ĠTask Id , ĊĠĠĠ Ġval Ġtype : ĠTask Engine MessageType , ĊĠĠĠ Ġval Ġdispatch Task : ĠDispatch Task ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġwait Task : ĠWait Task ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġretry Task : ĠRetry Task ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġretry Task Attempt : ĠRetry Task Attempt ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġcancel Task : ĠCancel Task ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġcomplete Task : ĠComplete Task ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġtask Attempt Completed : ĠTask Attempt Completed ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġtask Attempt Failed : ĠTask Attempt Failed ? Ġ= Ġnull Ċ ) Ġ: ĠEn velope < Task Engine Message > Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġno Null Ġ= ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Task , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwait Task , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Task , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Task Attempt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Task , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Task , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Attempt Completed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Attempt Failed ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrequire ( no Null . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġrequire ( no Null . first () Ġ== Ġmessage ()) ĊĠĠĠĠĠĠĠ Ġrequire ( no Null . first (). taskId Ġ== ĠtaskId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( msg : ĠTask Engine Message ) Ġ= Ġwhen Ġ( msg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDispatch Task Ġ-> ĠTask Engine Envelope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Engine MessageType . DISPATCH _ TASK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Task Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWait Task Ġ-> ĠTask Engine Envelope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Engine MessageType . WAIT _ TASK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwait Task Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRetry Task Ġ-> ĠTask Engine Envelope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Engine MessageType . RETRY _ TASK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Task Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRetry Task Attempt Ġ-> ĠTask Engine Envelope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Engine MessageType . RETRY _ TASK _ AT TEMP T , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Task Attempt Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCancel Task Ġ-> ĠTask Engine Envelope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Engine MessageType . CANCEL _ TASK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Task Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠComplete Task Ġ-> ĠTask Engine Envelope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Engine MessageType . COMPLETE _ TASK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Task Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTask Attempt Completed Ġ-> ĠTask Engine Envelope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Engine MessageType . TASK _ AT TEMP T _ COMPLETED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Attempt Completed Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTask Attempt Failed Ġ-> ĠTask Engine Envelope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask Engine MessageType . TASK _ AT TEMP T _ FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Attempt Failed Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom ByteArray ( bytes : ĠByteArray ) Ġ= ĠAv ro Ser De . read Binary ( bytes , Ġserializer ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmessage (): ĠTask Engine Message Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTask Engine MessageType . DISPATCH _ TASK Ġ-> Ġdispatch Task !! ĊĠĠĠĠĠĠĠ ĠTask Engine MessageType . WAIT _ TASK Ġ-> Ġwait Task !! ĊĠĠĠĠĠĠĠ ĠTask Engine MessageType . RETRY _ TASK Ġ-> Ġretry Task !! ĊĠĠĠĠĠĠĠ ĠTask Engine MessageType . RETRY _ TASK _ AT TEMP T Ġ-> Ġretry Task Attempt !! ĊĠĠĠĠĠĠĠ ĠTask Engine MessageType . CANCEL _ TASK Ġ-> Ġcancel Task !! ĊĠĠĠĠĠĠĠ ĠTask Engine MessageType . COMPLETE _ TASK Ġ-> Ġcomplete Task !! ĊĠĠĠĠĠĠĠ ĠTask Engine MessageType . TASK _ AT TEMP T _ COMPLETED Ġ-> Ġtask Attempt Completed !! ĊĠĠĠĠĠĠĠ ĠTask Engine MessageType . TASK _ AT TEMP T _ FAILED Ġ-> Ġtask Attempt Failed !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto ByteArray () Ġ= ĠAv ro Ser De . write Binary ( this , Ġserializer ()) Ċ } Ċ