// 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 }