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
|
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 服务器连接
|
// Conn 服务器连接
|
||||||
type Conn struct {
|
type Conn struct {
|
||||||
server *Server
|
server *Server
|
||||||
|
|
|
@ -20,6 +20,7 @@ type ReceiveCrossPacketEventHandle func(srv *Server, senderServerId int64, packe
|
||||||
type MessageErrorEventHandle func(srv *Server, message *Message, err error)
|
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 event struct {
|
type event struct {
|
||||||
*Server
|
*Server
|
||||||
|
@ -32,9 +33,9 @@ type event struct {
|
||||||
receiveCrossPacketEventHandles []ReceiveCrossPacketEventHandle
|
receiveCrossPacketEventHandles []ReceiveCrossPacketEventHandle
|
||||||
messageErrorEventHandles []MessageErrorEventHandle
|
messageErrorEventHandles []MessageErrorEventHandle
|
||||||
messageLowExecEventHandles []MessageLowExecEventHandle
|
messageLowExecEventHandles []MessageLowExecEventHandle
|
||||||
|
connectionOpenedAfterEventHandles []ConnectionOpenedAfterEventHandle
|
||||||
|
|
||||||
consoleCommandEventHandles map[string][]ConsoleCommandEventHandle
|
consoleCommandEventHandles map[string][]ConsoleCommandEventHandle
|
||||||
|
|
||||||
consoleCommandEventHandleInitOnce sync.Once
|
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() {
|
func (slf *event) check() {
|
||||||
switch slf.network {
|
switch slf.network {
|
||||||
case NetworkHttp, NetworkGRPC:
|
case NetworkHttp, NetworkGRPC:
|
||||||
|
|
|
@ -184,6 +184,7 @@ func (slf *Server) Run(addr string) error {
|
||||||
|
|
||||||
conn := newKcpConn(slf, session)
|
conn := newKcpConn(slf, session)
|
||||||
slf.OnConnectionOpenedEvent(conn)
|
slf.OnConnectionOpenedEvent(conn)
|
||||||
|
slf.OnConnectionOpenedAfterEvent(conn)
|
||||||
|
|
||||||
go func(conn *Conn) {
|
go func(conn *Conn) {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
|
Loading…
Reference in New Issue