Blame view

common/components/server.go 2.77 KB
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
1
2
3
4
  package components
  
  import (
  	"fmt"
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
5
  	"net"
765431a4   zhangqijia   增加schema接口, 抽象 mo...
6
  	"pro2d/common/logger"
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
7
8
  )
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
9
  type ServerOption func(*Server)
77f5eec7   zhangqijia   plugin 插件热更 接口
10
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
11
  func WithPlugin(iPlugin IPlugin) ServerOption {
77f5eec7   zhangqijia   plugin 插件热更 接口
12
13
14
15
16
  	return func(server *Server) {
  		server.plugins = iPlugin
  	}
  }
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
17
  func WithSplitter(splitter ISplitter) ServerOption {
77f5eec7   zhangqijia   plugin 插件热更 接口
18
19
20
21
22
  	return func(server *Server) {
  		server.splitter = splitter
  	}
  }
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
23
  func WithConnCbk(cb ConnectionCallback) ServerOption {
77f5eec7   zhangqijia   plugin 插件热更 接口
24
25
26
27
28
  	return func(server *Server) {
  		server.connectionCallback = cb
  	}
  }
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
29
  func WithMsgCbk(cb MessageCallback) ServerOption {
77f5eec7   zhangqijia   plugin 插件热更 接口
30
31
32
33
34
  	return func(server *Server) {
  		server.messageCallback = cb
  	}
  }
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
35
  func WithCloseCbk(cb CloseCallback) ServerOption {
77f5eec7   zhangqijia   plugin 插件热更 接口
36
37
38
39
40
  	return func(server *Server) {
  		server.closeCallback = cb
  	}
  }
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
41
  func WithTimerCbk(cb TimerCallback) ServerOption {
77f5eec7   zhangqijia   plugin 插件热更 接口
42
43
44
45
46
  	return func(server *Server) {
  		server.timerCallback = cb
  	}
  }
  
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
47
  type Server struct {
cd2f96ab   zhangqijia   fix: 优化连接管理
48
49
50
  	PluginPath string
  	plugins    IPlugin
  	splitter   ISplitter
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
51
  
cd2f96ab   zhangqijia   fix: 优化连接管理
52
53
54
55
  	connectionCallback ConnectionCallback
  	messageCallback    MessageCallback
  	closeCallback      CloseCallback
  	timerCallback      TimerCallback
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
56
  
cd2f96ab   zhangqijia   fix: 优化连接管理
57
  	port       int
69d286a7   zhangqijia   fix: 插件用来做部分热更
58
59
  	connManage IConnManage
  	Actions    map[interface{}]interface{}
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
60
61
  }
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
62
  func NewServer(port int, options ...ServerOption) IServer {
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
63
  	s := &Server{
cd2f96ab   zhangqijia   fix: 优化连接管理
64
65
  		port:       port,
  		connManage: NewConnManage(),
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
66
  	}
77f5eec7   zhangqijia   plugin 插件热更 接口
67
68
69
70
  	for _, option := range options {
  		option(s)
  	}
  
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
71
72
73
74
75
76
77
  	return s
  }
  
  func (s *Server) GetSplitter() ISplitter {
  	return s.splitter
  }
  
77f5eec7   zhangqijia   plugin 插件热更 接口
78
79
80
81
  func (s *Server) GetPlugin() IPlugin {
  	return s.plugins
  }
  
765431a4   zhangqijia   增加schema接口, 抽象 mo...
82
  func (s *Server) GetAction(cmd uint32) interface{} {
69d286a7   zhangqijia   fix: 插件用来做部分热更
83
84
85
86
87
88
89
90
91
92
93
94
  	if s.plugins != nil {
  		f := s.plugins.GetAction(cmd)
  		if f != nil {
  			return f
  		}
  	}
  
  	return s.Actions[cmd]
  }
  
  func (s *Server) SetActions(mi map[interface{}]interface{}) {
  	s.Actions = mi
765431a4   zhangqijia   增加schema接口, 抽象 mo...
95
96
  }
  
cd2f96ab   zhangqijia   fix: 优化连接管理
97
98
99
100
  func (s *Server) GetConnManage() IConnManage {
  	return s.connManage
  }
  
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
101
102
103
104
105
106
107
108
109
110
111
112
113
  func (s *Server) SetConnectionCallback(cb ConnectionCallback) {
  	s.connectionCallback = cb
  }
  
  func (s *Server) SetMessageCallback(cb MessageCallback) {
  	s.messageCallback = cb
  }
  
  func (s *Server) SetCloseCallback(cb CloseCallback) {
  	s.closeCallback = cb
  }
  
  func (s *Server) SetTimerCallback(cb TimerCallback) {
9a9d092e   zhangqijia   每条连接增加一个定时器,每条连接增...
114
  	s.timerCallback = cb
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
115
116
  }
  
77f5eec7   zhangqijia   plugin 插件热更 接口
117
  func (s *Server) Start() error {
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
  	port := fmt.Sprintf(":%d", s.port)
  	l, err := net.Listen("tcp", port)
  	if err != nil {
  		return err
  	}
  	//监听端口
  	logger.Debug("listen on %s\n", port)
  	id := 0
  	for {
  		conn, err := l.Accept()
  		if err != nil {
  			return err
  		}
  
  		id++
54b3f133   zhangqijia   add connector int...
133
  		client := NewConn(id, conn, s.splitter)
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
134
135
136
137
  		s.newConnection(client)
  	}
  }
  
cd2f96ab   zhangqijia   fix: 优化连接管理
138
  func (s *Server) Stop() {
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
139
  	StopTimer()
58e37bfe   zhangqijia   add sync.Pool to ...
140
  	s.connManage.StopAllConns()
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
141
  }
765431a4   zhangqijia   增加schema接口, 抽象 mo...
142
143
  
  func (s *Server) newConnection(conn IConnection) {
765431a4   zhangqijia   增加schema接口, 抽象 mo...
144
145
146
147
148
  	conn.SetConnectionCallback(s.connectionCallback)
  	conn.SetCloseCallback(s.removeConnection)
  	conn.SetMessageCallback(s.messageCallback)
  	conn.SetTimerCallback(s.timerCallback)
  
58e37bfe   zhangqijia   add sync.Pool to ...
149
  	conn.Start()
765431a4   zhangqijia   增加schema接口, 抽象 mo...
150
151
152
153
  }
  
  func (s *Server) removeConnection(conn IConnection) {
  	s.closeCallback(conn)
765431a4   zhangqijia   增加schema接口, 抽象 mo...
154
  }