This repository has been archived by the owner on Aug 19, 2020. It is now read-only.
/
server.go
87 lines (76 loc) · 1.47 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
87
package server
import (
"fmt"
"net"
"net/rpc"
"github.com/wzshiming/base"
)
type Server struct {
server rpc.Server
listen net.Listener
port int
classs Classs
}
func NewServer(port int) *Server {
se := Server{
server: *rpc.NewServer(),
port: port,
}
if err := se.server.Register(&se.classs); err != nil {
base.ERR(err)
return nil
}
if err := se.server.Register(NewShutdown(se.Stop)); err != nil {
base.ERR(err)
return nil
}
return &se
}
func (se *Server) Classs() Classs {
return se.classs
}
func (se *Server) Start() (err error) {
base.NOTICE("Server start from port", se.port)
se.listen, err = net.Listen("tcp", fmt.Sprintf(":%d", se.port))
if err != nil {
base.ERR(err)
return
}
for {
if conn, err := se.listen.Accept(); err == nil {
go se.server.ServeConn(conn)
//go h.Server.ServeCodec(jsonrpc.NewServerCodec(conn))
} else {
base.ERR(err)
return err
}
}
base.NOTICE("Server stop")
return nil
}
func (se *Server) Register(rcvr interface{}) error {
err := se.server.Register(rcvr)
if err != nil {
return err
}
m := NewMethods(rcvr)
if len(m.Methods) != 0 {
se.classs = append(se.classs, *m)
}
return nil
}
func (se *Server) RegisterName(name string, rcvr interface{}) error {
err := se.server.RegisterName(name, rcvr)
if err != nil {
return err
}
m := NewMethods(rcvr)
m.Name = name
if len(m.Methods) != 0 {
se.classs = append(se.classs, *m)
}
return nil
}
func (se *Server) Stop() {
se.listen.Close()
}