class DefaultWebSocketSessionImpl : DefaultWebSocketSession, WebSocketSession
Default web socket session implementation that handles ping-pongs, close sequence and frame fragmentation
DefaultWebSocketSessionImpl(raw: WebSocketSession, pingInterval: Long = -1L, timeoutMillis: Long = 15000L, pool: ObjectPool<ByteBuffer> = KtorDefaultPool)
Default web socket session implementation that handles ping-pongs, close sequence and frame fragmentation |
val closeReason: Deferred<CloseReason?>
A close reason for this session. It could be |
|
val incoming: ReceiveChannel<Frame>
Incoming frames channel |
|
val outgoing: SendChannel<Frame>
Outgoing frames channel. It could have limited capacity so sending too much frames may lead to suspension at corresponding send invocations. It also may suspend if a peer doesn't read frames for some reason. |
|
var pingIntervalMillis: Long
Ping interval or |
|
var timeoutMillis: Long
A timeout to wait for pong reply to ping otherwise the session will be terminated immediately.
It doesn't have any effect if pingIntervalMillis is |
suspend fun close(cause: Throwable?): Unit
Close session with the specified cause or with no reason if |
|
suspend fun goingAway(message: String = "Server is going down"): Unit
Close session with GOING_AWAY reason |
suspend fun WebSocketSession.close(reason: CloseReason): Unit
Send a close frame with the specified reason. May suspend if outgoing channel is full or may throw an exception if it is already closed. The specified reason could be ignored if there was already close frame sent (for example in reply to a peer close frame). |
|
fun CoroutineScope.decodeChunked(input: ByteReadChannel): DecoderJob
Start a chunked stream decoder coroutine |
|
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 |
|
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 |
|
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 |
|
suspend fun DefaultWebSocketSession.run(handler: suspend DefaultWebSocketSession.() -> Unit): Unit |
|
suspend fun WebSocketSession.send(content: String): Unit
Enqueues a text frame for sending with the specified content. suspend fun WebSocketSession.send(content: ByteArray): Unit
Enqueues a final binary frame for sending with the specified content. |
|
fun CoroutineScope.startConnectionPipeline(input: ByteReadChannel, output: ByteWriteChannel, 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 |