feat: server.Server 新增对连接写入事件前的处理函数
This commit is contained in:
parent
471ee48644
commit
5e26467dee
|
@ -94,6 +94,11 @@ type Conn struct {
|
|||
packets []*connPacket
|
||||
}
|
||||
|
||||
// IsEmpty 是否是空连接
|
||||
func (slf *Conn) IsEmpty() bool {
|
||||
return slf.ws == nil && slf.gn == nil && slf.kcp == nil
|
||||
}
|
||||
|
||||
// Reuse 重用连接
|
||||
// - 重用连接时,会将当前连接的数据复制到新连接中
|
||||
// - 通常在于连接断开后,重新连接时使用
|
||||
|
@ -174,6 +179,7 @@ func (slf *Conn) IsWebsocket() bool {
|
|||
// Write 向连接中写入数据
|
||||
// - messageType: websocket模式中指定消息类型
|
||||
func (slf *Conn) Write(packet Packet) {
|
||||
packet = slf.server.OnConnectionWritePacketBeforeEvent(slf, packet)
|
||||
if slf.packetPool == nil {
|
||||
return
|
||||
}
|
||||
|
@ -187,7 +193,8 @@ func (slf *Conn) Write(packet Packet) {
|
|||
|
||||
// WriteWithCallback 与 Write 相同,但是会在写入完成后调用 callback
|
||||
// - 当 callback 为 nil 时,与 Write 相同
|
||||
func (slf *Conn) WriteWithCallback(packet Packet, callback func(err error), messageType ...int) {
|
||||
func (slf *Conn) WriteWithCallback(packet Packet, callback func(err error)) {
|
||||
packet = slf.server.OnConnectionWritePacketBeforeEvent(slf, packet)
|
||||
if slf.packetPool == nil {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ type MessageErrorEventHandle func(srv *Server, message *Message, err error)
|
|||
type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
|
||||
type ConsoleCommandEventHandle func(srv *Server)
|
||||
type ConnectionOpenedAfterEventHandle func(srv *Server, conn *Conn)
|
||||
type ConnectionWritePacketBeforeEventHandle func(srv *Server, conn *Conn, packet Packet) Packet
|
||||
|
||||
type event struct {
|
||||
*Server
|
||||
|
@ -34,6 +35,7 @@ type event struct {
|
|||
messageErrorEventHandles []MessageErrorEventHandle
|
||||
messageLowExecEventHandles []MessageLowExecEventHandle
|
||||
connectionOpenedAfterEventHandles []ConnectionOpenedAfterEventHandle
|
||||
connectionWritePacketBeforeHandles []ConnectionWritePacketBeforeEventHandle
|
||||
|
||||
consoleCommandEventHandles map[string][]ConsoleCommandEventHandle
|
||||
consoleCommandEventHandleInitOnce sync.Once
|
||||
|
@ -229,6 +231,26 @@ func (slf *event) OnConnectionOpenedAfterEvent(conn *Conn) {
|
|||
}, "ConnectionOpenedAfterEvent")
|
||||
}
|
||||
|
||||
// RegConnectionWritePacketBeforeEvent 在发送数据包前将立刻执行被注册的事件处理函数
|
||||
func (slf *event) RegConnectionWritePacketBeforeEvent(handle ConnectionWritePacketBeforeEventHandle) {
|
||||
if slf.network == NetworkHttp {
|
||||
panic(ErrNetworkIncompatibleHttp)
|
||||
}
|
||||
slf.connectionWritePacketBeforeHandles = append(slf.connectionWritePacketBeforeHandles, handle)
|
||||
log.Info("Server", log.String("RegEvent", runtimes.CurrentRunningFuncName()), log.String("handle", reflect.TypeOf(handle).String()))
|
||||
}
|
||||
|
||||
func (slf *event) OnConnectionWritePacketBeforeEvent(conn *Conn, packet Packet) (newPacket Packet) {
|
||||
if len(slf.connectionWritePacketBeforeHandles) == 0 {
|
||||
return packet
|
||||
}
|
||||
newPacket = packet
|
||||
for _, handle := range slf.connectionWritePacketBeforeHandles {
|
||||
newPacket = handle(slf.Server, conn, packet)
|
||||
}
|
||||
return newPacket
|
||||
}
|
||||
|
||||
func (slf *event) check() {
|
||||
switch slf.network {
|
||||
case NetworkHttp, NetworkGRPC:
|
||||
|
|
Loading…
Reference in New Issue