package Ġorg . ke v em . rpc . module Ċ Ċ import Ġorg . ke v em . rpc . Standard RPC Ċ import Ġorg . ke v em . rpc . Test RPC Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠE vm Context ( ĊĠĠĠ Ġval Ġstandard Rpc : ĠStandard RPC , ĊĠĠĠ Ġval Ġtest Rpc : ĠTest RPC Ċ ) Ċ Ċ open Ġclass ĠRpc Request < T >( ĊĠĠĠ Ġval Ġjson rpc : ĠString , ĊĠĠĠ Ġval Ġmethod : ĠString , ĊĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠ Ġval Ġparams : ĠT Ċ ) Ċ Ċ open Ġclass ĠRpc Response < T >( ĊĠĠĠ Ġval Ġjson rpc : ĠString ?, ĊĠĠĠ Ġval Ġid : ĠLong ?, ĊĠĠĠ Ġval Ġresult : ĠT Ċ ) Ġ{ ĊĠĠĠ Ġconstructor ( request : ĠRpc Request <* >, Ġresult : ĠT ) Ġ: Ġthis ( request . jsonrpc , Ġrequest . id , Ġresult ) Ċ } Ċ Ċ interface ĠRpc Module Ġ{ ĊĠĠĠ Ġfun Ġsupported (): ĠMap < String , ĠK Class < Rpc Request <* >>> ĊĊĠĠĠ Ġfun Ġprocess ( request : ĠRpc Request <* >, Ġcontext : ĠE vm Context ): ĠRpc Response < *> ? Ċ } Ċ Ċ class ĠModule ( private Ġval Ġmethods : ĠList < Method < ĠRpc Request <* >, Ġ ĠRpc Response <* >> >) Ġ: ĠRpc Module Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsupported (): ĠMap < String , ĠK Class < Rpc Request <* >>> Ġ= ĊĠĠĠĠĠĠĠ Ġmethods . map Ġ{ ĠPair ( it . method , Ġit . request Class ) Ġ}. toMap () ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( request : ĠRpc Request <* >, Ġcontext : ĠE vm Context ): ĠRpc Response < *> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmethods . find Ġ{ Ġrequest :: class Ġ== Ġit . request Class Ġ} ?. process ( request , Ġcontext ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠMethod < T Ġ: ĠRpc Request <* >, ĠU Ġ: ĠRpc Response < *> >( ĊĠĠĠ Ġval Ġmethod : ĠString , ĊĠĠĠ Ġval Ġrequest Class : ĠK Class < T >, ĊĠĠĠ Ġval Ġresponse Class : ĠK Class < U > Ċ ) Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġprocess ( request : ĠT , Ġcontext : ĠE vm Context ): ĠU ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠRpc Request <* >, ĠU Ġ: ĠRpc Response <* >> Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Class : ĠK Class < T >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Class : ĠK Class < U >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġop : Ġ( r : ĠT , Ġcontext : ĠE vm Context ) Ġ-> ĠU ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġobject Ġ: ĠMethod < T , ĠU >( method , Ġrequest Class , Ġresponse Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprocess ( request : ĠT , Ġcontext : ĠE vm Context ): ĠU Ġ= Ġop ( request , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ