2024-02-10 17:17:34 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2024-02-25 22:13:04 +02:00
|
|
|
"os"
|
|
|
|
"os/signal"
|
|
|
|
"syscall"
|
2024-02-10 17:17:34 +02:00
|
|
|
|
|
|
|
"github.com/pikami/cosmium/api"
|
2024-02-14 01:47:51 +02:00
|
|
|
"github.com/pikami/cosmium/api/config"
|
2024-02-14 20:46:40 +02:00
|
|
|
"github.com/pikami/cosmium/internal/repositories"
|
2024-02-10 17:17:34 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
2024-12-18 19:39:57 +02:00
|
|
|
configuration := config.ParseFlags()
|
2024-02-10 17:17:34 +02:00
|
|
|
|
2024-12-18 19:39:57 +02:00
|
|
|
repository := repositories.NewDataRepository(repositories.RepositoryOptions{
|
|
|
|
InitialDataFilePath: configuration.InitialDataFilePath,
|
|
|
|
PersistDataFilePath: configuration.PersistDataFilePath,
|
|
|
|
})
|
2024-02-14 20:46:40 +02:00
|
|
|
|
2024-12-18 19:39:57 +02:00
|
|
|
server := api.NewApiServer(repository, configuration)
|
|
|
|
server.Start()
|
2024-02-25 22:13:04 +02:00
|
|
|
|
2024-12-18 19:39:57 +02:00
|
|
|
waitForExit(server, repository, configuration)
|
2024-02-25 22:13:04 +02:00
|
|
|
}
|
|
|
|
|
2024-12-18 19:39:57 +02:00
|
|
|
func waitForExit(server *api.ApiServer, repository *repositories.DataRepository, config config.ServerConfig) {
|
2024-02-25 22:13:04 +02:00
|
|
|
sigs := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
|
|
|
|
// Block until a exit signal is received
|
|
|
|
<-sigs
|
|
|
|
|
2024-12-18 00:28:59 +02:00
|
|
|
// Stop the server
|
2024-12-18 19:39:57 +02:00
|
|
|
server.Stop()
|
2024-12-18 00:28:59 +02:00
|
|
|
|
2024-12-18 19:39:57 +02:00
|
|
|
if config.PersistDataFilePath != "" {
|
|
|
|
repository.SaveStateFS(config.PersistDataFilePath)
|
2024-02-25 22:13:04 +02:00
|
|
|
}
|
2024-02-10 17:17:34 +02:00
|
|
|
}
|