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