-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmain.go
136 lines (114 loc) · 2.75 KB
/
main.go
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package main
import (
"encoding/json"
"flag"
"fmt"
"imaotai/config"
"imaotai/db"
"imaotai/models"
"imaotai/msg"
"imaotai/reqfunc"
"imaotai/service"
"imaotai/task"
"os"
"os/signal"
"syscall"
)
func main() {
var configpath string
var dbpath string
var address string
var codephone string
var phone string
var code string
flag.StringVar(&configpath, "path", "config.yml", "配置文件路径")
flag.StringVar(&dbpath, "db", "imaotai.db", "数据库路径")
flag.StringVar(&address, "address", "", "查询的地址")
flag.StringVar(&codephone, "codephone", "", "要登录的手机号")
flag.StringVar(&phone, "phone", "", "登录手机号")
flag.StringVar(&code, "code", "", "登录验证码")
// 从arguments中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。未注册却使用flag -help时,会返回ErrHelp。
flag.Parse()
// 获取地址的经纬度
if len(address) > 0 {
rt, err := reqfunc.GetLocationByAddress(address)
if err != nil {
panic(err)
}
data, err := json.Marshal(rt)
if err != nil {
panic(err)
}
println(string(data))
os.Exit(0)
}
// 获取手机验证码
if len(codephone) > 0 {
rt, err := reqfunc.SendCode(codephone)
if err != nil {
panic(err)
}
if rt {
println("登录验证码发送成功")
} else {
println("登录验证码发送失败")
}
os.Exit(0)
}
// 登录
if (len(phone) == 0 && len(code) > 0) || (len(phone) > 0 && len(code) == 0) {
panic("登录时,phone和code不能为空")
}
if len(phone) > 0 && len(code) > 0 {
rt, err := reqfunc.Login(phone, code)
if err != nil {
panic(err)
}
data, err := json.Marshal(rt)
if err != nil {
panic(err)
}
println(string(data))
os.Exit(0)
}
// 加载系统,启动
err := config.GetConfig(configpath)
if err != nil {
panic(err)
}
// 数据库
err = db.Init(dbpath)
if err != nil {
panic(err)
}
models.Init()
// 每次启动 重新初始化数据
err = service.RefreshData(config.Configs)
if err != nil {
msg.SendPushPlus(err.Error())
panic(err)
}
// 启动定时任务
crontask := task.Init()
crontask.AddTask()
crontask.Task.Start()
defer crontask.Task.Stop()
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
// 创建一个通道来接收信号
signalChan := make(chan os.Signal, 1)
// 监听中断信号和终止信号
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
// 启动一个 goroutine 在后台等待信号
go func() {
// 阻塞等待信号
sig := <-signalChan
fmt.Printf("接收到信号: %v\n", sig)
// 执行清理和关闭操作
// 退出程序
os.Exit(0)
}()
fmt.Println("程序正在运行...")
// 阻塞主 goroutine,使程序持续运行
select {}
}