package Ġcn . zen li u . ktor . redis čĊč Ċ import Ġio . ktor . application . Application Call Pipeline č Ċ import Ġio . ktor . application . Application Feature č Ċ import Ġio . ktor . util . Attribute Key č Ċ import Ġio . lett uce . core . Redis Client č Ċ import Ġio . lett uce . core . codec . Redis Codec č Ċ import Ġjava . nio . ByteBuffer č Ċ import Ġjava . nio . charset . Charset čĊč Ċ class ĠRedis Factory ( val Ġconf : ĠRedis Configuration ) Ġ{ čĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġconfiguration Ġof Ġredis Ġref [ lett uce ]( https :// github . com / lett uce - io / lett uce - core ) čĊĠĠĠĠ Ġ* Ġ@ property Ġurl ĠString čĊĠĠĠĠ Ġ* Ġ@ constructor čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġdata Ġclass ĠRedis Configuration ( čĊĠĠĠĠĠĠĠ Ġvar Ġurl : ĠString čĊĠĠĠ Ġ) čĊčĊĠĠĠ Ġfun Ġnew Client () Ġ= ĠRedis Client . create ( conf . url ) čĊčĊĠĠĠ Ġcompanion čĊĠĠĠ Ġobject ĠFeature Ġ: ĠApplication Feature < Application Call Pipeline , ĠRedis Configuration , ĠRedis Factory > Ġ{ čĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkey : ĠAttribute Key < Redis Factory > Ġ= ĠAttribute Key (" Redis Factory ") čĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ factory : ĠRedis Factory čĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġget () Ġ= Ġ_ factory čĊĠĠĠĠĠĠĠ Ġval Ġclient Ġby Ġlazy Ġ{ Ġfactory . new Client () Ġ} čĊĠĠĠĠĠĠĠ Ġfun Ġ< K Ġ: ĠAny , ĠV Ġ: ĠAny > Ġnew Connection ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Encoder : Ġ( K ) Ġ-> ĠByteBuffer , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Decoder : Ġ( ByteBuffer ) Ġ-> ĠK , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Encoder : Ġ( V ) Ġ-> ĠByteBuffer , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Decoder : Ġ( ByteBuffer ) Ġ-> ĠV čĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġclient . connect ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Codec < K , ĠV >( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Encoder , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Decoder , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Encoder , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Decoder čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠĠĠĠĠ Ġfun Ġ< K Ġ: ĠAny , ĠV Ġ: ĠAny > Ġnew Connection ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcodec : ĠRedis Codec < K , ĠV > čĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġclient . connect ( codec ) čĊčĊĠĠĠĠĠĠĠ Ġfun Ġ< K Ġ: ĠAny , ĠV Ġ: ĠAny > Ġnew Async Client ( codec : ĠRedis Codec < K , ĠV >) Ġ= Ġnew Connection ( codec ). async () čĊĠĠĠĠĠĠĠ Ġfun Ġ< K Ġ: ĠAny , ĠV Ġ: ĠAny > Ġnew Sync Client ( codec : ĠRedis Codec < K , ĠV >) Ġ= Ġnew Connection ( codec ). sync () čĊĠĠĠĠĠĠĠ Ġfun Ġ< K Ġ: ĠAny , ĠV Ġ: ĠAny > Ġnew Client ( codec : ĠRedis Codec < K , ĠV >) Ġ= Ġnew Connection ( codec ). sync () čĊĠĠĠĠĠĠĠ Ġfun Ġ< K Ġ: ĠAny , ĠV Ġ: ĠAny > Ġnew Reactive Client ( codec : ĠRedis Codec < K , ĠV >) Ġ= Ġnew Connection ( codec ). reactive () čĊčĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinstall ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline : ĠApplication Call Pipeline , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure : ĠRedis Configuration . () Ġ-> ĠUnit čĊĠĠĠĠĠĠĠ Ġ): ĠRedis Factory Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRedis Factory ( Redis Configuration (" "). apply ( configure )). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Feature ._ factory Ġ= Ġthis čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠĠĠĠĠ Ġ/** čĊĠĠĠĠĠĠĠĠ Ġ* Ġcreate ĠRedis Codec Ġby Ġlambda čĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġk 2 b Ġ( K ) Ġ-> ĠByteBuffer čĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġb 2 k Ġ( ByteBuffer ) Ġ-> ĠK čĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġv 2 b Ġ( V ) Ġ-> ĠByteBuffer čĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġb 2 v Ġ( ByteBuffer ) Ġ-> ĠV čĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠRedis Codec < K , ĠV > čĊĠĠĠĠĠĠĠĠ Ġ*/ čĊĠĠĠĠĠĠĠ Ġfun Ġ< K Ġ: ĠAny , ĠV Ġ: ĠAny > Ġcreate Codec ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġk 2 b : Ġ( K ) Ġ-> ĠByteBuffer , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġb 2 k : Ġ( ByteBuffer ) Ġ-> ĠK , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġv 2 b : Ġ( V ) Ġ-> ĠByteBuffer , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġb 2 v : Ġ( ByteBuffer ) Ġ-> ĠV čĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġobject Ġ: ĠRedis Codec < K , ĠV > Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdecode Key ( bytes : ĠByteBuffer ): ĠK Ġ= Ġb 2 k . invoke ( bytes ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġencode Value ( value : ĠV ): ĠByteBuffer Ġ= Ġv 2 b . invoke ( value ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġencode Key ( key : ĠK ): ĠByteBuffer Ġ= Ġk 2 b . invoke ( key ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdecode Value ( bytes : ĠByteBuffer ): ĠV Ġ= Ġb 2 v . invoke ( bytes ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġfun ĠByteBuffer . decode String ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ): ĠString Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcharset . decode ( this ). toString () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} č Ċ } čĊ