From 5a2c35806d78d12d60d49511af2da6a21a91964b Mon Sep 17 00:00:00 2001 From: Edoardo La Greca Date: Wed, 18 Jun 2025 19:14:50 +0200 Subject: add all source code --- src/main/kotlin/NetworkPacketTransporterJavaNet.kt | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/main/kotlin/NetworkPacketTransporterJavaNet.kt (limited to 'src/main/kotlin/NetworkPacketTransporterJavaNet.kt') diff --git a/src/main/kotlin/NetworkPacketTransporterJavaNet.kt b/src/main/kotlin/NetworkPacketTransporterJavaNet.kt new file mode 100644 index 0000000..6badc3d --- /dev/null +++ b/src/main/kotlin/NetworkPacketTransporterJavaNet.kt @@ -0,0 +1,61 @@ +import java.io.InputStream +import java.io.OutputStream +import java.net.Socket + +/* +TODO: + - add TLS support +*/ + +/** + * An implementation of [NetworkPacketTransporter] written using the [java.net] package. + */ +class NetworkPacketTransporterJavaNet : NetworkPacketTransporter { + /** + * The connection's socket. + */ + private val socket: Socket = Socket(address, port.toInt()) + + /** + * The connection's input stream. + */ + private val inStream: InputStream = this.socket.inputStream + + /** + * The connection's output stream. + */ + private val outStream: OutputStream = this.socket.outputStream + + constructor(address: String, port: UShort) : super(address, port) + constructor(fullAddress: String) : super(fullAddress) + + override fun close() { + if (this.socket.isClosed) { + return + } + this.socket.close() + } + + override fun transmit(payload: List) { + this.outStream.write(payload.toByteArray()) + } + + override fun receiveUntil(untilByte: Byte): List { + var stop = false + val payload: MutableList = MutableList(0, { 0 }) + while (!stop) { + val b = this.inStream.readNBytes(1)[0] + if (b == untilByte) { + stop = true + continue + } else { + payload.add(b) + } + } + return payload + } + + override fun receiveFixed(length: ULong): List { + return this.inStream.readNBytes(length.toInt()).toList() + } +} \ No newline at end of file -- cgit v1.2.3