/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠJ ason ĠMon k Ċ Ġ* ĠĊ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* ĠĊ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . mon kop edia . ks rpc Ċ Ċ import Ġcom . mon kop edia . ks rpc . internal . Http Packet Ex ch anger Ċ import Ġcom . mon kop edia . ks rpc . internal . Websocket Packet Channel Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . features . websocket . web Socket Session Ċ import Ġio . ktor . http . URL Protocol Ċ import Ġio . ktor . http . take From Ċ import Ġkotlinx . serialization . Serializable Ċ Ċ const Ġval ĠK SR PC _ BINARY : ĠString Ġ= Ġ" K SR PC _ BINARY " Ċ Ċ enum Ġclass ĠK sr pc Type Ġ{ ĊĠĠĠ ĠEX E , ĊĠĠĠ ĠSOCKET , ĊĠĠĠ ĠHTTP , ĊĠĠĠ ĠWEB SOCKET , ĊĠĠĠ ĠLOCAL Ċ } Ċ Ċ @ Serializable Ċ data Ġclass ĠK sr pc Uri ( ĊĠĠĠ Ġval Ġtype : ĠK sr pc Type , ĊĠĠĠ Ġval Ġpath : ĠString , Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpath ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠString . to K sr pc Uri (): ĠK sr pc Uri Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġstart sWith (" http :// ") Ġ-> ĠK sr pc Uri ( K sr pc Type . HTTP , Ġthis ) ĊĠĠĠ Ġstart sWith (" https :// ") Ġ-> ĠK sr pc Uri ( K sr pc Type . HTTP , Ġthis ) ĊĠĠĠ Ġstart sWith (" ks rpc :// ") Ġ-> ĠK sr pc Uri ( K sr pc Type . SOCKET , Ġthis ) ĊĠĠĠ Ġstart sWith (" ws :// ") Ġ-> ĠK sr pc Uri ( K sr pc Type . WEB SOCKET , Ġthis ) ĊĠĠĠ Ġstart sWith (" local :// ") Ġ-> ĠK sr pc Uri ( K sr pc Type . LOCAL , Ġthis . substring (" local :// ". length )) ĊĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unable Ġto Ġparse Ġ$ this ") Ċ } Ċ Ċ expect Ġsuspend Ġfun ĠK sr pc Uri . connect ( ĊĠĠĠ Ġclient Factory : Ġ() Ġ-> ĠHttpClient Ġ= Ġ{ ĠHttpClient Ġ{ Ġ} Ġ}, Ċ ): ĠSerialized Channel Ċ Ċ internal Ġfun ĠHttpClient . as Packet Channel ( baseUrl : ĠString ) Ġ= ĠHttp Packet Ex ch anger ( this , ĠbaseUrl . trim End ('/ ')) Ċ fun ĠHttpClient . as Channel ( baseUrl : ĠString ): ĠSerialized Channel Ġ= Ġas Packet Channel ( baseUrl ) Ċ Ċ internal Ġsuspend Ġfun ĠHttpClient . as Websocket Packets ( baseUrl : ĠString ) Ġ= ĊĠĠĠ ĠWeb socket Packet Channel ( web Socket Session Ġ{ ĊĠĠĠĠĠĠĠ Ġurl . take From ( baseUrl . trim End ('/ ')) ĊĠĠĠĠĠĠĠ Ġurl . protocol Ġ= ĠURL Protocol . WS ĊĠĠĠ Ġ}) Ċ Ċ suspend Ġfun ĠHttpClient . as Websocket Channel ( baseUrl : ĠString ): ĠSerialized Channel Ġ= ĊĠĠĠ Ġas Websocket Packets ( baseUrl ) Ċ