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() } }