This commit is contained in:
2025-10-05 09:30:37 +08:00
parent 4abc52dd08
commit 7ae3f01467

View File

@@ -33,19 +33,23 @@ func (l *A2sQueryLogic) A2sQuery(req *types.A2SQueryReq) (resp *types.A2SQueryRe
return &types.A2SQueryResp{Results: []types.A2SQueryRespServer{}}, nil return &types.A2SQueryResp{Results: []types.A2SQueryRespServer{}}, nil
} }
// Channel to collect results // Channel to collect results with their indices
results := make(chan types.A2SQueryRespServer, len(req.Servers)) type indexedResult struct {
index int
result types.A2SQueryRespServer
}
results := make(chan indexedResult, len(req.Servers))
var wg sync.WaitGroup var wg sync.WaitGroup
// Query each server concurrently // Query each server concurrently
for _, server := range req.Servers { for i, server := range req.Servers {
wg.Add(1) wg.Add(1)
go func(srv types.A2SQueryReqServer) { go func(index int, srv types.A2SQueryReqServer) {
defer wg.Done() defer wg.Done()
result := l.querySingleServer(srv) result := l.querySingleServer(srv)
results <- result results <- indexedResult{index: index, result: result}
}(server) }(i, server)
} }
// Close channel when all goroutines are done // Close channel when all goroutines are done
@@ -54,13 +58,13 @@ func (l *A2sQueryLogic) A2sQuery(req *types.A2SQueryReq) (resp *types.A2SQueryRe
close(results) close(results)
}() }()
// Collect all results // Collect all results and sort by index to maintain order
resp = &types.A2SQueryResp{ resp = &types.A2SQueryResp{
Results: make([]types.A2SQueryRespServer, 0, len(req.Servers)), Results: make([]types.A2SQueryRespServer, len(req.Servers)),
} }
for result := range results { for indexed := range results {
resp.Results = append(resp.Results, result) resp.Results[indexed.index] = indexed.result
} }
return resp, nil return resp, nil