diff --git a/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageReader.kt b/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageReader.kt index c0b87f4..5b8ab25 100644 --- a/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageReader.kt +++ b/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageReader.kt @@ -1,6 +1,5 @@ package com.shr4pnel.ferretirc.net -import com.shr4pnel.ferretirc.net.messages.MessageIO import com.shr4pnel.ferretirc.net.messages.ServerMessage import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.slf4j.logger @@ -9,13 +8,15 @@ import io.ktor.network.sockets.openReadChannel import io.ktor.utils.io.ByteReadChannel import io.ktor.utils.io.readLineStrict import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.launch import org.slf4j.helpers.NOPLogger -class MessageReader(socket: Socket, scope: CoroutineScope, enableLogging: Boolean = false) : MessageIO(socket, scope) { +class MessageReader(val socket: Socket, val scope: CoroutineScope, enableLogging: Boolean = false) { private lateinit var receive: ByteReadChannel + val incomingMessages = Channel(Channel.BUFFERED) private val messageBuffer = MutableSharedFlow(0, 64) val sharedMessageBuffer = messageBuffer.asSharedFlow() val parser = MessageParser(incomingMessages, enableLogging) @@ -31,7 +32,7 @@ class MessageReader(socket: Socket, scope: CoroutineScope, enableLogging: Boolea } } - override fun start() { + fun start() { scope.launch { receive = socket.openReadChannel() while (true) { diff --git a/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageWriter.kt b/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageWriter.kt index f94eca9..d77395a 100644 --- a/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageWriter.kt +++ b/src/main/kotlin/com/shr4pnel/ferretirc/net/MessageWriter.kt @@ -1,6 +1,6 @@ package com.shr4pnel.ferretirc.net -import com.shr4pnel.ferretirc.net.messages.MessageIO +import com.shr4pnel.ferretirc.net.messages.ClientMessage import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.slf4j.logger import io.ktor.network.sockets.Socket @@ -8,19 +8,21 @@ import io.ktor.network.sockets.openWriteChannel import io.ktor.utils.io.ByteWriteChannel import io.ktor.utils.io.writeFully import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.launch import org.slf4j.helpers.NOPLogger -class MessageWriter(socket: Socket, scope: CoroutineScope, enableLogging: Boolean = false) : MessageIO(socket, scope) { +class MessageWriter(val socket: Socket, val scope: CoroutineScope, enableLogging: Boolean = false) { private lateinit var send: ByteWriteChannel private val logger = if (enableLogging) KotlinLogging.logger {} else KotlinLogging.logger(NOPLogger.NOP_LOGGER) + val outgoingMessages = Channel(Channel.BUFFERED) - override fun start() = + fun start() = scope.launch { send = socket.openWriteChannel() for (msg in outgoingMessages) { - logger.debug { "Sending: ${msg.toWireIntermediate()}" } + logger.debug { "[C->S]: Sending ${msg.toWireIntermediate()}" } send.writeFully(msg.toWire()) send.flush() }