|
@@ -30,6 +30,18 @@ func StrChannelFilter(channel string) FilterFunc {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 字符串包含支名称的频道过滤器
|
|
|
|
|
+// 为了避免重复匹配,将频道值截断再匹配支名称
|
|
|
|
|
+func StrChannelSubFilter(channel string, substr string) FilterFunc {
|
|
|
|
|
+ return func(conn *Line) (ok bool) {
|
|
|
|
|
+ index := strings.Index(conn.channel, channel)
|
|
|
|
|
+ if index < 0 {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ return strings.Contains(conn.channel[index+len(channel):], substr)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// 开始字符串频道过滤器
|
|
// 开始字符串频道过滤器
|
|
|
func StrPrefixFilter(channel string) FilterFunc {
|
|
func StrPrefixFilter(channel string) FilterFunc {
|
|
|
return func(conn *Line) (ok bool) {
|
|
return func(conn *Line) (ok bool) {
|
|
@@ -37,18 +49,19 @@ func StrPrefixFilter(channel string) FilterFunc {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 包括名称的频道过滤器
|
|
|
|
|
-func NamePrefixFilter(name string, channel string) FilterFunc {
|
|
|
|
|
- c := name + "@" + channel
|
|
|
|
|
|
|
+// 开始字符串包含支名称的频道过滤器
|
|
|
|
|
+// 为了避免重复匹配,将频道值截断再匹配支名称
|
|
|
|
|
+func StrPrefixSubFilter(channel string, substr string) FilterFunc {
|
|
|
return func(conn *Line) (ok bool) {
|
|
return func(conn *Line) (ok bool) {
|
|
|
- return strings.HasPrefix(conn.channel, c)
|
|
|
|
|
|
|
+ return strings.HasPrefix(conn.channel, channel) && strings.Contains(conn.channel[len(channel):], substr)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 包含支名称的频道过滤器
|
|
|
|
|
-func StrPrefixSubFilter(channel string, substr string) FilterFunc {
|
|
|
|
|
|
|
+// 包括名称的频道过滤器
|
|
|
|
|
+func NamePrefixFilter(name string, channel string) FilterFunc {
|
|
|
|
|
+ c := name + "@" + channel
|
|
|
return func(conn *Line) (ok bool) {
|
|
return func(conn *Line) (ok bool) {
|
|
|
- return strings.HasPrefix(conn.channel, channel) && strings.Contains(conn.channel, substr)
|
|
|
|
|
|
|
+ return strings.HasPrefix(conn.channel, c)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|