Skip to content

Commit

Permalink
Added Config(might be buggy) and Database
Browse files Browse the repository at this point in the history
  • Loading branch information
TheCGuyGitHub committed Jun 30, 2024
1 parent 113c33d commit 16d4089
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 30 deletions.
5 changes: 5 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0")
implementation("com.google.code.gson:gson:2.8.9")

implementation("com.zaxxer:HikariCP:5.1.0")

}


Expand All @@ -64,7 +66,7 @@ kotlin {
moduleJson {
name = "CloudNet-Rest-Module"
author = "TheCGuy"
main = "io.github.thecguy.cloudnet_rest_module.CloudNet-Rest-Module"
main = "io.github.thecguy.cloudnet_rest_module.CloudNet_Rest_Module"
description = "This CloudNet Module enables a Rest API!"
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
package io.github.thecguy.cloudnet_rest_module



import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import eu.cloudnetservice.common.log.LogManager
import eu.cloudnetservice.common.log.Logger
import eu.cloudnetservice.driver.document.Document
import eu.cloudnetservice.driver.document.DocumentFactory
import eu.cloudnetservice.driver.inject.InjectionLayer
import eu.cloudnetservice.driver.module.ModuleLifeCycle
import eu.cloudnetservice.driver.module.ModuleTask
import eu.cloudnetservice.driver.module.driver.DriverModule
import eu.cloudnetservice.node.service.CloudServiceManager
import eu.cloudnetservice.node.ShutdownHandler
import eu.cloudnetservice.node.command.CommandProvider
import eu.cloudnetservice.node.service.CloudServiceManager
import io.github.thecguy.cloudnet_rest_module.commands.Test
import io.github.thecguy.cloudnet_rest_module.config.Configuration
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
Expand All @@ -21,39 +30,93 @@ import kong.unirest.core.json.JSONObject
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.jetbrains.annotations.NotNull
import kotlin.concurrent.Volatile


@Singleton
class `CloudNet-Rest-Module` : DriverModule() {
class CloudNet_Rest_Module : DriverModule() {

@Volatile
private var configuration: Configuration? = null
private val logger: Logger = LogManager.logger(CloudNet_Rest_Module::class.java)






@ModuleTask(lifecycle = ModuleLifeCycle.STARTED)
fun started(
@NotNull cloudServiceManager: CloudServiceManager,
@NotNull shutdownHandler: ShutdownHandler,
@NotNull @Named("module") injectionLayer: InjectionLayer<*>
) {

logger.info("Listening on port 8080!")
GlobalScope.launch {
main(cloudServiceManager,shutdownHandler, injectionLayer)
main(cloudServiceManager, shutdownHandler)
}
}


@ModuleTask(order = 127, lifecycle = ModuleLifeCycle.LOADED)
fun load() {
val config = this.readConfig(DocumentFactory.json())
this.writeConfig(
Document.newJsonDocument().appendTree(
Configuration(
config.getString("username"),
config.getString("password"),
config.getString("database"),
config.getString("host"),
config.getInt("port")
)
)
)
}
@ModuleTask(order = 125, lifecycle = ModuleLifeCycle.LOADED)
fun lload() {
configuration = this.readConfig(
Configuration::class.java,
{
Configuration(
"root",
"123456",
"cloudnet_rest",
"127.0.0.1",
3306
)
},
DocumentFactory.json()
)

val config = HikariConfig()

config.jdbcUrl = "jdbc:mysql://${configuration!!.host}:${configuration!!.port}/${configuration!!.database}"
config.username = configuration!!.username
config.password = configuration!!.password
config.driverClassName = "com.mysql.cj.jdbc.Driver"
config.addDataSourceProperty("cachePrepStmts", "true")
config.addDataSourceProperty("prepStmtCacheSize", "250")
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048")

val ds = HikariDataSource(config)

ds.connection.use { connection ->
connection.prepareStatement("CREATE TABLE IF NOT EXISTS cloudnet_rest_users (id SERIAL PRIMARY KEY, user TEXT, password TEXT)").use { statement ->
statement.executeUpdate()
}
}
ds.close()
}

@ModuleTask(lifecycle = ModuleLifeCycle.STARTED)
fun start(commandProvider: CommandProvider) {
commandProvider.register(Test::class.java)
}

@ModuleTask(lifecycle = ModuleLifeCycle.STOPPED)
fun stop(gracePeriodMillis: Long, timeoutMillis: Long) {
println("SHUTTING DOWN KTOR!")
}


fun services(cloudServiceManager: CloudServiceManager): JSONObject {
private fun services(cloudServiceManager: CloudServiceManager): JSONObject {
val ser = cloudServiceManager.services()
val servicesArray = JSONArray()

ser.forEach { service ->
val serviceObject = JSONObject()
serviceObject.put("Name", service.name())
Expand All @@ -67,16 +130,15 @@ class `CloudNet-Rest-Module` : DriverModule() {
serviceObject.put("ConnectedTime", service.connectedTime())
servicesArray.put(serviceObject)
}

val result = JSONObject()
result.put("services", servicesArray)

return result
}

private fun main(@NotNull cloudServiceManager: CloudServiceManager,
@NotNull shutdownHandler: ShutdownHandler,
@NotNull @Named("module") injectionLayer: InjectionLayer<*>) {
private fun main(
@NotNull cloudServiceManager: CloudServiceManager,
@NotNull shutdownHandler: ShutdownHandler
) {
embeddedServer(Netty, port = 8080) {

install(ShutDownUrl.ApplicationCallPlugin) {
Expand All @@ -88,7 +150,7 @@ class `CloudNet-Rest-Module` : DriverModule() {

routing {

swaggerUI(path = "swagger", swaggerFile = "openapi/swagger.yaml")
//swaggerUI(path = "swagger", swaggerFile = "openapi/swagger.yaml")

get("/") {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ import eu.cloudnetservice.driver.service.ServiceTask
import eu.cloudnetservice.driver.database.DatabaseProvider
import eu.cloudnetservice.node.command.annotation.Description
import eu.cloudnetservice.node.command.source.CommandSource
import eu.cloudnetservice.driver.document.Document
import eu.cloudnetservice.driver.document.DocumentFactory

import jakarta.inject.Singleton
import java.util.*

Expand All @@ -27,13 +26,14 @@ class Test {




@Suggestions("test")
fun suggestion(`$`: CommandContext<*>?, input: String?): List<ServiceTask> {
fun suggestion(context: CommandContext<*>, input: String?): List<ServiceTask> {
return taskProvider.serviceTasks().toList()
}

@Parser(name = "test", suggestions = "test")
fun parser(`$`: CommandContext<*>?, input: Queue<String?>): List<ServiceTask> {
fun parser(context: CommandContext<*>, input: Queue<String?>): List<ServiceTask> {
return taskProvider.serviceTasks().toList()
}

Expand All @@ -56,7 +56,7 @@ class Test {
fun insert(
source: CommandSource,
) {
databaseProvider.database("test").insert("test", Document.newDocument(DocumentFactory.json()))
println("test")
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.github.thecguy.cloudnet_rest_module.config

import org.jetbrains.annotations.NotNull


class Configuration(
@NotNull val username: String,
@NotNull val password: String,
@NotNull val database: String,
@NotNull val host: String,
@NotNull val port: Int
)
6 changes: 0 additions & 6 deletions src/main/resources/application.yaml

This file was deleted.

7 changes: 7 additions & 0 deletions src/main/resources/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"host": "127.0.0.1",
"port": 3306,
"database": "cloudnet-rest",
"user": "",
"password": ""
}

0 comments on commit 16d4089

Please sign in to comment.