initial import
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
//"io/ioutil"
|
||||
"os"
|
||||
"os/signal"
|
||||
"os/user"
|
||||
//"os/user"
|
||||
//"path/filepath"
|
||||
//"strconv"
|
||||
//"sync"
|
||||
"syscall"
|
||||
//"time"
|
||||
|
||||
"mstore/app/database"
|
||||
"mstore/app/handler"
|
||||
"mstore/app/logger"
|
||||
"mstore/app/operator"
|
||||
"mstore/app/service"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
oper *operator.Operator
|
||||
svc *service.Service
|
||||
db *database.Database
|
||||
hand *handler.Handler
|
||||
logg *logger.Logger
|
||||
}
|
||||
|
||||
func NewServer() (*Server, error) {
|
||||
var err error
|
||||
srv := &Server{}
|
||||
srv.logg = logger.NewLogger("server")
|
||||
return srv, err
|
||||
}
|
||||
|
||||
func (srv *Server) Handler() *handler.Handler {
|
||||
return srv.hand
|
||||
}
|
||||
|
||||
func (srv *Server) Configure() error {
|
||||
var err error
|
||||
srv.logg.Infof("Server configure")
|
||||
return err
|
||||
}
|
||||
|
||||
func (srv *Server) Build() error {
|
||||
var err error
|
||||
srv.logg.Infof("Server build")
|
||||
// Database create
|
||||
databaseParams := &database.DatabaseParams{}
|
||||
srv.db, err = database.NewDatabase(databaseParams)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Operator create
|
||||
operatorParams := &operator.OperatorParams{
|
||||
Database: srv.db,
|
||||
}
|
||||
srv.oper, err = operator.NewOperator(operatorParams)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Handler create
|
||||
handlerParams := &handler.HandlerParams{
|
||||
Operator: srv.oper,
|
||||
}
|
||||
srv.hand, err = handler.NewHandler(handlerParams)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Service create
|
||||
serviceParams := &service.ServiceParams{
|
||||
Handler: srv.hand,
|
||||
}
|
||||
srv.svc, err = service.NewService(serviceParams)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Service build
|
||||
err = srv.svc.Build()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (srv *Server) Run() error {
|
||||
var err error
|
||||
|
||||
currUser, err := user.Current()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
srv.logg.Infof("Server run as user %s", currUser.Username)
|
||||
|
||||
sigs := make(chan os.Signal, 1)
|
||||
svcDone := make(chan error, 1)
|
||||
|
||||
// Service run
|
||||
startService := func(svc *service.Service, done chan error) {
|
||||
err = svc.Run()
|
||||
if err != nil {
|
||||
srv.logg.Errorf("Service error: %v", err)
|
||||
done <- err
|
||||
}
|
||||
}
|
||||
go startService(srv.svc, svcDone)
|
||||
|
||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||
var signal os.Signal
|
||||
|
||||
select {
|
||||
case signal = <-sigs:
|
||||
srv.logg.Infof("Services stopped by signal: %v", signal)
|
||||
srv.svc.Stop()
|
||||
case err = <-svcDone:
|
||||
srv.logg.Infof("Service stopped by service error: %v", err)
|
||||
srv.svc.Stop()
|
||||
}
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user