forked from xifan2333/UniBarrage
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
157 lines (144 loc) · 3.39 KB
/
main.go
File metadata and controls
157 lines (144 loc) · 3.39 KB
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package main
import (
"os"
"UniBarrage/services/api"
"UniBarrage/services/proxy"
ws "UniBarrage/services/websockets"
"UniBarrage/utils/cors"
"UniBarrage/utils/trace"
"github.com/urfave/cli/v2"
)
func main() {
app := &cli.App{
Name: "UniBarrage",
Usage: "启动 UniBarrage 服务",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "wsHost",
Aliases: []string{"wh"},
Value: "127.0.0.1",
Usage: "WebSocket 主机地址",
},
&cli.IntFlag{
Name: "wsPort",
Aliases: []string{"wp"},
Value: 7777,
Usage: "WebSocket 端口",
},
&cli.StringFlag{
Name: "apiHost",
Aliases: []string{"ah"},
Value: "127.0.0.1",
Usage: "API 主机地址",
},
&cli.IntFlag{
Name: "apiPort",
Aliases: []string{"ap"},
Value: 8080,
Usage: "API 端口",
},
&cli.BoolFlag{
Name: "useProxy",
Aliases: []string{"up"},
Value: false,
Usage: "是否使用代理",
},
&cli.StringFlag{
Name: "proxyHost",
Aliases: []string{"ph"},
Value: "127.0.0.1",
Usage: "代理主机地址",
},
&cli.IntFlag{
Name: "proxyPort",
Aliases: []string{"pp"},
Value: 8888,
Usage: "代理端口",
},
&cli.StringFlag{
Name: "certFile",
Aliases: []string{"cf"},
Usage: "证书文件路径",
},
&cli.StringFlag{
Name: "keyFile",
Aliases: []string{"kf"},
Usage: "私钥文件路径",
},
&cli.StringFlag{
Name: "allowedOrigins",
Aliases: []string{"ao"},
Value: "*",
Usage: "允许跨域请求的来源列表 (用逗号分隔)",
},
&cli.StringFlag{
Name: "authToken",
Aliases: []string{"at"},
Usage: "用于验证的 Bearer Token (仅 API)",
},
&cli.IntFlag{
Name: "logLevel",
Aliases: []string{"ll"},
Value: 0,
Usage: "日志等级 (0: 默认, 1: 简洁, 2: 静默)",
},
// 新增:B站房间号和Cookie环境变量注入
&cli.IntFlag{
Name: "biliRoom",
EnvVars: []string{"BILI_ROOM"},
Usage: "Bilibili 房间号 (自动启动监听)",
},
&cli.StringFlag{
Name: "biliCookie",
EnvVars: []string{"BILI_COOKIE"},
Usage: "Bilibili Cookie",
},
},
Action: func(c *cli.Context) error {
// 初始化 Trace
trace.Init(c.Int("logLevel"))
// 处理允许的来源列表
origins := cors.ParseOrigins(c.String("allowedOrigins"))
// 启动 API 服务器
go api.StartServer(
c.String("apiHost"),
c.Int("apiPort"),
c.String("certFile"),
c.String("keyFile"),
c.String("authToken"),
origins,
c.Int("wsPort"),
)
// 启动 WebSocket 服务器
ws.StartServer(
c.String("wsHost"),
c.Int("wsPort"),
c.String("certFile"),
c.String("keyFile"),
origins,
)
// 如果启用代理,则启动代理服务器
if c.Bool("useProxy") {
go proxy.StartServer(
c.String("proxyHost"),
c.Int("proxyPort"),
c.String("certFile"),
c.String("keyFile"),
origins,
)
}
// 恢复之前保存的服务状态
api.RecoverService()
// 新增:通过环境变量自动启动 Bilibili 服务
biliRoom := c.Int("biliRoom")
if biliRoom > 0 {
biliCookie := c.String("biliCookie")
api.AutoStartBilibili(biliRoom, biliCookie)
}
// 处理程序信号以进行优雅退出
trace.HandleSignal()
return nil
},
}
_ = app.Run(os.Args)
}