/* Ċ * ĠCopyright Ġ 2 0 1 4 - 2 0 2 1 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ */ Ċ Ċ package Ġio . ktor . client . plugins . websocket Ċ Ċ import Ġio . ktor . client . call .* Ċ import Ġio . ktor . client . plugins .* Ċ import Ġio . ktor . serialization .* Ċ import Ġio . ktor . util . reflect .* Ċ import Ġio . ktor . utils . io .* Ċ import Ġio . ktor . websocket .* Ċ import Ġio . ktor . websocket . serialization .* Ċ Ċ /** Ċ Ġ* ĠClient Ġspecific Ġ[ WebSocket Session ]. Ċ Ġ*/ Ċ public Ġinterface ĠClient WebSocket Session Ġ: ĠWebSocket Session Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ HttpClient Call ] Ġassociated Ġwith Ġsession . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġcall : ĠHttpClient Call Ċ } Ċ Ċ /** Ċ Ġ* ĠClient Specific Ġ[ Default WebSocket Session ]. Ċ Ġ*/ Ċ public Ġclass ĠDefault Client WebSocket Session ( ĊĠĠĠ Ġoverride Ġval Ġcall : ĠHttpClient Call , ĊĠĠĠ Ġdelegate : ĠDefault WebSocket Session Ċ ) Ġ: ĠClient WebSocket Session , ĠDefault WebSocket Session Ġby Ġdelegate Ċ Ċ internal Ġclass ĠDeleg ating Client WebSocket Session ( ĊĠĠĠ Ġoverride Ġval Ġcall : ĠHttpClient Call , ĊĠĠĠ Ġsession : ĠWebSocket Session Ċ ) Ġ: ĠClient WebSocket Session , ĠWebSocket Session Ġby Ġsession Ċ Ċ /** Ċ Ġ* ĠConverter Ġfor Ġweb Ġsocket Ġsession Ċ Ġ*/ Ċ public Ġval ĠDefault Client WebSocket Session . converter : ĠWeb socket Content Converter ? ĊĠĠĠ Ġget () Ġ= Ġcall . client ?. plugin OrNull ( WebSocket s )?. content Converter Ċ Ċ /** Ċ Ġ* ĠSerial izes Ġ[ data ] Ġto Ġa Ġframe Ġand Ġen queues Ġthis Ġframe . Ċ Ġ* ĠMay Ġsuspend Ġif Ġthe Ġoutgoing Ġqueue Ġis Ġfull . Ċ Ġ* ĠIf Ġthe Ġoutgoing Ġchannel Ġis Ġalready Ġclosed , Ġthrows Ġan Ġexception , Ġso Ġit Ġis Ġimpossible Ġto Ġtransfer Ġany Ġmessage . Ċ Ġ* ĠFrame s Ġsent Ġafter Ġa ĠClose Ġframe Ġare Ġsilently Ġignored . Ċ Ġ* ĠNote Ġthat Ġa ĠClose Ġframe Ġcould Ġbe Ġsent Ġautomatically Ġin Ġreply Ġto Ġa Ġpeer 's ĠClose Ġframe Ġunless Ġit Ġis Ġa Ġraw ĠWebSocket Ġsession . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠWeb socket Converter NotFoundException Ġif Ġno Ġ[ content Converter ] Ġis Ġfound Ġfor Ġthe Ġ[ WebSocket s ] Ġplugin Ċ Ġ*/ Ċ public Ġsuspend Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠDefault Client WebSocket Session . send Serialized ( data : ĠT ) Ġ{ ĊĠĠĠ Ġval Ġconverter Ġ= Ġconverter ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠWeb socket Converter NotFoundException (" No Ġconverter Ġwas Ġfound Ġfor Ġwebsocket ") ĊĊĠĠĠ Ġsend Serialized Base ( ĊĠĠĠĠĠĠĠ Ġdata , ĊĠĠĠĠĠĠĠ Ġconverter , ĊĠĠĠĠĠĠĠ Ġcall . request . headers . suit able Charset () ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠDe queues Ġa Ġframe Ġand Ġde serial izes Ġit Ġto Ġthe Ġtype Ġ[ T ] Ġusing ĠWebSocket Ġcontent Ġconverter . Ċ Ġ* ĠMay Ġthrow Ġan Ġexception Ġ[ Websocket Deserialize Exception ] Ġif Ġthe Ġconverter Ġcan 't Ġdeserialize Ġframe Ġdata Ġto Ġtype Ġ[ T ]. Ċ Ġ* ĠMay Ġthrow Ġ[ Websocket Deserialize Exception ] Ġif Ġthe Ġreceived Ġframe Ġtype Ġis Ġnot Ġ[ Frame . Text ] Ġor Ġ[ Frame . Binary ]. Ċ Ġ* ĠIn Ġthis Ġcase , Ġ[ Websocket Deserialize Exception . frame ] Ġcontains Ġthe Ġreceived Ġframe . Ċ Ġ* ĠMay Ġthrow Ġ[ Closed Receive Channel Exception ] Ġif Ġa Ġchannel Ġwas Ġclosed Ċ Ġ* Ċ Ġ* Ġ@ throws ĠWeb socket Converter NotFoundException Ġif Ġno Ġ[ content Converter ] Ġis Ġfound Ġfor Ġthe Ġ[ WebSocket s ] Ġplugin Ċ Ġ* Ġ@ throws ĠWeb socket Deserialize Exception Ġif Ġthe Ġreceived Ġframe Ġcan 't Ġbe Ġdeserialized Ġto Ġtype Ġ[ T ] Ċ Ġ*/ Ċ public Ġsuspend Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠDefault Client WebSocket Session . receive Deserial ized (): ĠT Ġ{ ĊĠĠĠ Ġval Ġconverter Ġ= Ġconverter ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠWeb socket Converter NotFoundException (" No Ġconverter Ġwas Ġfound Ġfor Ġwebsocket ") ĊĊĠĠĠ Ġreturn Ġreceive Deserial ized Base ( ĊĠĠĠĠĠĠĠ Ġconverter , ĊĠĠĠĠĠĠĠ Ġcall . request . headers . suit able Charset () ĊĠĠĠ Ġ) Ċ } Ċ