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
}
// 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

View File

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

View File

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