diff --git a/server/network.go b/server/network.go index 29932bb..3e5c1f0 100644 --- a/server/network.go +++ b/server/network.go @@ -41,6 +41,17 @@ var ( networks = []Network{ NetworkNone, NetworkTcp, NetworkTcp4, NetworkTcp6, NetworkUdp, NetworkUdp4, NetworkUdp6, NetworkUnix, NetworkHttp, NetworkWebsocket, NetworkKcp, NetworkGRPC, } + socketNetworks = map[Network]struct{}{ + NetworkTcp: {}, + NetworkTcp4: {}, + NetworkTcp6: {}, + NetworkUdp: {}, + NetworkUdp4: {}, + NetworkUdp6: {}, + NetworkUnix: {}, + NetworkKcp: {}, + NetworkWebsocket: {}, + } ) func init() { @@ -305,3 +316,8 @@ func (n Network) websocketMode(state chan<- error, srv *Server) { } }((&listener{srv: srv, Listener: l, state: state}).init()) } + +// IsSocket 返回当前服务器的网络模式是否为 Socket 模式 +func (n Network) IsSocket() bool { + return collection.KeyInMap(socketNetworks, n) +} diff --git a/server/server.go b/server/server.go index 7d7871d..c5c8d73 100644 --- a/server/server.go +++ b/server/server.go @@ -149,9 +149,7 @@ func (srv *Server) Run(addr string) (err error) { // IsSocket 是否是 Socket 模式 func (srv *Server) IsSocket() bool { - return srv.network == NetworkTcp || srv.network == NetworkTcp4 || srv.network == NetworkTcp6 || - srv.network == NetworkUdp || srv.network == NetworkUdp4 || srv.network == NetworkUdp6 || - srv.network == NetworkUnix || srv.network == NetworkKcp || srv.network == NetworkWebsocket + return srv.network.IsSocket() } // RunNone 是 Run("") 的简写,仅适用于运行 NetworkNone 服务器 diff --git a/server/service.go b/server/service.go index b0285aa..54abe6c 100644 --- a/server/service.go +++ b/server/service.go @@ -14,8 +14,8 @@ type Service interface { // BindService 绑定服务到特定 Server,被绑定的服务将会在 Server 初始化时执行 Service.OnInit 方法 func BindService(srv *Server, services ...Service) { - for _, service := range services { - service := service + for i := 0; i < len(services); i++ { + service := services[i] srv.services = append(srv.services, func() { name := reflect.TypeOf(service).String() defer func(name string) {