-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.go
86 lines (73 loc) · 1.32 KB
/
server.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
package lama
import (
"os"
"os/signal"
"syscall"
)
/**
// 服务接口
type Services interface (
// 提供依赖项,可以返回一个或者多个依赖项,可选
Provide() provide,...
// 初始化服务,可选
Init() error
// 启动服务时候调用,可选
Serve() error
// 关闭服务时候调用,可选
Stop() error
)
*/
type Srv struct {
services []any
}
// NewSrv 实例化server服务
func NewSrv() *Srv {
return &Srv{
services: []any{
&provide{},
},
}
}
// Register 注册服务
func (s *Srv) Register(services ...any) *Srv {
for _, srv := range s.services {
services = append(services, srv)
}
s.services = services
return s
}
// Run 运行服务
func (s *Srv) Run() {
app := NewAda()
err := app.Register(s.services...)
if err != nil {
Print.Fatal(err)
}
// 初始化服务
err = app.Init()
if err != nil {
Print.Fatal(err)
}
// 启动服务
errCh := app.Serve()
// 监听中断信号
stop := make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt, syscall.SIGKILL, syscall.SIGINT, syscall.SIGTERM)
for {
select {
case err := <-errCh:
Print.Debug(err.Error)
er := app.Stop() // 出现错误,停止服务
if er != nil {
Print.Fatal(er)
}
case <-stop:
er := app.Stop()
if er != nil {
Print.Fatal(er)
}
os.Exit(0)
return
}
}
}