注释补充
This commit is contained in:
parent
3325e8ff44
commit
938441ee3e
1
main.go
1
main.go
|
@ -4,6 +4,5 @@ import "minotaur/server"
|
|||
|
||||
func main() {
|
||||
s := server.New(server.NetworkKcp)
|
||||
|
||||
s.Run(":9999")
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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"))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue