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

81 lines
1.5 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 ""
}
// MustInitService Initial service
func MustInitService() []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
}
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())
},
"Pprof": func() {
ss = append(ss, newPprofService())
},
})
return
}