From acc468492fc76faa69d493c83098bfecbb1e720d Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Tue, 23 Jan 2024 16:53:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=90=91=20server.Se?= =?UTF-8?q?rver=20=E7=BB=91=E5=AE=9A=E4=B8=80=E4=BA=9B=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/server.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server/server.go b/server/server.go index 1923486..6062f09 100644 --- a/server/server.go +++ b/server/server.go @@ -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 {