package main
|
|
import (
|
"apsClient/conf"
|
"apsClient/crontask"
|
"apsClient/model"
|
"apsClient/nsq"
|
"apsClient/pkg/logx"
|
"apsClient/pkg/sqlitex"
|
"apsClient/router"
|
"apsClient/serf"
|
"apsClient/service/plc_address"
|
"fmt"
|
"net/http"
|
"os"
|
"os/signal"
|
"syscall"
|
"time"
|
)
|
|
func main() {
|
|
logx.Init(conf.Conf.Log)
|
defer logx.Sync()
|
|
if err := model.Init(); err != nil {
|
logx.Errorf("model Init err:%v", err)
|
return
|
}
|
|
if err := nsq.Init(); err != nil {
|
logx.Errorf("nsq Init err:%v", err)
|
return
|
}
|
|
if err := crontask.InitTask(); err != nil {
|
logx.Errorf("crontab task Init err:%v", err)
|
return
|
}
|
//加载plc写入地址
|
plc_address.LoadAddressFromFile()
|
|
////提前加载任务
|
//service.NewTaskService().GetTask()
|
|
//go shutdown()
|
|
// 启动数据同步
|
var serfStartChan = make(chan bool)
|
// 需要同步的表
|
var syncTables = []string{
|
"procedures",
|
"process_model",
|
"production_progress",
|
"work_order",
|
}
|
|
agent := serf.InitAgent("apsClient", syncTables, sqlitex.GetDB())
|
agent.RegisterClusterEvent(serfClusterEvent)
|
go agent.Serve(serfStartChan)
|
|
<-serfStartChan
|
|
// 判断当前集群状态
|
//agent.ClusterStatus == "master"
|
|
logx.Infof("apsClient start serve...")
|
server := &http.Server{
|
Addr: fmt.Sprintf(":%d", conf.Conf.System.Port),
|
Handler: router.InitRouter(),
|
ReadTimeout: 5 * time.Second,
|
WriteTimeout: 5 * time.Second,
|
}
|
logx.Error(server.ListenAndServe().Error())
|
}
|
|
func shutdown() {
|
quit := make(chan os.Signal, 1)
|
signal.Notify(quit, syscall.SIGKILL, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM)
|
<-quit
|
|
logx.Infof("apsClient exited...")
|
os.Exit(0)
|
}
|
|
func serfClusterEvent(stat int) {
|
switch stat {
|
|
case serf.EventCreateCluster:
|
// 创建集群
|
case serf.EventJoinCluster:
|
// 加入集群
|
case serf.EventLeaveCluster:
|
// 退出集群
|
case serf.EventSlave2Master:
|
// 切换为主节点
|
case serf.EventMaster2Slave:
|
// 切换为子节点
|
}
|
|
fmt.Println("clusterEvent:", stat)
|
}
|