You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
paopao-ce/internal/service/service.go

93 lines
1.8 KiB

// Copyright 2022 ROC. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package service
import (
"log"
"github.com/Masterminds/semver/v3"
"github.com/alimy/cfg"
"github.com/rocboss/paopao-ce/pkg/types"
)
type Service interface {
Name() string
Version() *semver.Version
OnInit() error
OnStart() error
OnStop() error
}
type baseService types.Empty
func (baseService) Name() string {
return ""
}
func (baseService) Version() *semver.Version {
return semver.MustParse("v0.0.1")
}
func (baseService) String() string {
return ""
}
// InitService Initial service
func InitService() []Service {
ss := newService()
for _, s := range ss {
if err := s.OnInit(); err != nil {
log.Fatalf("initial %s service error: %s", s.Name(), err)
}
}
return ss
}
// MaxSidSize max service id string length
func MaxSidSize(ss []Service) int {
length := 0
for _, s := range ss {
size := len(s.Name() + "@" + s.Version().String())
if size > length {
length = size
}
}
return length
}
func newService() (ss []Service) {
// add all service if declared in features on config.yaml
cfg.In(cfg.Actions{
"Web": func() {
ss = append(ss, newWebService())
},
"Admin": func() {
ss = append(ss, newAdminService())
},
"SpaceX": func() {
ss = append(ss, newSpaceXService())
},
"Bot": func() {
ss = append(ss, newBotService())
},
"NativeOBS": func() {
ss = append(ss, newLocalossService())
},
"Mobile": func() {
ss = append(ss, newMobileService())
},
"Frontend:Web": func() {
ss = append(ss, newFrontendWebServiceService())
},
"Docs": func() {
ss = append(ss, newDocsService())
},
"Deprecated:OldWeb": func() {
ss = append(ss, newOldWebService())
},
})
return
}