代码拉取完成,页面将自动刷新
同步操作将从 杰神/物联大师 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package main
import (
"github.com/kardianos/service"
"iot-master/active"
"iot-master/args"
"iot-master/camera"
"iot-master/config"
"iot-master/db"
"iot-master/history"
"iot-master/log"
"iot-master/master"
"iot-master/web"
"os"
"os/signal"
"syscall"
)
var serviceConfig = &service.Config{
Name: "iot-master",
DisplayName: "物联大师",
Description: "物联网设备自动控制系统",
Arguments: nil,
}
func main() {
args.Parse()
//传递参数到服务
serviceConfig.Arguments = []string{"-c", args.ConfigPath}
// 构建服务对象
program := &Program{}
s, err := service.New(program, serviceConfig)
if err != nil {
log.Fatal(err)
}
// 用于记录系统日志
logger, err := s.Logger(nil)
if err != nil {
log.Fatal(err)
}
if args.Uninstall {
err = s.Uninstall()
if err != nil {
log.Fatal(err)
}
log.Println("卸载服务成功")
return
}
if args.Install {
err = s.Install()
if err != nil {
log.Fatal(err)
}
log.Println("安装服务成功")
return
}
err = s.Run()
if err != nil {
_ = logger.Error(err)
}
}
type Program struct{}
func (p *Program) Start(s service.Service) error {
//log.Println("===开始服务===")
go p.run()
return nil
}
func (p *Program) Stop(s service.Service) error {
//log.Println("===停止服务===")
_ = shutdown()
return nil
}
func (p *Program) run() {
// 此处编写具体的服务代码
hup := make(chan os.Signal, 2)
signal.Notify(hup, syscall.SIGHUP)
quit := make(chan os.Signal, 2)
signal.Notify(quit, os.Interrupt, os.Kill)
go func() {
for {
select {
case <-hup:
case <-quit:
//优雅地结束
_ = shutdown()
//os.Exit(0)
}
}
}()
//原本的Main函数
originMain()
}
func originMain() {
err := config.Load()
if err != nil {
log.Fatal(err)
}
err = log.Open(&config.Config.Log)
if err != nil {
log.Fatal(err)
}
//配置文件存在,说明已经安装
if config.Existing() {
//加载数据库
err = db.Open(&config.Config.Database)
if err != nil {
log.Fatal(err)
}
defer db.Close()
//加载历史数据库
err = history.Open(&config.Config.History)
if err != nil {
log.Fatal(err)
}
defer history.Close()
//加载主程序
err = master.Start()
if err != nil {
log.Fatal(err)
}
defer master.Stop()
//加载相机
err = camera.Start()
if err != nil {
log.Fatal(err)
}
defer camera.Stop()
}
//加载授权
err = active.Load()
if err != nil {
log.Fatal(err)
}
//判断是否开启Web
web.Serve(&config.Config.Web)
}
func shutdown() error {
//_ = database.Close()
//_ = tsdb.Close()
//connect.Close()
//master.Close()
//只关闭Web就行了,其他通过defer关闭
_ = web.Close()
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。