package Ġio . ktor . websocket Ċ Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . c io .* Ċ import Ġkotlinx . coroutines . experimental .* Ċ import Ġkotlinx . coroutines . experimental . channels .* Ċ import Ġkotlinx . coroutines . experimental . io .* Ċ import Ġkotlinx . io . pool .* Ċ import Ġkotlin . coroutines . experimental .* Ċ Ċ internal Ġclass ĠRaw WebSocket Impl ( override Ġval Ġcall : ĠApplication Call , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Channel : ĠByte Read Channel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Channel : ĠByte Write Channel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpool : ĠObject Pool < ByteBuffer > Ġ= ĠK tor Default Pool , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine Context : ĠCor outine Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Context : ĠCor outine Context Ċ ) Ġ: ĠWebSocket Session Ġ{ ĊĠĠĠ Ġprivate Ġval Ġjob Ġ= ĠJob () ĊĊĠĠĠ Ġprivate Ġval Ġwriter Ġ= Ġ@ Suppress (" DE PREC ATION ") ĠWebSocket Writer ( write Channel , Ġjob , Ġengine Context , Ġpool ) ĊĠĠĠ Ġprivate Ġval Ġreader Ġ= Ġ@ Suppress (" DE PREC ATION ") ĠWebSocket Reader ( read Channel , Ġthis :: max Frame Size , Ġjob , Ġengine Context , Ġpool ) ĊĊĠĠĠ Ġoverride Ġval Ġapplication : ĠApplication Ġget () Ġ= Ġcall . application ĊĊĠĠĠ Ġoverride Ġval Ġincoming : ĠReceive Channel < Frame > Ġget () Ġ= Ġreader . incoming ĊĠĠĠ Ġoverride Ġval Ġoutgoing : ĠSend Channel < Frame > Ġget () Ġ= Ġwriter . outgoing ĊĊĠĠĠ Ġoverride Ġvar Ġmax Frame Size : ĠLong Ġ= ĠInt . MAX _ VALUE . to Long () ĊĊĠĠĠ Ġoverride Ġvar Ġmask ing : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwriter . mask ing ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . mask ing Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart ( handler : Ġsuspend ĠWebSocket Session .( WebSocket Upgrade . Dispatch ers ) Ġ-> ĠUnit ): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlaunch ( engine Context Ġ+ Ġjob ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler ( WebSocket Upgrade . Dispatch ers ( engine Context , Ġuser Context )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġterminate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġflush () Ġ= Ġwriter . flush () ĊĊĠĠĠ Ġoverride Ġfun Ġterminate () Ġ{ ĊĠĠĠĠĠĠĠ Ġjob . cancel ( Cancellation Exception (" Web Sock ed Handler Ġterminated Ġnormally ")) ĊĠĠĠ Ġ} Ċ }