@ file : Suppress (" FunctionName ") Ċ Ċ package Ġpt . pak 3 nu h . hol ly wood . system . actor . message . serializer Ċ Ċ import Ġpt . pak 3 nu h . hol ly wood . actor . message . Message Ċ import Ġpt . pak 3 nu h . hol ly wood . actor . message . Response Ċ import Ġpt . pak 3 nu h . hol ly wood . actor . message . serializer . Deserializer Ċ import Ġpt . pak 3 nu h . hol ly wood . actor . message . serializer . Serializer Ċ import Ġpt . pak 3 nu h . hol ly wood . system . actor . message . serializer . external izable . External izable Ser Des Ċ import Ġpt . pak 3 nu h . hol ly wood . system . actor . message . serializer . kotlin . Kotlin Ser Des Discovery Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ Ċ private Ġval Ġserializer Strategy Ġ= ĠL ate Bind Strategy ( Default Serializer (), ĠExternal izable Ser Des (), ĠKotlin Ser Des Discovery ()) Ċ fun ĠSerializer (): ĠSerializer Ġ= Ġserializer Strategy Ċ fun ĠDeserial izer (): ĠDeserial izer Ġ= Ġserializer Strategy Ċ Ċ // Ġin Ġthe Ġfuture Ġthis Ġwill Ġchange Ġto Ġa Ġmuch Ġmore Ġadvanced Ġstrategy Ċ // Ġthe Ġdream Ġis Ġto Ġserialize Ġeach Ġparameter Ġwith Ġthe Ġbest Ġserializer Ġand Ġwith Ġa Ġsingle Ġbyte Ġarray Ċ /** Ċ Ġ* ĠMessaging Ġstrategy Ġthat Ġdec ides Ġthe Ġserializer Ġon Ġeach Ġmessage . Ċ Ġ*/ Ċ internal Ġclass ĠL ate Bind Strategy ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault Serializer : ĠInternal Ser Des , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexternal izable Serializer : ĠInternal Ser Des , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkotlin Serializer : ĠInternal Ser Des Ċ ) Ġ: ĠSerializer , ĠDeserial izer Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( message : ĠMessage ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠByteArrayOutputStream (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġget Serializer ( message ) Ġ{ Ġv , Ġs Ġ-> Ġs . supports ( v ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( pair . first . ordinal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpair . second . serialize ( message , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ}. toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( response : ĠResponse ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠByteArrayOutputStream (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġget Serializer ( response ) Ġ{ Ġv , Ġs Ġ-> Ġs . supports ( v ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( pair . first . ordinal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpair . second . serialize ( response , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ}. toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġget Serializer ( value : ĠT , Ġsupports Fun : Ġ( T , ĠInternal Ser Des ) Ġ-> ĠBoolean ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġsupports Fun ( value , Ġexternal izable Serializer ) Ġ-> ĠStrategy Type . External izable Ġto Ġexternal izable Serializer ĊĠĠĠĠĠĠĠ Ġsupports Fun ( value , Ġkotlin Serializer ) Ġ-> ĠStrategy Type . Kotlin Ġto Ġkotlin Serializer ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠStrategy Type . Default Ġto Ġdefault Serializer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Message ( byteArray : ĠByteArray ): ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ ĠByteArrayInputStream ( byteArray ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġit . read () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( Strategy Type . values ()[ type ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrategy Type . Kotlin Ġ-> Ġkotlin Serializer . deserialize Message ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrategy Type . External izable Ġ-> Ġexternal izable Serializer . deserialize Message ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrategy Type . Default Ġ-> Ġdefault Serializer . deserialize Message ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Response ( byteArray : ĠByteArray ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ ĠByteArrayInputStream ( byteArray ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġit . read () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( Strategy Type . values ()[ type ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrategy Type . Kotlin Ġ-> Ġkotlin Serializer . deserialize Response ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrategy Type . External izable Ġ-> Ġexternal izable Serializer . deserialize Response ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrategy Type . Default Ġ-> Ġdefault Serializer . deserialize Response ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġenum Ġclass ĠStrategy Type Ġ{ ĊĠĠĠĠĠĠĠ ĠDefault , ĠExternal izable , ĠKotlin ĊĠĠĠ Ġ} Ċ } Ċ