diff options
author | Edoardo La Greca | 2025-06-18 19:14:50 +0200 |
---|---|---|
committer | Edoardo La Greca | 2025-06-18 19:14:50 +0200 |
commit | 5a2c35806d78d12d60d49511af2da6a21a91964b (patch) | |
tree | 2f1d2d9cd11976e6b488a022ec1d0c5f322a48dd /src/main/kotlin/NetworkPacketTransporterJavaNet.kt | |
parent | 13421c537773cae59a4ca1fcc798ed3820634139 (diff) |
add all source code
Diffstat (limited to 'src/main/kotlin/NetworkPacketTransporterJavaNet.kt')
-rw-r--r-- | src/main/kotlin/NetworkPacketTransporterJavaNet.kt | 61 |
1 files changed, 61 insertions, 0 deletions
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<Byte>) { + this.outStream.write(payload.toByteArray()) + } + + override fun receiveUntil(untilByte: Byte): List<Byte> { + var stop = false + val payload: MutableList<Byte> = 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<Byte> { + return this.inStream.readNBytes(length.toInt()).toList() + } +}
\ No newline at end of file |