feat: server.Server 新增 ConnectionOpenedAfterEvent

This commit is contained in:
kercylan98 2023-07-27 14:11:17 +08:00
parent 054b3a7ec9
commit 8dde18a36e
3 changed files with 36 additions and 2 deletions

View File

@ -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

View File

@ -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:

View File

@ -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() {