feat: server.Server 新增 ConnectionOpenedAfterEvent
This commit is contained in:
parent
054b3a7ec9
commit
8dde18a36e
|
@ -65,6 +65,21 @@ func newWebsocketConn(server *Server, ws *websocket.Conn, ip string) *Conn {
|
|||
return c
|
||||
}
|
||||
|
||||
// NewEmptyConn 创建一个适用于测试的空连接
|
||||
func NewEmptyConn(server *Server) *Conn {
|
||||
c := &Conn{
|
||||
server: server,
|
||||
remoteAddr: &net.TCPAddr{},
|
||||
ip: "0.0.0.0:0",
|
||||
data: map[any]any{},
|
||||
}
|
||||
var wait = new(sync.WaitGroup)
|
||||
wait.Add(1)
|
||||
go c.writeLoop(wait)
|
||||
wait.Wait()
|
||||
return c
|
||||
}
|
||||
|
||||
// Conn 服务器连接
|
||||
type Conn struct {
|
||||
server *Server
|
||||
|
|
|
@ -20,6 +20,7 @@ type ReceiveCrossPacketEventHandle func(srv *Server, senderServerId int64, packe
|
|||
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 event struct {
|
||||
*Server
|
||||
|
@ -32,9 +33,9 @@ type event struct {
|
|||
receiveCrossPacketEventHandles []ReceiveCrossPacketEventHandle
|
||||
messageErrorEventHandles []MessageErrorEventHandle
|
||||
messageLowExecEventHandles []MessageLowExecEventHandle
|
||||
connectionOpenedAfterEventHandles []ConnectionOpenedAfterEventHandle
|
||||
|
||||
consoleCommandEventHandles map[string][]ConsoleCommandEventHandle
|
||||
|
||||
consoleCommandEventHandleInitOnce sync.Once
|
||||
}
|
||||
|
||||
|
@ -211,6 +212,23 @@ func (slf *event) OnMessageLowExecEvent(message *Message, cost time.Duration) {
|
|||
})
|
||||
}
|
||||
|
||||
// RegConnectionOpenedAfterEvent 在连接打开事件处理完成后将立刻执行被注册的事件处理函数
|
||||
func (slf *event) RegConnectionOpenedAfterEvent(handle ConnectionOpenedAfterEventHandle) {
|
||||
if slf.network == NetworkHttp {
|
||||
panic(ErrNetworkIncompatibleHttp)
|
||||
}
|
||||
slf.connectionOpenedAfterEventHandles = append(slf.connectionOpenedAfterEventHandles, handle)
|
||||
log.Info("Server", log.String("RegEvent", runtimes.CurrentRunningFuncName()), log.String("handle", reflect.TypeOf(handle).String()))
|
||||
}
|
||||
|
||||
func (slf *event) OnConnectionOpenedAfterEvent(conn *Conn) {
|
||||
PushSystemMessage(slf.Server, func() {
|
||||
for _, handle := range slf.connectionOpenedAfterEventHandles {
|
||||
handle(slf.Server, conn)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (slf *event) check() {
|
||||
switch slf.network {
|
||||
case NetworkHttp, NetworkGRPC:
|
||||
|
|
|
@ -184,6 +184,7 @@ func (slf *Server) Run(addr string) error {
|
|||
|
||||
conn := newKcpConn(slf, session)
|
||||
slf.OnConnectionOpenedEvent(conn)
|
||||
slf.OnConnectionOpenedAfterEvent(conn)
|
||||
|
||||
go func(conn *Conn) {
|
||||
defer func() {
|
||||
|
|
Loading…
Reference in New Issue