ktor-http-cio / io.ktor.http.cio.websocket / WebSocketReader

WebSocketReader

class WebSocketReader : CoroutineScope

Class that continuously reads a byteChannel and converts into Websocket Frame exposing them in incoming.

Parameters

maxFrameSize - maximum frame size that could be read

Exceptions

FrameTooBigException

class FrameTooBigException : Exception, CopyableThrowable<FrameTooBigException>

Raised when the frame is bigger than allowed in a current websocket session

Constructors

<init>

WebSocketReader(byteChannel: ByteReadChannel, coroutineContext: <ERROR CLASS>, maxFrameSize: Long, pool: ObjectPool<ByteBuffer> = KtorDefaultPool)

Class that continuously reads a byteChannel and converts into Websocket Frame exposing them in incoming.

Properties

coroutineContext

val coroutineContext: <ERROR CLASS>

incoming

val incoming: ReceiveChannel<Frame>

Channel receiving Websocket's Frame objects read from byteChannel.

maxFrameSize

var maxFrameSize: Long

maximum frame size that could be read

Extension Functions

decodeChunked

fun CoroutineScope.decodeChunked(input: ByteReadChannel): DecoderJob
fun CoroutineScope.decodeChunked(input: ByteReadChannel, contentLength: Long): DecoderJob

Start a chunked stream decoder coroutine

parseMultipart

fun CoroutineScope.parseMultipart(input: ByteReadChannel, headers: HttpHeadersMap): ReceiveChannel<MultipartEvent>
fun CoroutineScope.parseMultipart(input: ByteReadChannel, contentType: CharSequence, contentLength: Long?): ReceiveChannel<MultipartEvent>
fun CoroutineScope.parseMultipart(boundaryPrefixed: ByteBuffer, input: ByteReadChannel, totalLength: Long?): ReceiveChannel<MultipartEvent>

Starts a multipart parser coroutine producing multipart events

pinger

fun CoroutineScope.pinger(outgoing: SendChannel<Frame>, periodMillis: Long, timeoutMillis: Long, pool: ObjectPool<ByteBuffer> = KtorDefaultPool): SendChannel<Pong>

Launch pinger coroutine on CoroutineScope that is sending ping every specified periodMillis to outgoing channel, waiting for and verifying client's pong frames. It is also handling timeoutMillis and sending timeout close frame

ponger

fun CoroutineScope.ponger(outgoing: SendChannel<Pong>, pool: ObjectPool<ByteBuffer> = KtorDefaultPool): SendChannel<Ping>

Launch a ponger actor job on the CoroutineScope sending pongs to outgoing channel. It is acting for every client's ping frame and replying with corresponding pong

startConnectionPipeline

fun CoroutineScope.startConnectionPipeline(input: ByteReadChannel, output: ByteWriteChannel, timeout: WeakTimeoutQueue, handler: suspend CoroutineScope.(request: Request, input: ByteReadChannel, output: ByteWriteChannel, upgraded: CompletableDeferred<Boolean>?) -> Unit): Job

Start connection HTTP pipeline invoking handler for every request. Note that handler could be invoked multiple times concurrently due to HTTP pipeline nature

startServerConnectionPipeline

fun CoroutineScope.startServerConnectionPipeline(connection: ServerIncomingConnection, timeout: WeakTimeoutQueue, handler: HttpRequestHandler): Job

Start connection HTTP pipeline invoking handler for every request. Note that handler could be invoked multiple times concurrently due to HTTP pipeline nature