package org.opendc.common.utils import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream import java.io.File import java.io.IOException import java.io.InputStream import java.io.OutputStream import java.net.Socket import java.sql.Connection /** * @author Mateusz * @property name * @property backlog the amount of connections to accept * @property address IPv4 address * @property port * @property postgresql Postgresql port * @property username Postgresql user * @property password Postgresql password * @property database Postgresql database * @property topic Kafka topic * @property kafka Kafka port */ @Serializable public data class Config( val name: String = "", var backlog: Int = 0, val address: String = "", val port: Int = 0, val postgresql: Int = 0, val username : String = "", val password : String = "", val database: String = "", val topic : String = "", val kafka: Int = 0, ){ public companion object{ public var input: InputStream? = null public var output: OutputStream? = null public var connection : Connection? = null public var kafka : Kafka? = null public var database : PostgresqlDB? = null public var socket: Socket? = null public fun setConfigSocket(socket: Socket?){ this.socket = socket try { input = socket?.getInputStream() output = socket?.getOutputStream() } catch (e: IOException){ print("${e.message}") } } public fun getConfigReader() : InputStream? { return input } public fun getConfigWriter() : OutputStream? { return output } public fun setKafkaInstance(kafka : Kafka) { this.kafka = kafka } public fun getKafkaInstance() : Kafka? { return this.kafka } public fun setDB(db : PostgresqlDB){ this.database = db } public fun getDB() : PostgresqlDB?{ return this.database } } } /** * @author Mateusz * Reads `config.json` into Config data class. */ public class ConfigReader { private val jsonReader = Json public fun read(file: File): Config = read(file.inputStream()) @OptIn(ExperimentalSerializationApi::class) public fun read(input: InputStream): Config { return jsonReader.decodeFromStream(input) } }