mirror of
https://github.com/kemko/reproxy.git
synced 2026-01-01 15:55:49 +03:00
* wip * resolve merge artifacts * full coverage for conductor * wire plugin conductor to main and proxy * wip, with separate match handler * split matching logic with another handler, add initial docs * move parts of proxy to handlers, add tests * add headers in to be sent to proxied url * merged from master * add example with docker compose * supress excesive debug reporting 0-9 disabled in docker * add plugin tests * randomize test port * lint: minor warns * lint: err shadow
36 lines
774 B
Go
36 lines
774 B
Go
// Package strategy defines repeater's strategy and implements some.
|
|
// Strategy result is a channel acting like time.Timer ot time.Tick
|
|
package strategy
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// Interface for repeater strategy. Returns channel with ticks
|
|
type Interface interface {
|
|
Start(ctx context.Context) <-chan struct{}
|
|
}
|
|
|
|
// Once strategy eliminate repeats and makes a single try only
|
|
type Once struct{}
|
|
|
|
// Start returns closed channel with a single element to prevent any repeats
|
|
func (s *Once) Start(ctx context.Context) <-chan struct{} {
|
|
ch := make(chan struct{})
|
|
go func() {
|
|
ch <- struct{}{}
|
|
close(ch)
|
|
}()
|
|
return ch
|
|
}
|
|
|
|
func sleep(ctx context.Context, duration time.Duration) {
|
|
select {
|
|
case <-time.After(duration):
|
|
return
|
|
case <-ctx.Done():
|
|
return
|
|
}
|
|
}
|