From f92c5b37d57c6990f31b9e64078231852fcce4c9 Mon Sep 17 00:00:00 2001 From: wyx2685 Date: Sat, 27 Jan 2024 01:55:43 +0900 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/watch.go | 12 ++++++------ core/xray/xray.go | 41 +++++++++++++++++++++++------------------ main.go | 6 ------ node/user.go | 35 +++++++++++++++-------------------- 4 files changed, 44 insertions(+), 50 deletions(-) diff --git a/conf/watch.go b/conf/watch.go index 73921c7e..812ea66c 100644 --- a/conf/watch.go +++ b/conf/watch.go @@ -2,12 +2,12 @@ package conf import ( "fmt" - "github.com/fsnotify/fsnotify" "log" - "path" "path/filepath" "strings" "time" + + "github.com/fsnotify/fsnotify" ) func (p *Conf) Watch(filePath, xDnsPath string, sDnsPath string, reload func()) error { @@ -34,7 +34,7 @@ func (p *Conf) Watch(filePath, xDnsPath string, sDnsPath string, reload func()) case filepath.Base(xDnsPath), filepath.Base(sDnsPath): log.Println("DNS file changed, reloading...") default: - log.Println("config dir changed, reloading...") + log.Println("config file changed, reloading...") } *p = *New() err := p.LoadFromPath(filePath) @@ -51,18 +51,18 @@ func (p *Conf) Watch(filePath, xDnsPath string, sDnsPath string, reload func()) } } }() - err = watcher.Add(path.Dir(filePath)) + err = watcher.Add(filePath) if err != nil { return fmt.Errorf("watch file error: %s", err) } if xDnsPath != "" { - err = watcher.Add(path.Dir(xDnsPath)) + err = watcher.Add(xDnsPath) if err != nil { return fmt.Errorf("watch dns file error: %s", err) } } if sDnsPath != "" { - err = watcher.Add(path.Dir(sDnsPath)) + err = watcher.Add(sDnsPath) if err != nil { return fmt.Errorf("watch dns file error: %s", err) } diff --git a/core/xray/xray.go b/core/xray/xray.go index c9b3a5c8..306c0c58 100644 --- a/core/xray/xray.go +++ b/core/xray/xray.go @@ -58,22 +58,24 @@ func parseConnectionConfig(c *conf.XrayConnectionConfig) (policy *coreConf.Polic func getCore(c *conf.XrayConfig) *core.Instance { os.Setenv("XRAY_LOCATION_ASSET", c.AssetPath) // Log Config - coreLogConfig := &coreConf.LogConfig{} - coreLogConfig.LogLevel = c.LogConfig.Level - coreLogConfig.AccessLog = c.LogConfig.AccessPath - coreLogConfig.ErrorLog = c.LogConfig.ErrorPath + coreLogConfig := &coreConf.LogConfig{ + LogLevel: c.LogConfig.Level, + AccessLog: c.LogConfig.AccessPath, + ErrorLog: c.LogConfig.ErrorPath, + } // DNS config coreDnsConfig := &coreConf.DNSConfig{} os.Setenv("XRAY_DNS_PATH", "") if c.DnsConfigPath != "" { - f, err := os.OpenFile(c.DnsConfigPath, os.O_RDWR|os.O_CREATE, 0755) + data, err := os.ReadFile(c.DnsConfigPath) if err != nil { - log.Error("Failed to open or create xray dns config file: %v", err) - } - defer f.Close() - if err := json.NewDecoder(f).Decode(coreDnsConfig); err != nil { - log.Error(fmt.Sprintf("Failed to unmarshal xray dns config from file '%v': %v. Using default DNS options.", f.Name(), err)) + log.Error(fmt.Sprintf("Failed to read xray dns config file: %v", err)) coreDnsConfig = &coreConf.DNSConfig{} + } else { + if err := json.Unmarshal(data, coreDnsConfig); err != nil { + log.Error(fmt.Sprintf("Failed to unmarshal xray dns config: %v. Using default DNS options.", err)) + coreDnsConfig = &coreConf.DNSConfig{} + } } os.Setenv("XRAY_DNS_PATH", c.DnsConfigPath) } @@ -84,25 +86,27 @@ func getCore(c *conf.XrayConfig) *core.Instance { // Routing config coreRouterConfig := &coreConf.RouterConfig{} if c.RouteConfigPath != "" { - if f, err := os.Open(c.RouteConfigPath); err != nil { + data, err := os.ReadFile(c.RouteConfigPath) + if err != nil { log.WithField("err", err).Panic("Failed to read Routing config file") } else { - if err = json.NewDecoder(f).Decode(coreRouterConfig); err != nil { + if err = json.Unmarshal(data, coreRouterConfig); err != nil { log.WithField("err", err).Panic("Failed to unmarshal Routing config") } } } routeConfig, err := coreRouterConfig.Build() if err != nil { - log.WithField("err", err).Panic("Failed to understand Routing config Please check: https://xtls.github.io/config/routing.html") + log.WithField("err", err).Panic("Failed to understand Routing config. Please check: https://xtls.github.io/config/routing.html for help") } // Custom Inbound config var coreCustomInboundConfig []coreConf.InboundDetourConfig if c.InboundConfigPath != "" { - if f, err := os.Open(c.InboundConfigPath); err != nil { + data, err := os.ReadFile(c.InboundConfigPath) + if err != nil { log.WithField("err", err).Panic("Failed to read Custom Inbound config file") } else { - if err = json.NewDecoder(f).Decode(&coreCustomInboundConfig); err != nil { + if err = json.Unmarshal(data, &coreCustomInboundConfig); err != nil { log.WithField("err", err).Panic("Failed to unmarshal Custom Inbound config") } } @@ -111,17 +115,18 @@ func getCore(c *conf.XrayConfig) *core.Instance { for _, config := range coreCustomInboundConfig { oc, err := config.Build() if err != nil { - log.WithField("err", err).Panic("Failed to understand Inbound config, Please check: https://xtls.github.io/config/inbound.html for help") + log.WithField("err", err).Panic("Failed to understand Inbound config. Please check: https://xtls.github.io/config/inbound.html for help") } inBoundConfig = append(inBoundConfig, oc) } // Custom Outbound config var coreCustomOutboundConfig []coreConf.OutboundDetourConfig if c.OutboundConfigPath != "" { - if f, err := os.Open(c.OutboundConfigPath); err != nil { + data, err := os.ReadFile(c.OutboundConfigPath) + if err != nil { log.WithField("err", err).Panic("Failed to read Custom Outbound config file") } else { - if err = json.NewDecoder(f).Decode(&coreCustomOutboundConfig); err != nil { + if err = json.Unmarshal(data, &coreCustomOutboundConfig); err != nil { log.WithField("err", err).Panic("Failed to unmarshal Custom Outbound config") } } diff --git a/main.go b/main.go index d8a280cf..4f20c97a 100644 --- a/main.go +++ b/main.go @@ -1,15 +1,9 @@ package main import ( - _ "net/http/pprof" - "github.com/InazumaV/V2bX/cmd" ) func main() { - //内存泄漏排查 - // go func() { - // http.ListenAndServe("127.0.0.1:6060", nil) - // }() cmd.Run() } diff --git a/node/user.go b/node/user.go index f76a9d6b..95c80d4b 100644 --- a/node/user.go +++ b/node/user.go @@ -82,29 +82,24 @@ func (c *Controller) reportUserTrafficTask() (err error) { } func compareUserList(old, new []panel.UserInfo) (deleted, added []panel.UserInfo) { - tmp := map[string]struct{}{} - tmp2 := map[string]struct{}{} - for i := range old { - tmp[old[i].Uuid+strconv.Itoa(old[i].SpeedLimit)] = struct{}{} + oldMap := make(map[string]int) + for i, user := range old { + key := user.Uuid + strconv.Itoa(user.SpeedLimit) + oldMap[key] = i } - l := len(tmp) - for i := range new { - e := new[i].Uuid + strconv.Itoa(new[i].SpeedLimit) - tmp[e] = struct{}{} - tmp2[e] = struct{}{} - if l != len(tmp) { - added = append(added, new[i]) - l++ + + for _, user := range new { + key := user.Uuid + strconv.Itoa(user.SpeedLimit) + if _, exists := oldMap[key]; !exists { + added = append(added, user) + } else { + delete(oldMap, key) } } - tmp = nil - l = len(tmp2) - for i := range old { - tmp2[old[i].Uuid+strconv.Itoa(old[i].SpeedLimit)] = struct{}{} - if l != len(tmp2) { - deleted = append(deleted, old[i]) - l++ - } + + for _, index := range oldMap { + deleted = append(deleted, old[index]) } + return deleted, added }