Changeset 741 in code
Legend:
- Unmodified
- Added
- Removed
-
trunk/conn.go
r703 r741 11 11 "unicode" 12 12 13 "golang.org/x/time/rate" 13 14 "gopkg.in/irc.v3" 14 15 "nhooyr.io/websocket" … … 119 120 } 120 121 121 type rateLimiter struct {122 C <-chan struct{}123 ticker *time.Ticker124 stopped chan struct{}125 }126 127 func newRateLimiter(delay time.Duration, burst int) *rateLimiter {128 ch := make(chan struct{}, burst)129 for i := 0; i < burst; i++ {130 ch <- struct{}{}131 }132 ticker := time.NewTicker(delay)133 stopped := make(chan struct{})134 go func() {135 for {136 select {137 case <-ticker.C:138 select {139 case ch <- struct{}{}:140 // This space is intentionally left blank141 case <-stopped:142 return143 }144 case <-stopped:145 return146 }147 }148 }()149 return &rateLimiter{150 C: ch,151 ticker: ticker,152 stopped: stopped,153 }154 }155 156 func (rl *rateLimiter) Stop() {157 rl.ticker.Stop()158 close(rl.stopped)159 }160 161 122 type connOptions struct { 162 123 Logger Logger … … 187 148 188 149 go func() { 189 var rl *rateLimiter 190 if options.RateLimitDelay > 0 && options.RateLimitBurst > 0 { 191 rl = newRateLimiter(options.RateLimitDelay, options.RateLimitBurst) 192 defer rl.Stop() 193 } 194 150 ctx, cancel := c.NewContext(context.Background()) 151 defer cancel() 152 153 rl := rate.NewLimiter(rate.Every(options.RateLimitDelay), options.RateLimitBurst) 195 154 for msg := range outgoing { 196 if rl!= nil {197 <-rl.C155 if err := rl.Wait(ctx); err != nil { 156 break 198 157 } 199 158 -
trunk/go.mod
r714 r741 19 19 golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c // indirect 20 20 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect 21 golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 21 22 google.golang.org/protobuf v1.27.1 // indirect 22 23 gopkg.in/irc.v3 v3.1.4 -
trunk/go.sum
r714 r741 380 380 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 381 381 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 382 golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M= 383 golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 382 384 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 383 385 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
Note:
See TracChangeset
for help on using the changeset viewer.