From 7ae3f01467458fe47597882811b740d69a1688fc Mon Sep 17 00:00:00 2001 From: cialloo Date: Sun, 5 Oct 2025 09:30:37 +0800 Subject: [PATCH] udpate --- src/internal/logic/a2squerylogic.go | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/internal/logic/a2squerylogic.go b/src/internal/logic/a2squerylogic.go index 4a555cc..5064ab6 100644 --- a/src/internal/logic/a2squerylogic.go +++ b/src/internal/logic/a2squerylogic.go @@ -33,19 +33,23 @@ func (l *A2sQueryLogic) A2sQuery(req *types.A2SQueryReq) (resp *types.A2SQueryRe return &types.A2SQueryResp{Results: []types.A2SQueryRespServer{}}, nil } - // Channel to collect results - results := make(chan types.A2SQueryRespServer, len(req.Servers)) + // Channel to collect results with their indices + type indexedResult struct { + index int + result types.A2SQueryRespServer + } + results := make(chan indexedResult, len(req.Servers)) var wg sync.WaitGroup // Query each server concurrently - for _, server := range req.Servers { + for i, server := range req.Servers { wg.Add(1) - go func(srv types.A2SQueryReqServer) { + go func(index int, srv types.A2SQueryReqServer) { defer wg.Done() result := l.querySingleServer(srv) - results <- result - }(server) + results <- indexedResult{index: index, result: result} + }(i, server) } // Close channel when all goroutines are done @@ -54,13 +58,13 @@ func (l *A2sQueryLogic) A2sQuery(req *types.A2SQueryReq) (resp *types.A2SQueryRe close(results) }() - // Collect all results + // Collect all results and sort by index to maintain order resp = &types.A2SQueryResp{ - Results: make([]types.A2SQueryRespServer, 0, len(req.Servers)), + Results: make([]types.A2SQueryRespServer, len(req.Servers)), } - for result := range results { - resp.Results = append(resp.Results, result) + for indexed := range results { + resp.Results[indexed.index] = indexed.result } return resp, nil