Files
origin/service/Service.go
2019-02-22 14:17:04 +08:00

108 lines
2.1 KiB
Go

package service
import (
"fmt"
"log"
"os"
"reflect"
"strings"
"time"
)
type MethodInfo struct {
Fun reflect.Value
ParamList []reflect.Value
types reflect.Type
}
type IService interface {
Init(Iservice IService) error
OnInit() error
OnRun() bool
OnFetchService(iservice IService) error
OnSetupService(iservice IService) //其他服务被安装
OnRemoveService(iservice IService) //其他服务被安装
GetServiceName() string
SetServiceName(serviceName string) bool
GetServiceId() int
IsTimeOutTick(microSecond int64) bool
GetStatus() int
}
var Log *log.Logger
var logFile *os.File
func InitLog() {
fileName := "system-" + time.Now().Format("2006-01-02") + ".log"
var err error
logFile, err = os.Create(fileName)
if err != nil {
log.Fatalln("open file error")
}
Log = log.New(logFile, "", log.Lshortfile|log.LstdFlags)
}
type BaseService struct {
BaseModule
serviceid int
servicename string
Status int
}
func (slf *BaseService) GetServiceId() int {
return slf.serviceid
}
func (slf *BaseService) GetServiceName() string {
return slf.servicename
}
func (slf *BaseService) SetServiceName(serviceName string) bool {
slf.servicename = serviceName
return true
}
func (slf *BaseService) GetStatus() int {
return slf.Status
}
func (slf *BaseService) OnFetchService(iservice IService) error {
return nil
}
func (slf *BaseService) OnSetupService(iservice IService) {
return
}
func (slf *BaseService) OnRemoveService(iservice IService) {
return
}
func (slf *BaseService) Init(iservice IService) error {
slf.ownerService = iservice
slf.servicename = fmt.Sprintf("%T", iservice)
parts := strings.Split(slf.servicename, ".")
if len(parts) != 2 {
GetLogger().Printf(LEVER_ERROR, "BaseService.Init: service name is error: %q", slf.servicename)
err := fmt.Errorf("BaseService.Init: service name is error: %q", slf.servicename)
return err
}
slf.servicename = parts[1]
slf.serviceid = InstanceServiceMgr().GenServiceID()
return nil
}
func (slf *BaseService) IsTimeOutTick(microSecond int64) bool {
nowtm := time.Now().UnixNano() / 1e6
return nowtm-slf.tickTime >= microSecond
}