summaryrefslogtreecommitdiff
path: root/src/main/kotlin/NetworkPacketTransporterJavaNet.kt
diff options
context:
space:
mode:
authorEdoardo La Greca2025-06-18 19:14:50 +0200
committerEdoardo La Greca2025-06-18 19:14:50 +0200
commit5a2c35806d78d12d60d49511af2da6a21a91964b (patch)
tree2f1d2d9cd11976e6b488a022ec1d0c5f322a48dd /src/main/kotlin/NetworkPacketTransporterJavaNet.kt
parent13421c537773cae59a4ca1fcc798ed3820634139 (diff)
add all source code
Diffstat (limited to 'src/main/kotlin/NetworkPacketTransporterJavaNet.kt')
-rw-r--r--src/main/kotlin/NetworkPacketTransporterJavaNet.kt61
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