31 lines
802 B
Go
31 lines
802 B
Go
|
package distribute
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/go-flucky/flucky/pkg/types"
|
||
|
)
|
||
|
|
||
|
func MeasuredValues(ctx context.Context, channels int, inputChannel <-chan *types.MeasuredValue) []chan *types.MeasuredValue {
|
||
|
outputChannels := make([]chan *types.MeasuredValue, channels)
|
||
|
|
||
|
for i := 0; i <= channels; i++ {
|
||
|
outputChannel := make(chan *types.MeasuredValue)
|
||
|
outputChannels = append(outputChannels, outputChannel)
|
||
|
}
|
||
|
|
||
|
go func(ctx context.Context, inputChannel <-chan *types.MeasuredValue, outputChannels []chan *types.MeasuredValue) {
|
||
|
for {
|
||
|
select {
|
||
|
case <-ctx.Done():
|
||
|
return
|
||
|
case measuredValue, _ := <-inputChannel:
|
||
|
for _, outputChannel := range outputChannels {
|
||
|
outputChannel <- measuredValue
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}(ctx, inputChannel, outputChannels)
|
||
|
|
||
|
return outputChannels
|
||
|
}
|