zhangzengfei
2024-04-28 62beabfd1466fd3a6b6c0736acc8c5a3b3ec4b3b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
 
import (
    "context"
    "fmt"
    "net/http"
    "os"
    "os/signal"
    "syscall"
 
    "gat1400Exchange/client"
    "gat1400Exchange/config"
    "gat1400Exchange/cron"
    "gat1400Exchange/models"
    "gat1400Exchange/pkg/logger"
    "gat1400Exchange/routes"
    "gat1400Exchange/service"
)
 
func main() {
    // 初始化日志
    logger.InitLog(config.LogConf.LogWay, config.LogConf.Path+"/gat1400-exchange.log", config.LogConf.Level, config.LogConf.MaxAge, false)
    logger.Info("gat1400-exchange start!")
 
    // 连接数据库
    models.Init()
    defer models.CloseDB()
 
    // 注册所有路由
    r := routes.InitRoutes()
 
    host := config.ServeConf.Host
    port := config.ServeConf.Port
 
    srv := &http.Server{
        Addr:    fmt.Sprintf("%s:%s", host, port),
        Handler: r,
    }
 
    // 启动1400客户端
    ctx, cancel := context.WithCancel(context.Background())
    go client.Init1400Client(ctx)
 
    // 启动网络视频字符叠加器服务
    go service.NVCSServer()
 
    // 启动定时任务
    cron.Init()
 
    // Initializing the server in a goroutine so that
    // it won't block the graceful shutdown handling below
    go func() {
        if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
            logger.Error("listen: %s", err)
        }
    }()
 
    logger.Info("Server is running at %s:%s", host, port)
 
    // Wait for interrupt signal to gracefully shutdown the server with
    // a timeout of 5 seconds.
    quit := make(chan os.Signal)
    // kill (no param) default send syscall.SIGTERM
    // kill -2 is syscall.SIGINT
    // kill -9 is syscall.SIGKILL but can't be catch, so don't need add it
    signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
    <-quit
    logger.Info("Shutting down server...")
 
    // The context is used to inform the server it has 5 seconds to finish
    // the request it is currently handling
    //ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()
    if err := srv.Shutdown(ctx); err != nil {
        logger.Error("Server forced to shutdown:", err)
    }
 
    logger.Info("Server exiting!")
}