From f1741b0718b2e12b2b363cb8acf24b546389ef5b Mon Sep 17 00:00:00 2001 From: Palapeli <26661008+mkwcat@users.noreply.github.com> Date: Wed, 5 Mar 2025 11:24:27 -0500 Subject: [PATCH] ServerBrowser/Filter: Return result of group node --- serverbrowser/filter/eval.go | 7 +++---- serverbrowser/filter_test.go | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/serverbrowser/filter/eval.go b/serverbrowser/filter/eval.go index bb516a5..11e9e8e 100644 --- a/serverbrowser/filter/eval.go +++ b/serverbrowser/filter/eval.go @@ -37,18 +37,17 @@ func (this *expression) eval(basenode *TreeNode) int64 { return this.getNumber(node) case CatOther: - this.switchOther(node) + return this.switchOther(node) } } panic("eval failed") } -func (this *expression) switchOther(node *TreeNode) { +func (this *expression) switchOther(node *TreeNode) int64 { switch v1 := node.Value.(type) { case *GroupToken: if v1.GroupType == "()" { - this.eval(node) - return + return this.eval(node) } } panic("invalid node " + node.String()) diff --git a/serverbrowser/filter_test.go b/serverbrowser/filter_test.go index 6931814..90cc921 100644 --- a/serverbrowser/filter_test.go +++ b/serverbrowser/filter_test.go @@ -1,6 +1,7 @@ package serverbrowser import ( + "fmt" "testing" "wwfc/serverbrowser/filter" ) @@ -26,15 +27,27 @@ func evalFilter(t *testing.T, expression string, queryGame string, context map[s return 0, err } + fmt.Printf("ret: %d\n", ret) + return ret, err } func TestParseFilter(t *testing.T) { parseFilter(t, `dwc_mver = 3 and dwc_pid != 1000004498 and maxplayers = 3 and numplayers < 3 and dwc_mtype = 0 and dwc_mresv != dwc_pid and (((20=auth)AND((1&mskdif)=mskdif)AND((14&mskstg)=mskstg)))`) - evalFilter(t, `dwc_mver = 3 and dwc_pid != 1000004498 and maxplayers = 3 and numplayers < 3 and dwc_mtype = 0 and dwc_mresv != dwc_pid and (((20=auth)AND((1&mskdif)=mskdif)AND((14&mskstg)=mskstg)))`, "fstarzerods", map[string]string{}) + evalFilter(t, `dwc_mver = 3 and dwc_pid != 1000004499 and maxplayers = 3 and numplayers < 3 and dwc_mtype = 0 and dwc_mresv != dwc_pid and (((20=auth)AND((1&mskdif)=mskdif)AND((14&mskstg)=mskstg)))`, "fstarzerods", map[string]string{ + "dwc_mver": "3", + "dwc_pid": "1", + "maxplayers": "3", + "numplayers": "2", + "dwc_mtype": "0", + "dwc_mresv": "0", + "auth": "20", + "mskdif": "0", + "mskstg": "0", + }) - evalFilter(t, `1&mskdif`, "fstarzerods", map[string]string{ + evalFilter(t, `(1&mskdif)`, "fstarzerods", map[string]string{ "mskdif": "1", }) }