udpate
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user