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