refactor(service): export WebServer and NewWebServer for compatibility

This commit is contained in:
AI Engineer 2026-06-06 09:34:20 +08:00
parent fbf7e6475c
commit c891d37fad
11 changed files with 57 additions and 57 deletions

View File

@ -24,7 +24,7 @@ func MakeDocument() []Api {
return DefaultServer.MakeDocument() return DefaultServer.MakeDocument()
} }
func (ws *webServer) MakeDocument() []Api { func (ws *WebServer) MakeDocument() []Api {
out := make([]Api, 0) out := make([]Api, 0)
// 1. Rewrite & Proxy // 1. Rewrite & Proxy

View File

@ -16,7 +16,7 @@ import (
) )
type RouteHandler struct { type RouteHandler struct {
ws *webServer ws *WebServer
webRequestingNum int64 webRequestingNum int64
} }
@ -245,7 +245,7 @@ func hostOnly(host string) string {
return h return h
} }
func (ws *webServer) findService(method, host, path string, args map[string]any) (*webServiceType, *websocketServiceType) { func (ws *WebServer) findService(method, host, path string, args map[string]any) (*webServiceType, *websocketServiceType) {
ws.webServicesLock.RLock() ws.webServicesLock.RLock()
defer ws.webServicesLock.RUnlock() defer ws.webServicesLock.RUnlock()
@ -339,7 +339,7 @@ func parseRequestArgs(request *Request, args map[string]any) {
} }
} }
func (ws *webServer) checkAuth(authLevel int, options *WebServiceOptions, request *Request, response *Response, args map[string]any, logger *log.Logger) (bool, any) { func (ws *WebServer) checkAuth(authLevel int, options *WebServiceOptions, request *Request, response *Response, args map[string]any, logger *log.Logger) (bool, any) {
ac := ws.webAuthCheckers[authLevel] ac := ws.webAuthCheckers[authLevel]
if ac == nil { if ac == nil {
ac = ws.webAuthChecker ac = ws.webAuthChecker
@ -358,7 +358,7 @@ func (ws *webServer) checkAuth(authLevel int, options *WebServiceOptions, reques
return pass, obj return pass, obj
} }
func (ws *webServer) doWebService(service *webServiceType, request *Request, response *Response, args map[string]any, func (ws *WebServer) doWebService(service *webServiceType, request *Request, response *Response, args map[string]any,
result any, logger *log.Logger, object any) any { result any, logger *log.Logger, object any) any {
if result != nil { if result != nil {
return result return result
@ -436,7 +436,7 @@ func outputResult(response *Response, result any) {
_, _ = response.Write(data) _, _ = response.Write(data)
} }
} }
func (ws *webServer) handleClientKeys(request *Request, response *Response) { func (ws *WebServer) handleClientKeys(request *Request, response *Response) {
// SessionId // SessionId
if ws.usedSessionIdKey != "" { if ws.usedSessionIdKey != "" {
sessionId := request.Header().Get(ws.usedSessionIdKey) sessionId := request.Header().Get(ws.usedSessionIdKey)

View File

@ -88,7 +88,7 @@ func (hc *HostContext) Proxy(authLevel int, path string, to string) *HostContext
return hc return hc
} }
func (ws *webServer) findProxy(request *Request) (int, *string, *string, string) { func (ws *WebServer) findProxy(request *Request) (int, *string, *string, string) {
host := request.Host host := request.Host
hostOnly, port, _ := strings.Cut(host, ":") hostOnly, port, _ := strings.Cut(host, ":")
hosts := []string{host} hosts := []string{host}
@ -145,7 +145,7 @@ func (ws *webServer) findProxy(request *Request) (int, *string, *string, string)
return 0, nil, nil, "" return 0, nil, nil, ""
} }
func (ws *webServer) processProxy(request *Request, response *Response, logger *log.Logger) bool { func (ws *WebServer) processProxy(request *Request, response *Response, logger *log.Logger) bool {
authLevel, proxyToApp, proxyToPath, foundHost := ws.findProxy(request) authLevel, proxyToApp, proxyToPath, foundHost := ws.findProxy(request)
if proxyToApp == nil || proxyToPath == nil || *proxyToApp == "" || *proxyToPath == "" { if proxyToApp == nil || proxyToPath == nil || *proxyToApp == "" || *proxyToPath == "" {
@ -186,7 +186,7 @@ func (ws *webServer) processProxy(request *Request, response *Response, logger *
return true return true
} }
func (ws *webServer) getHttpClient() *gohttp.Client { func (ws *WebServer) getHttpClient() *gohttp.Client {
// 尝试从注入对象获取 // 尝试从注入对象获取
if obj := ws.GetInject(reflect.TypeOf(&gohttp.Client{})); obj != nil { if obj := ws.GetInject(reflect.TypeOf(&gohttp.Client{})); obj != nil {
return obj.(*gohttp.Client) return obj.(*gohttp.Client)
@ -198,7 +198,7 @@ func (ws *webServer) getHttpClient() *gohttp.Client {
return gohttp.NewClient(timeout) return gohttp.NewClient(timeout)
} }
func (ws *webServer) checkAuthForProxy(authLevel int, request *Request, response *Response, logger *log.Logger) (bool, any) { func (ws *WebServer) checkAuthForProxy(authLevel int, request *Request, response *Response, logger *log.Logger) (bool, any) {
ac := ws.webAuthCheckers[authLevel] ac := ws.webAuthCheckers[authLevel]
if ac == nil { if ac == nil {
ac = ws.webAuthChecker ac = ws.webAuthChecker
@ -245,7 +245,7 @@ func ReplaceProxies(host string, rules []ProxyRule) {
DefaultServer.ReplaceProxies(host, rules) DefaultServer.ReplaceProxies(host, rules)
} }
func (ws *webServer) ReplaceProxies(host string, rules []ProxyRule) { func (ws *WebServer) ReplaceProxies(host string, rules []ProxyRule) {
newProxies := make([]*proxyType, 0, len(rules)) newProxies := make([]*proxyType, 0, len(rules))
for _, r := range rules { for _, r := range rules {
newProxies = append(newProxies, parseProxyRule(r.AuthLevel, r.Path, r.ToApp, r.ToPath, r.To)) newProxies = append(newProxies, parseProxyRule(r.AuthLevel, r.Path, r.ToApp, r.ToPath, r.To))

View File

@ -17,14 +17,14 @@ func OnReload(handler func() error) {
DefaultServer.OnReload(handler) DefaultServer.OnReload(handler)
} }
func (ws *webServer) OnReload(handler func() error) { func (ws *WebServer) OnReload(handler func() error) {
globalReloadHook.lock.Lock() globalReloadHook.lock.Lock()
defer globalReloadHook.lock.Unlock() defer globalReloadHook.lock.Unlock()
globalReloadHook.hooks = append(globalReloadHook.hooks, handler) globalReloadHook.hooks = append(globalReloadHook.hooks, handler)
} }
// triggerReload 触发所有注册的重新加载钩子 // triggerReload 触发所有注册的重新加载钩子
func (ws *webServer) triggerReload() error { func (ws *WebServer) triggerReload() error {
globalReloadHook.lock.RLock() globalReloadHook.lock.RLock()
hooks := make([]func() error, len(globalReloadHook.hooks)) hooks := make([]func() error, len(globalReloadHook.hooks))
copy(hooks, globalReloadHook.hooks) copy(hooks, globalReloadHook.hooks)

View File

@ -19,7 +19,7 @@ type Response struct {
dontLog200 bool `js:"-"` dontLog200 bool `js:"-"`
dontLogArgs []string `js:"-"` dontLogArgs []string `js:"-"`
ProxyHeader *http.Header `js:"-"` ProxyHeader *http.Header `js:"-"`
server *webServer `js:"-"` server *WebServer `js:"-"`
} }
func (r *Response) SetCookie(cookie *Cookie) { func (r *Response) SetCookie(cookie *Cookie) {
@ -38,7 +38,7 @@ func (r *Response) SetCookie(cookie *Cookie) {
} }
// NewResponse 创建 Response 包装 // NewResponse 创建 Response 包装
func NewResponse(writer http.ResponseWriter, server *webServer) *Response { func NewResponse(writer http.ResponseWriter, server *WebServer) *Response {
return &Response{ return &Response{
Writer: writer, Writer: writer,
Code: http.StatusOK, Code: http.StatusOK,

View File

@ -49,7 +49,7 @@ func (hc *HostContext) Rewrite(path string, to string) *HostContext {
return hc return hc
} }
func (ws *webServer) processRewrite(request *Request, response *Response, logger *log.Logger) bool { func (ws *WebServer) processRewrite(request *Request, response *Response, logger *log.Logger) bool {
host := request.Host host := request.Host
hostOnly, port, _ := strings.Cut(host, ":") hostOnly, port, _ := strings.Cut(host, ":")
hosts := []string{host} hosts := []string{host}
@ -139,7 +139,7 @@ func ReplaceRewrites(host string, rules []RewriteRule) {
DefaultServer.ReplaceRewrites(host, rules) DefaultServer.ReplaceRewrites(host, rules)
} }
func (ws *webServer) ReplaceRewrites(host string, rules []RewriteRule) { func (ws *WebServer) ReplaceRewrites(host string, rules []RewriteRule) {
newRewrites := make([]*rewriteType, 0, len(rules)) newRewrites := make([]*rewriteType, 0, len(rules))
for _, r := range rules { for _, r := range rules {
newRewrites = append(newRewrites, parseRewriteRule(r.Path, r.ToPath, r.To)) newRewrites = append(newRewrites, parseRewriteRule(r.Path, r.ToPath, r.To))

View File

@ -23,7 +23,7 @@ func TestStaticRobustness(t *testing.T) {
_ = os.WriteFile(testFile, content, 0644) _ = os.WriteFile(testFile, content, 0644)
// 注册静态目录 // 注册静态目录
ws := newWebServer() ws := NewWebServer()
ws.Config.App = "test" ws.Config.App = "test"
ws.Static("/img/", tempDir) ws.Static("/img/", tempDir)
@ -45,7 +45,7 @@ func TestStaticRobustness(t *testing.T) {
} }
func TestDynamicRobustness(t *testing.T) { func TestDynamicRobustness(t *testing.T) {
ws := newWebServer() ws := NewWebServer()
ws.Config.App = "test" ws.Config.App = "test"
pathPattern := "/api/scene/{name}" pathPattern := "/api/scene/{name}"
@ -72,7 +72,7 @@ func TestDynamicRobustness(t *testing.T) {
} }
func TestHostMatching(t *testing.T) { func TestHostMatching(t *testing.T) {
ws := newWebServer() ws := NewWebServer()
ws.Config.App = "test" ws.Config.App = "test"
// 1. 注册只带端口的 Host // 1. 注册只带端口的 Host

View File

@ -28,7 +28,7 @@ type staticType struct {
rootPath *string rootPath *string
} }
type webServer struct { type WebServer struct {
Config ServiceConfig Config ServiceConfig
server *http.Server server *http.Server
listener net.Listener listener net.Listener
@ -105,13 +105,13 @@ type webServer struct {
} }
// DefaultServer 全局单例服务实例 // DefaultServer 全局单例服务实例
var DefaultServer = newWebServer() var DefaultServer = NewWebServer()
// Config 全局配置对象 (指向 DefaultServer.Config) // Config 全局配置对象 (指向 DefaultServer.Config)
var Config = &DefaultServer.Config var Config = &DefaultServer.Config
func newWebServer() *webServer { func NewWebServer() *WebServer {
ws := &webServer{ ws := &WebServer{
webServices: make(map[string]map[string]*webServiceType), webServices: make(map[string]map[string]*webServiceType),
regexWebServices: make(map[string][]*webServiceType), regexWebServices: make(map[string][]*webServiceType),
webServicesList: make([]*webServiceType, 0), webServicesList: make([]*webServiceType, 0),
@ -144,7 +144,7 @@ func SetDiscovererForTest(d *discover.Discoverer) {
} }
// ApplyConfig 将 ServiceConfig 中的路由策略应用到内部的文件级策略中 // ApplyConfig 将 ServiceConfig 中的路由策略应用到内部的文件级策略中
func (ws *webServer) ApplyConfig() { func (ws *WebServer) ApplyConfig() {
ws.hostPoliciesLock.Lock() ws.hostPoliciesLock.Lock()
defer ws.hostPoliciesLock.Unlock() defer ws.hostPoliciesLock.Unlock()
@ -232,7 +232,7 @@ func (ws *webServer) ApplyConfig() {
ws.rebuildStaticsUnderLock("") ws.rebuildStaticsUnderLock("")
} }
func (ws *webServer) rebuildProxiesUnderLock(host string) { func (ws *WebServer) rebuildProxiesUnderLock(host string) {
combined := make([]*proxyType, 0) combined := make([]*proxyType, 0)
combined = append(combined, ws.codeProxies[host]...) combined = append(combined, ws.codeProxies[host]...)
combined = append(combined, ws.fileProxies[host]...) combined = append(combined, ws.fileProxies[host]...)
@ -244,7 +244,7 @@ func (ws *webServer) rebuildProxiesUnderLock(host string) {
ws.hostProxies[host] = combined ws.hostProxies[host] = combined
} }
func (ws *webServer) rebuildRewritesUnderLock(host string) { func (ws *WebServer) rebuildRewritesUnderLock(host string) {
combined := make([]*rewriteType, 0) combined := make([]*rewriteType, 0)
combined = append(combined, ws.codeRewrites[host]...) combined = append(combined, ws.codeRewrites[host]...)
combined = append(combined, ws.fileRewrites[host]...) combined = append(combined, ws.fileRewrites[host]...)
@ -256,7 +256,7 @@ func (ws *webServer) rebuildRewritesUnderLock(host string) {
ws.hostRewrites[host] = combined ws.hostRewrites[host] = combined
} }
func (ws *webServer) rebuildStaticsUnderLock(host string) { func (ws *WebServer) rebuildStaticsUnderLock(host string) {
combined := make(map[string]*string) combined := make(map[string]*string)
for k, v := range ws.codeStatics[host] { for k, v := range ws.codeStatics[host] {
combined[k] = v combined[k] = v
@ -286,7 +286,7 @@ func (ws *webServer) rebuildStaticsUnderLock(host string) {
} }
// Start 启动服务,实现 starter.Service 接口 // Start 启动服务,实现 starter.Service 接口
func (ws *webServer) Start(ctx context.Context, logger *log.Logger) error { func (ws *WebServer) Start(ctx context.Context, logger *log.Logger) error {
if logger == nil { if logger == nil {
logger = log.DefaultLogger logger = log.DefaultLogger
} }
@ -442,7 +442,7 @@ func (ws *webServer) Start(ctx context.Context, logger *log.Logger) error {
} }
// Stop 停止服务,实现 starter.Service 接口 // Stop 停止服务,实现 starter.Service 接口
func (ws *webServer) Stop(ctx context.Context) error { func (ws *WebServer) Stop(ctx context.Context) error {
ws.running = false ws.running = false
// 执行停机钩子 (反序) // 执行停机钩子 (反序)
@ -465,7 +465,7 @@ func (ws *webServer) Stop(ctx context.Context) error {
} }
// Status 检查服务健康状态,实现 starter.Service 接口 // Status 检查服务健康状态,实现 starter.Service 接口
func (ws *webServer) Status() (string, error) { func (ws *WebServer) Status() (string, error) {
if ws.server == nil || !ws.running { if ws.server == nil || !ws.running {
return "", fmt.Errorf("server is not running") return "", fmt.Errorf("server is not running")
} }
@ -473,7 +473,7 @@ func (ws *webServer) Status() (string, error) {
} }
// Reload 实现配置重新加载,实现 starter.Reloader 接口 // Reload 实现配置重新加载,实现 starter.Reloader 接口
func (ws *webServer) Reload() error { func (ws *WebServer) Reload() error {
logger := ws.logger logger := ws.logger
if logger == nil { if logger == nil {
logger = log.DefaultLogger logger = log.DefaultLogger
@ -490,7 +490,7 @@ func (ws *webServer) Reload() error {
// AsyncServer 兼容旧版异步服务实例 // AsyncServer 兼容旧版异步服务实例
type AsyncServer struct { type AsyncServer struct {
*webServer *WebServer
} }
// Stop 兼容旧版的无参数停止方法 // Stop 兼容旧版的无参数停止方法
@ -501,13 +501,13 @@ func (as *AsyncServer) Stop() {
} }
ctx, cancel := context.WithTimeout(context.Background(), stopTimeout) ctx, cancel := context.WithTimeout(context.Background(), stopTimeout)
defer cancel() defer cancel()
_ = as.webServer.Stop(ctx) _ = as.WebServer.Stop(ctx)
} }
// AsyncStart 兼容旧版的异步启动方法 // AsyncStart 兼容旧版的异步启动方法
func AsyncStart() *AsyncServer { func AsyncStart() *AsyncServer {
_ = DefaultServer.Start(context.Background(), log.DefaultLogger) _ = DefaultServer.Start(context.Background(), log.DefaultLogger)
return &AsyncServer{webServer: DefaultServer} return &AsyncServer{WebServer: DefaultServer}
} }
// Wait 等待服务结束 (兼容旧版,直接阻塞) // Wait 等待服务结束 (兼容旧版,直接阻塞)

View File

@ -61,7 +61,7 @@ func SetClientKeys(deviceIdKey, clientAppKey, sessionIdKey string) {
DefaultServer.SetClientKeys(deviceIdKey, clientAppKey, sessionIdKey) DefaultServer.SetClientKeys(deviceIdKey, clientAppKey, sessionIdKey)
} }
func (ws *webServer) SetClientKeys(deviceIdKey, clientAppKey, sessionIdKey string) { func (ws *WebServer) SetClientKeys(deviceIdKey, clientAppKey, sessionIdKey string) {
ws.usedDeviceIdKey = deviceIdKey ws.usedDeviceIdKey = deviceIdKey
ws.usedClientAppKey = clientAppKey ws.usedClientAppKey = clientAppKey
ws.usedSessionIdKey = sessionIdKey ws.usedSessionIdKey = sessionIdKey
@ -72,7 +72,7 @@ func SetSessionIdMaker(maker func() string) {
DefaultServer.SetSessionIdMaker(maker) DefaultServer.SetSessionIdMaker(maker)
} }
func (ws *webServer) SetSessionIdMaker(maker func() string) { func (ws *WebServer) SetSessionIdMaker(maker func() string) {
ws.sessionIdMaker = maker ws.sessionIdMaker = maker
} }
@ -81,7 +81,7 @@ func SetAuthChecker(authChecker func(authLevel int, logger *log.Logger, url *str
DefaultServer.SetAuthChecker(authChecker) DefaultServer.SetAuthChecker(authChecker)
} }
func (ws *webServer) SetAuthChecker(authChecker func(authLevel int, logger *log.Logger, url *string, in map[string]any, request *Request, response *Response, options *WebServiceOptions) (pass bool, object any)) { func (ws *WebServer) SetAuthChecker(authChecker func(authLevel int, logger *log.Logger, url *string, in map[string]any, request *Request, response *Response, options *WebServiceOptions) (pass bool, object any)) {
ws.webAuthChecker = authChecker ws.webAuthChecker = authChecker
} }
@ -90,7 +90,7 @@ func AddAuthChecker(authLevels []int, authChecker func(authLevel int, logger *lo
DefaultServer.AddAuthChecker(authLevels, authChecker) DefaultServer.AddAuthChecker(authLevels, authChecker)
} }
func (ws *webServer) AddAuthChecker(authLevels []int, authChecker func(authLevel int, logger *log.Logger, url *string, in map[string]any, request *Request, response *Response, options *WebServiceOptions) (pass bool, object any)) { func (ws *WebServer) AddAuthChecker(authLevels []int, authChecker func(authLevel int, logger *log.Logger, url *string, in map[string]any, request *Request, response *Response, options *WebServiceOptions) (pass bool, object any)) {
for _, al := range authLevels { for _, al := range authLevels {
ws.webAuthCheckers[al] = authChecker ws.webAuthCheckers[al] = authChecker
} }
@ -101,7 +101,7 @@ func SetInFilter(filter func(in *map[string]any, request *Request, response *Res
DefaultServer.SetInFilter(filter) DefaultServer.SetInFilter(filter)
} }
func (ws *webServer) SetInFilter(filter func(in *map[string]any, request *Request, response *Response, logger *log.Logger) (out any)) { func (ws *WebServer) SetInFilter(filter func(in *map[string]any, request *Request, response *Response, logger *log.Logger) (out any)) {
ws.inFilters = append(ws.inFilters, filter) ws.inFilters = append(ws.inFilters, filter)
} }
@ -110,7 +110,7 @@ func AddShutdownHook(hook func()) {
DefaultServer.AddShutdownHook(hook) DefaultServer.AddShutdownHook(hook)
} }
func (ws *webServer) AddShutdownHook(hook func()) { func (ws *WebServer) AddShutdownHook(hook func()) {
ws.shutdownHooksLock.Lock() ws.shutdownHooksLock.Lock()
defer ws.shutdownHooksLock.Unlock() defer ws.shutdownHooksLock.Unlock()
ws.shutdownHooks = append(ws.shutdownHooks, hook) ws.shutdownHooks = append(ws.shutdownHooks, hook)
@ -121,7 +121,7 @@ func SetOutFilter(filter func(in map[string]any, request *Request, response *Res
DefaultServer.SetOutFilter(filter) DefaultServer.SetOutFilter(filter)
} }
func (ws *webServer) SetOutFilter(filter func(in map[string]any, request *Request, response *Response, out any, logger *log.Logger) (newOut any, isOver bool)) { func (ws *WebServer) SetOutFilter(filter func(in map[string]any, request *Request, response *Response, out any, logger *log.Logger) (newOut any, isOver bool)) {
ws.webServicesLock.Lock() ws.webServicesLock.Lock()
defer ws.webServicesLock.Unlock() defer ws.webServicesLock.Unlock()
ws.outFilters = append(ws.outFilters, filter) ws.outFilters = append(ws.outFilters, filter)
@ -130,7 +130,7 @@ func (ws *webServer) SetOutFilter(filter func(in map[string]any, request *Reques
// HostContext 提供流式服务注册能力 // HostContext 提供流式服务注册能力
type HostContext struct { type HostContext struct {
ws *webServer ws *WebServer
host string host string
} }
@ -139,7 +139,7 @@ func Host(host string) *HostContext {
return DefaultServer.Host(host) return DefaultServer.Host(host)
} }
func (ws *webServer) Host(host string) *HostContext { func (ws *WebServer) Host(host string) *HostContext {
if host == "" { if host == "" {
host = "*" host = "*"
} }
@ -151,7 +151,7 @@ func Register(method, path string, serviceFunc any) *webServiceType {
return DefaultServer.Register(method, path, serviceFunc) return DefaultServer.Register(method, path, serviceFunc)
} }
func (ws *webServer) Register(method, path string, serviceFunc any) *webServiceType { func (ws *WebServer) Register(method, path string, serviceFunc any) *webServiceType {
return ws.Host("*").Register(method, path, serviceFunc) return ws.Host("*").Register(method, path, serviceFunc)
} }
@ -160,7 +160,7 @@ func RegisterWebsocket(path string, serviceFunc any) *websocketServiceType {
return DefaultServer.RegisterWebsocket(path, serviceFunc) return DefaultServer.RegisterWebsocket(path, serviceFunc)
} }
func (ws *webServer) RegisterWebsocket(path string, serviceFunc any) *websocketServiceType { func (ws *WebServer) RegisterWebsocket(path string, serviceFunc any) *websocketServiceType {
return ws.Host("*").WebSocket(path, serviceFunc) return ws.Host("*").WebSocket(path, serviceFunc)
} }
@ -169,7 +169,7 @@ func Proxy(authLevel int, path string, to string) {
DefaultServer.Proxy(authLevel, path, to) DefaultServer.Proxy(authLevel, path, to)
} }
func (ws *webServer) Proxy(authLevel int, path string, to string) { func (ws *WebServer) Proxy(authLevel int, path string, to string) {
ws.Host("*").Proxy(authLevel, path, to) ws.Host("*").Proxy(authLevel, path, to)
} }
@ -178,7 +178,7 @@ func Restful(authLevel int, path string, serviceStruct any) {
DefaultServer.Restful(authLevel, path, serviceStruct) DefaultServer.Restful(authLevel, path, serviceStruct)
} }
func (ws *webServer) Restful(authLevel int, path string, serviceStruct any) { func (ws *WebServer) Restful(authLevel int, path string, serviceStruct any) {
ws.Host("*").Restful(authLevel, path, serviceStruct) ws.Host("*").Restful(authLevel, path, serviceStruct)
} }
@ -468,7 +468,7 @@ func GetInject(dataType reflect.Type) any {
return DefaultServer.GetInject(dataType) return DefaultServer.GetInject(dataType)
} }
func (ws *webServer) GetInject(dataType reflect.Type) any { func (ws *WebServer) GetInject(dataType reflect.Type) any {
if obj, exists := ws.injectObjects[dataType]; exists { if obj, exists := ws.injectObjects[dataType]; exists {
return obj return obj
} }
@ -497,7 +497,7 @@ func EnableWebDev(config watch.Config) {
DefaultServer.webDevConfig = config DefaultServer.webDevConfig = config
} }
func (ws *webServer) initWebDev(logger *log.Logger) { func (ws *WebServer) initWebDev(logger *log.Logger) {
webDevOnce.Do(func() { webDevOnce.Do(func() {
logger.Warning("Web Development Mode Enabled. This should NOT be used in production environment.") logger.Warning("Web Development Mode Enabled. This should NOT be used in production environment.")
onWatchConn := map[string]*WebSocketConn{} onWatchConn := map[string]*WebSocketConn{}

View File

@ -26,7 +26,7 @@ func Static(path, rootPath string) {
DefaultServer.Static(path, rootPath) DefaultServer.Static(path, rootPath)
} }
func (ws *webServer) Static(path, rootPath string) { func (ws *WebServer) Static(path, rootPath string) {
ws.Host("*").Static(path, rootPath) ws.Host("*").Static(path, rootPath)
} }
@ -35,7 +35,7 @@ func StaticByHost(path, rootPath, host string) {
DefaultServer.StaticByHost(path, rootPath, host) DefaultServer.StaticByHost(path, rootPath, host)
} }
func (ws *webServer) StaticByHost(path, rootPath, host string) { func (ws *WebServer) StaticByHost(path, rootPath, host string) {
if !filepath.IsAbs(rootPath) { if !filepath.IsAbs(rootPath) {
if absPath, err := filepath.Abs(rootPath); err == nil { if absPath, err := filepath.Abs(rootPath); err == nil {
rootPath = absPath rootPath = absPath
@ -57,7 +57,7 @@ func ReplaceStatics(host string, config map[string]string) {
DefaultServer.ReplaceStatics(host, config) DefaultServer.ReplaceStatics(host, config)
} }
func (ws *webServer) ReplaceStatics(host string, config map[string]string) { func (ws *WebServer) ReplaceStatics(host string, config map[string]string) {
newStatics := make(map[string]*string, len(config)) newStatics := make(map[string]*string, len(config))
for path, rootPath := range config { for path, rootPath := range config {
rp := rootPath rp := rootPath
@ -76,7 +76,7 @@ func (ws *webServer) ReplaceStatics(host string, config map[string]string) {
ws.rebuildStaticsUnderLock(host) ws.rebuildStaticsUnderLock(host)
} }
func (ws *webServer) getStaticFilePath(requestPath, host string) string { func (ws *WebServer) getStaticFilePath(requestPath, host string) string {
requestPath, _ = url.PathUnescape(requestPath) requestPath, _ = url.PathUnescape(requestPath)
ws.staticsByHostLock.RLock() ws.staticsByHostLock.RLock()
defer ws.staticsByHostLock.RUnlock() defer ws.staticsByHostLock.RUnlock()
@ -90,7 +90,7 @@ func (ws *webServer) getStaticFilePath(requestPath, host string) string {
return ws.findMatchedPathSorted(ws.hostStatics[""], requestPath) return ws.findMatchedPathSorted(ws.hostStatics[""], requestPath)
} }
func (ws *webServer) findMatchedPathSorted(config []*staticType, requestPath string) string { func (ws *WebServer) findMatchedPathSorted(config []*staticType, requestPath string) string {
for _, rule := range config { for _, rule := range config {
if strings.HasPrefix(requestPath, rule.path) { if strings.HasPrefix(requestPath, rule.path) {
return filepath.Join(*rule.rootPath, requestPath[len(rule.path):]) return filepath.Join(*rule.rootPath, requestPath[len(rule.path):])
@ -99,7 +99,7 @@ func (ws *webServer) findMatchedPathSorted(config []*staticType, requestPath str
return "" return ""
} }
func (ws *webServer) processStatic(requestPath string, request *Request, response *Response, logger *log.Logger) bool { func (ws *WebServer) processStatic(requestPath string, request *Request, response *Response, logger *log.Logger) bool {
filePath := ws.getStaticFilePath(requestPath, request.Host) filePath := ws.getStaticFilePath(requestPath, request.Host)
if filePath == "" { if filePath == "" {
return false return false

View File

@ -59,7 +59,7 @@ func Upgrade(response *Response, request *Request) (*WebSocketConn, error) {
return &WebSocketConn{Conn: conn}, nil return &WebSocketConn{Conn: conn}, nil
} }
func (ws *webServer) doWebsocketService(wsc *websocketServiceType, request *Request, response *Response, logger *log.Logger, object any) { func (ws *WebServer) doWebsocketService(wsc *websocketServiceType, request *Request, response *Response, logger *log.Logger, object any) {
wsConn, err := Upgrade(response, request) wsConn, err := Upgrade(response, request)
if err != nil { if err != nil {
logger.Error("websocket upgrade failed", "error", err.Error()) logger.Error("websocket upgrade failed", "error", err.Error())