]> 127.0.0.1 Git - front/.git/commitdiff
1 v0.1.20250319024256
authorqydysky <qydysky@foxmail.com>
Wed, 19 Mar 2025 02:41:13 +0000 (02:41 +0000)
committerGitHub <noreply@github.com>
Wed, 19 Mar 2025 02:41:13 +0000 (02:41 +0000)
config.go

index 6f0e80b85e975cd15969293adee68663381812ce..5a0ab432c2737c776c442aa2d861114ab486d932 100755 (executable)
--- a/config.go
+++ b/config.go
@@ -193,7 +193,12 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) {
                                        return
                                }
 
-                               var backIs []*Back
+                               var (
+                                       backIs    []*Back
+                                       backEqual = func(a, b *Back) bool {
+                                               return a == b
+                                       }
+                               )
 
                                {
                                        if t, e := r.Cookie("_psign_" + cookie); e == nil {
@@ -213,7 +218,7 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) {
                                                                logger.Warn(`W:`, fmt.Sprintf(logFormat, reqId, r.RemoteAddr, route.config.Addr, routePath, "Err", e))
                                                        } else if ok {
                                                                for i := uint(0); i < backP.(*Back).Weight; i++ {
-                                                                       backIs = append(backIs, backP.(*Back))
+                                                                       backIs = addIfNotExsit(backIs, backEqual, backP.(*Back))
                                                                }
                                                        }
                                                }
@@ -221,7 +226,7 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) {
 
                                        var splicingC = len(backIs)
 
-                                       backIs = append(backIs, route.FiliterBackByRequest(r)...)
+                                       backIs = addIfNotExsit(backIs, backEqual, route.FiliterBackByRequest(r)...)
 
                                        if f, ok := rollRuleMap[route.RollRule]; ok {
                                                f(backIs[splicingC:])
@@ -604,3 +609,15 @@ func LoadX509PubKey(certPEMBlock []byte) tls.Certificate {
        }
        return cert
 }
+
+func addIfNotExsit[T []E, E any](s T, equal func(a, b E) bool, e ...E) T {
+       for j := 0; j < len(e); j++ {
+               for i := 0; i < len(s); i++ {
+                       if !equal(s[i], e[j]) {
+                               s = append(s, e[j])
+                               break
+                       }
+               }
+       }
+       return s
+}