注释补充
This commit is contained in:
parent
3325e8ff44
commit
938441ee3e
1
main.go
1
main.go
|
@ -4,6 +4,5 @@ import "minotaur/server"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
s := server.New(server.NetworkKcp)
|
s := server.New(server.NetworkKcp)
|
||||||
|
|
||||||
s.Run(":9999")
|
s.Run(":9999")
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"github.com/xtaci/kcp-go/v5"
|
"github.com/xtaci/kcp-go/v5"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// newKcpConn 创建一个处理KCP的连接
|
||||||
func newKcpConn(session *kcp.UDPSession) *Conn {
|
func newKcpConn(session *kcp.UDPSession) *Conn {
|
||||||
return &Conn{
|
return &Conn{
|
||||||
ip: session.RemoteAddr().String(),
|
ip: session.RemoteAddr().String(),
|
||||||
|
@ -17,6 +18,7 @@ func newKcpConn(session *kcp.UDPSession) *Conn {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newKcpConn 创建一个处理GNet的连接
|
||||||
func newGNetConn(conn gnet.Conn) *Conn {
|
func newGNetConn(conn gnet.Conn) *Conn {
|
||||||
return &Conn{
|
return &Conn{
|
||||||
ip: conn.RemoteAddr().String(),
|
ip: conn.RemoteAddr().String(),
|
||||||
|
@ -27,6 +29,7 @@ func newGNetConn(conn gnet.Conn) *Conn {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newKcpConn 创建一个处理WebSocket的连接
|
||||||
func newWebsocketConn(ws *websocket.Conn) *Conn {
|
func newWebsocketConn(ws *websocket.Conn) *Conn {
|
||||||
return &Conn{
|
return &Conn{
|
||||||
ws: ws,
|
ws: ws,
|
||||||
|
@ -36,6 +39,7 @@ func newWebsocketConn(ws *websocket.Conn) *Conn {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Conn 服务器连接
|
||||||
type Conn struct {
|
type Conn struct {
|
||||||
ip string
|
ip string
|
||||||
ws *websocket.Conn
|
ws *websocket.Conn
|
||||||
|
@ -44,10 +48,12 @@ type Conn struct {
|
||||||
write func(data []byte) error
|
write func(data []byte) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Write 向连接中写入数据
|
||||||
func (slf *Conn) Write(data []byte) error {
|
func (slf *Conn) Write(data []byte) error {
|
||||||
return slf.write(data)
|
return slf.write(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close 关闭连接
|
||||||
func (slf *Conn) Close() {
|
func (slf *Conn) Close() {
|
||||||
if slf.ws != nil {
|
if slf.ws != nil {
|
||||||
slf.ws.Close()
|
slf.ws.Close()
|
||||||
|
|
|
@ -59,7 +59,7 @@ func (slf *event) OnConnectionReceivePacketEvent(conn *Conn, packet []byte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *event) check() {
|
func (slf *event) check() {
|
||||||
if len(slf.connectionReceivePacketEventHandles) == 0 {
|
if slf.network != NetworkHttp && len(slf.connectionReceivePacketEventHandles) == 0 {
|
||||||
log.Warn("Server", zap.String("ConnectionReceivePacketEvent", "Invalid server, no packets processed"))
|
log.Warn("Server", zap.String("ConnectionReceivePacketEvent", "Invalid server, no packets processed"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,14 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// MessageTypePacket 数据包消息类型:该类型的数据将被发送到 ConnectionReceivePacketEvent 进行处理
|
||||||
|
// - *server.Conn
|
||||||
|
// - []byte
|
||||||
MessageTypePacket MessageType = iota
|
MessageTypePacket MessageType = iota
|
||||||
|
|
||||||
|
// MessageTypeError 错误消息类型:根据不同的错误状态,将交由 Server 进行统一处理
|
||||||
|
// - error
|
||||||
|
// - server.MessageErrorAction
|
||||||
MessageTypeError
|
MessageTypeError
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11,8 +18,8 @@ var messageNames = map[MessageType]string{
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MessageErrorActionNone MessageErrorAction = iota
|
MessageErrorActionNone MessageErrorAction = iota // 错误消息类型操作:将不会被进行任何特殊处理,仅进行日志输出
|
||||||
MessageErrorActionShutdown
|
MessageErrorActionShutdown // 错误消息类型操作:当接收到该类型的操作时,服务器将执行 Server.Shutdown 函数
|
||||||
)
|
)
|
||||||
|
|
||||||
var messageErrorActionNames = map[MessageErrorAction]string{
|
var messageErrorActionNames = map[MessageErrorAction]string{
|
||||||
|
@ -21,7 +28,10 @@ var messageErrorActionNames = map[MessageErrorAction]string{
|
||||||
}
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
// MessageType 消息类型
|
||||||
MessageType byte
|
MessageType byte
|
||||||
|
|
||||||
|
// MessageErrorAction 错误消息类型操作
|
||||||
MessageErrorAction byte
|
MessageErrorAction byte
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// New 根据特定网络类型创建一个服务器
|
||||||
func New(network Network) *Server {
|
func New(network Network) *Server {
|
||||||
server := &Server{
|
server := &Server{
|
||||||
network: network,
|
network: network,
|
||||||
|
@ -28,6 +29,7 @@ func New(network Network) *Server {
|
||||||
return server
|
return server
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Server 网络服务器
|
||||||
type Server struct {
|
type Server struct {
|
||||||
*event
|
*event
|
||||||
network Network
|
network Network
|
||||||
|
@ -37,7 +39,7 @@ type Server struct {
|
||||||
messageChannel chan *message
|
messageChannel chan *message
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run 使用特定网络模式运行服务器
|
// Run 使用特定地址运行服务器
|
||||||
//
|
//
|
||||||
// server.NetworkTCP (addr:":8888")
|
// server.NetworkTCP (addr:":8888")
|
||||||
// server.NetworkTCP4 (addr:":8888")
|
// server.NetworkTCP4 (addr:":8888")
|
||||||
|
@ -192,6 +194,7 @@ func (slf *Server) Run(addr string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Shutdown 停止运行服务器
|
||||||
func (slf *Server) Shutdown(err error) {
|
func (slf *Server) Shutdown(err error) {
|
||||||
close(slf.messageChannel)
|
close(slf.messageChannel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -201,6 +204,7 @@ func (slf *Server) Shutdown(err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HttpRouter 当网络类型为 NetworkHttp 时将被允许获取路由器进行路由注册,否则将会发生 panic
|
||||||
func (slf *Server) HttpRouter() gin.IRouter {
|
func (slf *Server) HttpRouter() gin.IRouter {
|
||||||
if slf.httpServer == nil {
|
if slf.httpServer == nil {
|
||||||
panic(ErrNetworkOnlySupportHttp)
|
panic(ErrNetworkOnlySupportHttp)
|
||||||
|
@ -208,6 +212,7 @@ func (slf *Server) HttpRouter() gin.IRouter {
|
||||||
return slf.httpServer
|
return slf.httpServer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PushMessage 向服务器中写入特定类型的消息,需严格遵守消息属性要求
|
||||||
func (slf *Server) PushMessage(messageType MessageType, attrs ...any) {
|
func (slf *Server) PushMessage(messageType MessageType, attrs ...any) {
|
||||||
slf.messageChannel <- &message{
|
slf.messageChannel <- &message{
|
||||||
t: messageType,
|
t: messageType,
|
||||||
|
@ -215,6 +220,7 @@ func (slf *Server) PushMessage(messageType MessageType, attrs ...any) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dispatchMessage 消息分发
|
||||||
func (slf *Server) dispatchMessage(msg *message) {
|
func (slf *Server) dispatchMessage(msg *message) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
|
|
Loading…
Reference in New Issue