cosmium/sharedlibrary/sharedlibrary.go

91 lines
2.2 KiB
Go
Raw Normal View History

2024-12-18 00:28:59 +02:00
package main
import "C"
import (
"encoding/json"
"github.com/pikami/cosmium/api"
"github.com/pikami/cosmium/api/config"
"github.com/pikami/cosmium/internal/repositories"
)
//export CreateServerInstance
func CreateServerInstance(serverName *C.char, configurationJSON *C.char) int {
2024-12-18 23:28:04 +02:00
configStr := C.GoString(configurationJSON)
serverNameStr := C.GoString(serverName)
if _, ok := getInstance(serverNameStr); ok {
return ResponseServerInstanceAlreadyExists
}
2024-12-18 00:28:59 +02:00
var configuration config.ServerConfig
2024-12-18 23:28:04 +02:00
err := json.Unmarshal([]byte(configStr), &configuration)
2024-12-18 00:28:59 +02:00
if err != nil {
return ResponseFailedToParseConfiguration
2024-12-18 00:28:59 +02:00
}
configuration.PopulateCalculatedFields()
2024-12-19 23:21:45 +02:00
configuration.ApplyDefaultsToEmptyFields()
repository := repositories.NewDataRepository(repositories.RepositoryOptions{
InitialDataFilePath: configuration.InitialDataFilePath,
PersistDataFilePath: configuration.PersistDataFilePath,
})
server := api.NewApiServer(repository, configuration)
server.Start()
addInstance(serverNameStr, &ServerInstance{
server: server,
repository: repository,
})
2024-12-18 00:28:59 +02:00
return ResponseSuccess
2024-12-18 00:28:59 +02:00
}
//export StopServerInstance
func StopServerInstance(serverName *C.char) int {
serverNameStr := C.GoString(serverName)
if serverInstance, ok := getInstance(serverNameStr); ok {
serverInstance.server.Stop()
removeInstance(serverNameStr)
return ResponseSuccess
2024-12-18 00:28:59 +02:00
}
return ResponseServerInstanceNotFound
2024-12-18 00:28:59 +02:00
}
//export GetServerInstanceState
func GetServerInstanceState(serverName *C.char) *C.char {
serverNameStr := C.GoString(serverName)
if serverInstance, ok := getInstance(serverNameStr); ok {
stateJSON, err := serverInstance.repository.GetState()
if err != nil {
return nil
}
return C.CString(stateJSON)
2024-12-18 00:28:59 +02:00
}
return nil
2024-12-18 00:28:59 +02:00
}
2024-12-19 23:21:45 +02:00
//export LoadServerInstanceState
func LoadServerInstanceState(serverName *C.char, stateJSON *C.char) int {
serverNameStr := C.GoString(serverName)
stateJSONStr := C.GoString(stateJSON)
if serverInstance, ok := getInstance(serverNameStr); ok {
2024-12-19 23:21:45 +02:00
err := serverInstance.repository.LoadStateJSON(stateJSONStr)
if err != nil {
return ResponseFailedToLoadState
}
return ResponseSuccess
}
return ResponseServerInstanceNotFound
}
2024-12-18 00:28:59 +02:00
func main() {}