feat: 支持向 server.Server 绑定一些数据

This commit is contained in:
kercylan98 2024-01-23 16:53:42 +08:00
parent f08f06891c
commit acc468492f
1 changed files with 23 additions and 0 deletions

View File

@ -84,6 +84,7 @@ type Server struct {
systemSignal chan os.Signal // 系统信号
closeChannel chan struct{} // 关闭信号
multipleRuntimeErrorChan chan error // 多服务器模式下的运行时错误
data map[string]any // 服务器全局数据
messageCounter atomic.Int64 // 消息计数器
addr string // 侦听地址
@ -92,6 +93,28 @@ type Server struct {
services []func() // 服务
}
// LoadData 加载绑定的服务器数据
func LoadData[T any](srv *Server, name string, data any) T {
return srv.data[name].(T)
}
// BindData 绑定数据到特定服务器
func BindData(srv *Server, name string, data any) {
srv.BindData(name, data)
}
// BindData 绑定数据到特定服务器
func (srv *Server) BindData(name string, data any) {
if srv.data == nil {
srv.data = map[string]any{}
}
_, exist := srv.data[name]
if exist {
panic(fmt.Errorf("data with duplicate names is bound, got: %s", name))
}
srv.data[name] = data
}
// preCheckAndAdaptation 预检查及适配
func (srv *Server) preCheckAndAdaptation(addr string) (startState <-chan error, err error) {
if srv.event == nil {