mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
126 lines
2.5 KiB
Go
126 lines
2.5 KiB
Go
package originnode
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"net/http"
|
|
_ "net/http/pprof"
|
|
"os"
|
|
"os/signal"
|
|
"sync"
|
|
"syscall"
|
|
|
|
"github.com/duanhf2012/origin/cluster"
|
|
"github.com/duanhf2012/origin/service"
|
|
"github.com/duanhf2012/origin/sysmodule"
|
|
)
|
|
|
|
type CExitCtl struct {
|
|
exit chan bool
|
|
waitGroup *sync.WaitGroup
|
|
}
|
|
|
|
type COriginNode struct {
|
|
CExitCtl
|
|
serviceManager service.IServiceManager
|
|
sigs chan os.Signal
|
|
debugCheck bool
|
|
}
|
|
|
|
func (s *COriginNode) Init() {
|
|
//初始化全局模块
|
|
service.InitLog()
|
|
imodule := g_module.GetModuleById(sysmodule.SYS_LOG)
|
|
service.InstanceServiceMgr().Init(imodule.(service.ILogger), s.exit, s.waitGroup)
|
|
|
|
s.sigs = make(chan os.Signal, 1)
|
|
signal.Notify(s.sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
}
|
|
|
|
func (s *COriginNode) OpenDebugCheck() {
|
|
s.debugCheck = true
|
|
}
|
|
|
|
func (s *COriginNode) SetupService(services ...service.IService) {
|
|
for i := 0; i < len(services); i++ {
|
|
if cluster.InstanceClusterMgr().HasLocalService(services[i].GetServiceName()) == true {
|
|
service.InstanceServiceMgr().Setup(services[i])
|
|
}
|
|
|
|
}
|
|
|
|
//将其他服务通知已经安装
|
|
for i := 0; i < len(services); i++ {
|
|
for j := 0; j < len(services); j++ {
|
|
if cluster.InstanceClusterMgr().HasLocalService(services[i].GetServiceName()) == false {
|
|
continue
|
|
}
|
|
|
|
if services[i].GetServiceName() == services[j].GetServiceName() {
|
|
continue
|
|
}
|
|
|
|
services[i].OnSetupService(services[j])
|
|
|
|
}
|
|
services[i].(service.IModule).SetOwnerService(services[i])
|
|
services[i].(service.IModule).SetOwner(services[i].(service.IModule))
|
|
}
|
|
|
|
}
|
|
|
|
func (s *COriginNode) Start() {
|
|
if s.debugCheck == true {
|
|
go func() {
|
|
|
|
log.Println(http.ListenAndServe("localhost:6060", nil))
|
|
}()
|
|
}
|
|
|
|
cluster.InstanceClusterMgr().Start()
|
|
RunGlobalModule()
|
|
service.InstanceServiceMgr().Start()
|
|
|
|
select {
|
|
case <-s.sigs:
|
|
fmt.Println("收到信号推出程序")
|
|
}
|
|
|
|
s.Stop()
|
|
}
|
|
|
|
func (s *COriginNode) Stop() {
|
|
close(s.exit)
|
|
s.waitGroup.Wait()
|
|
}
|
|
|
|
func NewOrginNode() *COriginNode {
|
|
node := new(COriginNode)
|
|
node.exit = make(chan bool)
|
|
node.waitGroup = &sync.WaitGroup{}
|
|
InitGlobalModule(node.exit, node.waitGroup)
|
|
var syslogmodule sysmodule.LogModule
|
|
syslogmodule.Init("system", sysmodule.LEVER_INFO)
|
|
syslogmodule.SetModuleId(sysmodule.SYS_LOG)
|
|
AddModule(&syslogmodule)
|
|
|
|
err := cluster.InstanceClusterMgr().Init()
|
|
if err != nil {
|
|
fmt.Print(err)
|
|
return nil
|
|
}
|
|
|
|
return node
|
|
}
|
|
|
|
func HasCmdParam(param string) bool {
|
|
for i := 0; i < len(os.Args); i++ {
|
|
if os.Args[i] == param {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|