Blame view

common/components/server.go 2.74 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
133
134
135
136
137
  	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++
  		client := NewConn(id, conn, s)
  		s.newConnection(client)
  	}
  }
  
cd2f96ab   zhangqijia   fix: 优化连接管理
138
  func (s *Server) Stop() {
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
139
  	StopTimer()
765431a4   zhangqijia   增加schema接口, 抽象 mo...
140
  
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
149
150
151
152
153
  	conn.SetConnectionCallback(s.connectionCallback)
  	conn.SetCloseCallback(s.removeConnection)
  	conn.SetMessageCallback(s.messageCallback)
  	conn.SetTimerCallback(s.timerCallback)
  
  	go conn.Start()
  }
  
  func (s *Server) removeConnection(conn IConnection) {
  	s.closeCallback(conn)
765431a4   zhangqijia   增加schema接口, 抽象 mo...
154
  }