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
}
// 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