feat: server.Server 将记录在线的连接信息,可获取到在线连接和计数等
This commit is contained in:
parent
6962cf4989
commit
8368fe0770
|
@ -123,6 +123,7 @@ func (slf *event) OnConnectionClosedEvent(conn *Conn, err any) {
|
|||
handle(slf.Server, conn, err)
|
||||
}
|
||||
conn.Close()
|
||||
slf.Server.online.Delete(conn.GetID())
|
||||
}
|
||||
|
||||
// RegConnectionOpenedEvent 在连接打开后将立刻执行被注册的事件处理函数
|
||||
|
@ -135,6 +136,7 @@ func (slf *event) RegConnectionOpenedEvent(handle ConnectionOpenedEventHandle) {
|
|||
}
|
||||
|
||||
func (slf *event) OnConnectionOpenedEvent(conn *Conn) {
|
||||
slf.Server.online.Set(conn.GetID(), conn)
|
||||
for _, handle := range slf.connectionOpenedEventHandles {
|
||||
handle(slf.Server, conn)
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ func New(network Network, options ...Option) *Server {
|
|||
runtime: &runtime{messagePoolSize: DefaultMessageBufferSize, messageChannelSize: DefaultMessageChannelSize},
|
||||
option: &option{},
|
||||
network: network,
|
||||
online: synchronization.NewMap[string, *Conn](),
|
||||
closeChannel: make(chan struct{}, 1),
|
||||
systemSignal: make(chan os.Signal, 1),
|
||||
}
|
||||
|
@ -77,6 +78,7 @@ type Server struct {
|
|||
network Network // 网络类型
|
||||
addr string // 侦听地址
|
||||
systemSignal chan os.Signal // 系统信号
|
||||
online *synchronization.Map[string, *Conn] // 在线连接
|
||||
ginServer *gin.Engine // HTTP模式下的路由器
|
||||
httpServer *http.Server // HTTP模式下的服务器
|
||||
grpcServer *grpc.Server // GRPC模式下的服务器
|
||||
|
@ -330,6 +332,33 @@ func (slf *Server) Run(addr string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// GetOnlineCount 获取在线人数
|
||||
func (slf *Server) GetOnlineCount() int {
|
||||
return slf.online.Size()
|
||||
}
|
||||
|
||||
// GetOnline 获取在线连接
|
||||
func (slf *Server) GetOnline(id string) *Conn {
|
||||
return slf.online.Get(id)
|
||||
}
|
||||
|
||||
// GetOnlineAll 获取所有在线连接
|
||||
func (slf *Server) GetOnlineAll() map[string]*Conn {
|
||||
return slf.online.Map()
|
||||
}
|
||||
|
||||
// IsOnline 是否在线
|
||||
func (slf *Server) IsOnline(id string) bool {
|
||||
return slf.online.Exist(id)
|
||||
}
|
||||
|
||||
// CloseConn 关闭连接
|
||||
func (slf *Server) CloseConn(id string) {
|
||||
if conn, exist := slf.online.GetExist(id); exist {
|
||||
conn.Close()
|
||||
}
|
||||
}
|
||||
|
||||
// IsProd 是否为生产模式
|
||||
func (slf *Server) IsProd() bool {
|
||||
return slf.prod
|
||||
|
@ -425,6 +454,7 @@ func (slf *Server) shutdown(err error, stack ...string) {
|
|||
}
|
||||
}
|
||||
|
||||
// GRPCServer 当网络类型为 NetworkGRPC 时将被允许获取 grpc 服务器,否则将会发生 panic
|
||||
func (slf *Server) GRPCServer() *grpc.Server {
|
||||
if slf.grpcServer == nil {
|
||||
panic(ErrNetworkOnlySupportGRPC)
|
||||
|
|
Loading…
Reference in New Issue