106 lines
2.2 KiB
Go
106 lines
2.2 KiB
Go
// Copyright 2024 codeM GmbH
|
|
// Author: Thomas Hedeler
|
|
package server
|
|
|
|
import (
|
|
"embed"
|
|
"ld/eventbus"
|
|
"ld/interval"
|
|
"ld/sqlite"
|
|
"log"
|
|
)
|
|
|
|
type Server struct {
|
|
SQLiteVersion string
|
|
ServerInfo map[string]any
|
|
StateDB *sqlite.Database
|
|
Embedded embed.FS
|
|
LogFileName string
|
|
TokenDuration int // TODO einbauen
|
|
Secret []byte
|
|
Header string
|
|
intervalID int
|
|
Ebus *eventbus.EventBus
|
|
Tasks map[string]TaskFunc
|
|
}
|
|
|
|
func New(
|
|
logfilename string,
|
|
StateDB *sqlite.Database,
|
|
embedded embed.FS,
|
|
|
|
) (*Server, error) {
|
|
|
|
// creating the server
|
|
return &Server{
|
|
LogFileName: logfilename,
|
|
StateDB: StateDB,
|
|
Embedded: embedded,
|
|
Tasks: make(map[string]func(s *Server) error),
|
|
}, nil
|
|
}
|
|
|
|
func (s *Server) Start() error {
|
|
|
|
// query, err := s.Embedded.ReadFile("embed/win/server_info.sql")
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
|
|
// res, err := s.StundenDB.ReadRecords(string(query))
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
|
|
// s.ServerInfo = res[0]
|
|
|
|
// err = inits.LoadLogins(s.StundenDB, s.StateDB)
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
|
|
// err = inits.LoadTasks(s.StundenDB, s.StateDB)
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
|
|
// // start the task engine
|
|
// if s.Production {
|
|
// s.intervalID = interval.SetInterval(s.interval, 60000) // check for executable tasks every 60 seconds
|
|
// } else {
|
|
// s.intervalID = interval.SetInterval(s.interval, 30000) // check for executable tasks every 30 seconds
|
|
// }
|
|
return nil
|
|
}
|
|
|
|
func (s *Server) Close() error {
|
|
|
|
// stop the task engine
|
|
err := interval.ClearInterval(s.intervalID)
|
|
if err != nil {
|
|
log.Print(err)
|
|
}
|
|
|
|
err = s.StateDB.Close()
|
|
if err != nil {
|
|
log.Print(err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// func to dispatch routes to all parts of the application:
|
|
// they receive references to the server and the current fiber context via closures
|
|
// this way all functions have access to server properties and can handle the
|
|
// incoming requests themselves.
|
|
|
|
// type HandlerFunc = func(s *Server, c *fiber.Ctx) error
|
|
|
|
// func (s *Server) Handler(handler HandlerFunc) func(c *fiber.Ctx) error {
|
|
// return func(c *fiber.Ctx) error {
|
|
// return handler(s, c)
|
|
// }
|
|
// }
|
|
|
|
// signature for internal tasks
|
|
type TaskFunc = func(s *Server) error
|