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
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user