/* Ċ Ġ* ĠCopyright Ġ 2 0 1 5 - 2 0 2 0 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// 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 Ġio . r socket . kotlin . core Ċ Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . features .* Ċ import Ġio . ktor . client . statement .* Ċ import Ġio . ktor . http . c io . websocket .* Ċ import Ġio . ktor . util .* Ċ import Ġio . r socket . kotlin .* Ċ import Ġio . r socket . kotlin . connection .* Ċ import Ġio . r socket . kotlin . flow .* Ċ import Ġio . r socket . kotlin . keep alive .* Ċ import Ġio . r socket . kotlin . payload .* Ċ import Ġio . r socket . kotlin . plugin .* Ċ Ċ class ĠR Socket Client Support ( ĊĠĠĠ Ġprivate Ġval Ġconfiguration : ĠR Socket Connector Configuration Ċ ) Ġ{ ĊĊĠĠĠ Ġclass ĠConfig Ġinternal Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġplugin : ĠPlugin Ġ= ĠPlugin () ĊĠĠĠĠĠĠĠ Ġvar Ġfragment ation : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġkeep Alive : ĠKeep Alive Ġ= ĠKeep Alive () ĊĠĠĠĠĠĠĠ Ġvar Ġpayload MimeType : ĠPayload MimeType Ġ= ĠPayload MimeType () ĊĠĠĠĠĠĠĠ Ġvar Ġsetup Payload : ĠPayload Ġ= ĠPayload . Empty ĊĠĠĠĠĠĠĠ Ġvar Ġrequest Strategy : Ġ() Ġ-> ĠRequest Strategy Ġ= ĠRequest Strategy . Default ĊĊĠĠĠĠĠĠĠ Ġvar Ġaccept or : ĠR Socket Accept or Ġ= Ġ{ ĠR Socket RequestHandler Ġ{ Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbuild (): ĠR Socket Client Support Ġ= ĠR Socket Client Support ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR Socket Connector Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Ġ= Ġplugin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment ation Ġ= Ġfragment ation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Alive Ġ= Ġkeep Alive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload MimeType Ġ= Ġpayload MimeType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Payload Ġ= Ġsetup Payload , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Strategy Ġ= Ġrequest Strategy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccept or Ġ= Ġaccept or ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFeature Ġ: ĠHttpClient Feature < Config , ĠR Socket Client Support > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkey Ġ= ĠAttribute Key < R Socket Client Support >(" R Socket ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprepare ( block : ĠConfig . () Ġ-> ĠUnit ): ĠR Socket Client Support Ġ= ĠConfig (). apply ( block ). build () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinstall ( feature : ĠR Socket Client Support , Ġscope : ĠHttpClient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . response Pipeline . intercept ( HttpResponse Pipeline . After ) Ġ{ Ġ( info , Ġsession ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( session Ġ! is ĠWebSocket Session ) Ġreturn @ intercept ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info . type Ġ!= ĠR Socket :: class ) Ġreturn @ intercept ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Socket Ġ= Ġsession . connection . connect Client ( feature . configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠHttpResponse Container ( info , Ġr Socket ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproceed With ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ