All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlinx.jupyter.messaging.JupyterConnectionInternal.kt Maven / Gradle / Ivy

package org.jetbrains.kotlinx.jupyter.messaging

import org.jetbrains.kotlinx.jupyter.JupyterExecutor
import org.jetbrains.kotlinx.jupyter.api.libraries.JupyterConnection
import org.jetbrains.kotlinx.jupyter.api.libraries.RawMessage
import org.jetbrains.kotlinx.jupyter.protocol.JupyterSocket
import org.jetbrains.kotlinx.jupyter.startup.KernelConfig
import java.io.InputStream

interface JupyterConnectionInternal : JupyterConnection {
    val config: KernelConfig
    val contextMessage: RawMessage?

    val heartbeat: JupyterSocket
    val shell: JupyterSocket
    val control: JupyterSocket
    val stdin: JupyterSocket
    val iopub: JupyterSocket

    val messageId: List
    val sessionId: String
    val username: String

    val executor: JupyterExecutor
    val stdinIn: InputStream

    val debugPort: Int?

    fun sendStatus(status: KernelStatus, incomingMessage: RawMessage? = null)
    fun doWrappedInBusyIdle(incomingMessage: RawMessage? = null, action: () -> Unit)
    fun updateSessionInfo(message: RawMessage)
    fun setContextMessage(message: RawMessage?)
}

fun JupyterConnectionInternal.makeDefaultHeader(msgType: MessageType): MessageHeader {
    return makeHeader(msgType, sessionId = sessionId, username = username)
}

fun JupyterConnectionInternal.makeSimpleMessage(msgType: MessageType, content: MessageContent): Message {
    return Message(
        id = messageId,
        data = MessageData(
            header = makeDefaultHeader(msgType),
            content = content,
        ),
    )
}

fun JupyterSocket.sendMessage(msg: Message) {
    sendRawMessage(msg.toRawMessage())
}

fun JupyterConnectionInternal.sendOut(msg: RawMessage, stream: JupyterOutType, text: String) {
    iopub.sendMessage(makeReplyMessage(msg, header = makeHeader(MessageType.STREAM, msg), content = StreamResponse(stream.optionName(), text)))
}

fun JupyterConnectionInternal.sendSimpleMessageToIoPub(msgType: MessageType, content: MessageContent) {
    iopub.sendMessage(makeSimpleMessage(msgType, content))
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy