/
cmdserver.go
92 lines (72 loc) · 1.9 KB
/
cmdserver.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
package cmdservice
import (
"google.golang.org/grpc"
"sync"
"net"
"errors"
"google.golang.org/grpc/reflection"
"log"
"github.com/BASChain/go-bas-mail-server/app/cmdpb"
"github.com/BASChain/go-bas-mail-server/app/cmdservice/api"
"github.com/BASChain/go-bas-mail-server/config"
"github.com/BASChain/go-bas-mail-server/bmtpserver"
)
type cmdServer struct {
localaddr string
grpcServer *grpc.Server
}
type CmdServerInter interface {
StartCmdService()
StopCmdService()
}
var (
cmdServerInst CmdServerInter
cmdServerInstLock sync.Mutex
)
func GetCmdServerInst() CmdServerInter {
if cmdServerInst == nil {
cmdServerInstLock.Lock()
defer cmdServerInstLock.Unlock()
if cmdServerInst == nil {
cfg := config.GetBMSCfg()
cmdServerInst = &cmdServer{localaddr: cfg.CmdListenPort}
}
}
return cmdServerInst
}
func (cs *cmdServer) checklocaladdress() error {
if cs.localaddr == "" {
return errors.New("No Server Listen address")
}
return nil
}
func (cs *cmdServer) StartCmdService() {
if err := cs.checklocaladdress(); err != nil {
log.Fatal("Start Cmd Service Failed", err)
return
}
lis, err := net.Listen("tcp", cs.localaddr)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
cs.grpcServer = grpc.NewServer()
cmdpb.RegisterDefaultcmdsrvServer(cs.grpcServer, &api.CmdDefaultServer{stop})
cmdpb.RegisterStringopsrvServer(cs.grpcServer, &api.CmdStringOPSrv{})
reflection.Register(cs.grpcServer)
log.Println("Commamd line server will start at", cs.localaddr)
if err := cs.grpcServer.Serve(lis); err != nil {
log.Fatalf("failed to serve: %s", err)
}
}
func (cs *cmdServer) StopCmdService() {
config.GetBMSCfg().Save()
//server.DNSServerStop()
//dohserver.GetDohDaemonServer().ShutDown()
//mem.MemStateStop()
cs.grpcServer.Stop()
log.Println("Command line server stoped")
}
func stop() {
bmtpserver.GetBMTPServer().StopTCPServer()
GetCmdServerInst().StopCmdService()
}