package Ġcom . ne utron star er . npc Ċ Ċ import Ġjava . util . Timer Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ import Ġkotlin . concurrent . schedule Ċ Ċ type alias ĠCancel Ġ= Ġ() Ġ-> ĠUnit Ċ Ċ type alias ĠNotify Ġ= Ġ( param : ĠAny ?) Ġ-> ĠUnit Ċ Ċ type alias ĠReply Ġ= Ġ( param : ĠAny ?, Ġerror : ĠAny ?) Ġ-> ĠUnit Ċ Ċ type alias ĠHandle Ġ= Ġ( param : ĠAny ?, Ġnotify : ĠNotify , Ġreply : ĠReply ) Ġ-> ĠCancel ? Ċ Ċ type alias ĠSend Ġ= Ġ( message : ĠMessage ) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠN PC ĠN ear ĠProcedure ĠCall Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate ĠN PC Ċ Ġ* Ċ Ġ* Ġ@ param Ġsend ĠIf Ġsend Ġis Ġnull , Ġyou Ġshould Ġextend ĠN PC Ġand Ġoverride Ġ[ send ] Ġfunction Ċ Ġ*/ Ċ open Ġclass ĠN PC ( private Ġval Ġsend : ĠSend ?) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOn ĠRegister Ġhandle Ġfor Ġmethod ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmethod ĠMethod Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġhandle ĠHandle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon ( method : ĠString , Ġhandle : ĠHandle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠ Ġ_ handles [ method ] Ġ= Ġhandle ĊĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEmit ĠEmit Ġa Ġmessage Ġwithout Ġreply ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmethod ĠMethod Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġparam ĠMethod Ġparam ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġemit ( method : ĠString , Ġparam : ĠAny ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ send ( Message ( typ Ġ= ĠTyp . Emit , Ġparam Ġ= Ġparam )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDel iver ĠDel iver Ġa Ġmessage Ġwith Ġreply ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmethod ĠMethod Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġparam ĠMethod Ġparam ĊĠĠĠĠ Ġ* Ġ@ param Ġtimeout ĠTimeout Ġin Ġmilli second ĊĠĠĠĠ Ġ* Ġ@ param Ġon Notify ĠNotify Ġcallback ĊĠĠĠĠ Ġ* Ġ@ param Ġon Reply ĠReply Ġcallback ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Cancel ] ĠA Ġfunction Ġto Ġcancel Ġdeliver ing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġdeliver ( ĊĠĠĠĠĠĠĠ Ġmethod : ĠString , ĊĠĠĠĠĠĠĠ Ġparam : ĠAny ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtimeout : ĠLong Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġon Notify : ĠNotify ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġon Reply : ĠReply ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠCancel Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ_ id ĊĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠ Ġ_ id ++ ĊĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠ Ġval Ġcompleted Lock Ġ= ĠRe entrant Lock () ĊĠĠĠĠĠĠĠ Ġvar Ġcompleted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtimer : ĠTimer ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġreply Ġ= ĠReply @{ Ġp : ĠAny ?, Ġerror : ĠAny ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Reply Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Reply Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Reply ( p , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Reply Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠ Ġif Ġ( on Notify Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ not ifies [ id ] Ġ= ĠNotify @{ Ġp : ĠAny ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Notify ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Notify ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ replies [ id ] Ġ= Ġreply ĊĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠ Ġif Ġ( timeout Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Ġ= ĠTimer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer . schedule ( timeout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reply ( null , Ġ" timed out ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ send ( Message ( typ Ġ= ĠTyp . Cancel , Ġid Ġ= Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ send ( Message ( typ Ġ= ĠTyp . Deliver , Ġid Ġ= Ġid , Ġmethod Ġ= Ġmethod , Ġparam Ġ= Ġparam )) ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reply ( null , Ġ" cancelled ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ send ( Message ( typ Ġ= ĠTyp . Cancel , Ġid Ġ= Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClean Ġup Ġall Ġdeliver ies Ġwith Ġspecial Ġreason . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġreason ĠError ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclean Up Del iv eries ( reason : ĠAny ? ){ ĊĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġ_ replies . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . value ( null , Ġreason ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSend ĠSend Ġmessage , Ġusually Ġoverride Ġit Ġif Ġneed ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmessage ĠMessage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġsend ( message : ĠMessage ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReceive ĠReceive Ġmessage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmessage ĠMessage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreceive ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( message . typ ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyp . Emit Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandle Ġ= Ġ_ handles [ message . method ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handle Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ( message . param , Ġ{ Ġ}, Ġ{ Ġ_, Ġ_ Ġ-> Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyp . Deliver Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġmessage . method ?: return ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġmessage . id Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandle Ġ= Ġ_ handles [ method ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handle Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted Lock Ġ= ĠRe entrant Lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcompleted Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel Ġ= Ġhandle ( message . param , ĠNotify @{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( completed ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Notify ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ send ( Message ( typ Ġ= ĠTyp . Notify , Ġid Ġ= Ġid , Ġparam Ġ= Ġparam )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠReply @{ Ġparam , Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( completed ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Reply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cancel s . remove ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ send ( Message ( typ Ġ= ĠTyp . Ack , Ġid Ġ= Ġid , Ġparam Ġ= Ġparam , Ġerror Ġ= Ġerror )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cancel Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cancel s [ id ] Ġ= ĠCancel @{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( completed ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Cancel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cancel s . remove ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyp . Ack Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreply Ġ= Ġ_ replies [ message . id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reply Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreply ( message . param , Ġmessage . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyp . Notify Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotify Ġ= Ġ_ not ifies [ message . id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( notify Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ( message . param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyp . Cancel Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel Ġ= Ġ_ cancel s [ message . id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cancel Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ id Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġ_ not ifies Ġ= Ġmutable Map Of < Int , ĠNotify >() ĊĠĠĠ Ġprivate Ġval Ġ_ cancel s Ġ= Ġmutable Map Of < Int , ĠCancel >() ĊĠĠĠ Ġprivate Ġval Ġ_ replies Ġ= Ġmutable Map Of < Int , Ġ( param : ĠAny ?, Ġerror : ĠAny ?) Ġ-> ĠBoolean >() ĊĠĠĠ Ġprivate Ġval Ġ_ handles Ġ= Ġmutable Map Of < String , ĠHandle >() ĊĠĠĠ Ġprivate Ġval Ġ_ lock Ġ= ĠRe entrant Lock () ĊĠĠĠ Ġprivate Ġval Ġ_ send : ĠSend Ġ= Ġif Ġ( send Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ{ Ġmessage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġsend ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠTyp ĠMessage ĠType Ċ Ġ* Ċ Ġ* Ġ@ property Ġraw Value Ġraw Value Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠTyp Ċ Ġ*/ Ċ enum Ġclass ĠTyp ( val Ġraw Value : ĠInt ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEmit ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ constructor ĠCreate Ġempty ĠEmit ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠEmit ( 0 ), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDel iver ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ constructor ĠCreate Ġempty ĠDel iver ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠDel iver ( 1 ), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNotify ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ constructor ĠCreate Ġempty ĠNotify ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠNotify ( 2 ), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAck ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ constructor ĠCreate Ġempty ĠAck ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠAck ( 3 ), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ constructor ĠCreate Ġempty ĠCancel ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠCancel ( 4 ); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Raw Value ( raw Value : ĠInt ) Ġ= ĠTyp . values (). first Ġ{ Ġit . raw Value Ġ== Ġraw Value Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠMessage Ċ Ġ* Ċ Ġ* Ġ@ property Ġtyp ĠMessage Ġtype Ċ Ġ* Ġ@ property Ġid ĠMessage Ġid Ċ Ġ* Ġ@ property Ġmethod ĠMessage Ġmethod Ċ Ġ* Ġ@ property Ġparam ĠMessage Ġparam Ċ Ġ* Ġ@ property Ġerror ĠMessage Ġerror Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠMessage Ċ Ġ*/ Ċ class ĠMessage Ġconstructor ( ĊĠĠĠ Ġval Ġtyp : ĠTyp , ĊĠĠĠ Ġval Ġid : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġmethod : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġparam : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġerror : ĠAny ? Ġ= Ġnull Ċ ){ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġmutable Map Of < String , Any >() ĊĠĠĠĠĠĠĠ Ġv [" typ "] Ġ= Ġtyp . raw Value ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv [" id "] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( method Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv [" method "] Ġ= Ġmethod ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( param Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv [" param "] Ġ= Ġparam ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv [" error "] Ġ= Ġerror ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġv . toString () ĊĠĠĠ Ġ} Ċ }