FILE / ScuroNeko/mtg

mtglib/internal/relay/pools.go

Исходный файл и его история в репозитории.
FILE 339840c14ad3660ab9cc1ea6a9101d0aa6c9ee42
Files
mtg/mtglib/internal/relay/pools.go
T
2021-03-29 14:36:02 +03:00

42 lines
716 B
Go

package relay
import (
"context"
"sync"
"time"
)
var relayPool = sync.Pool{
New: func() interface{} {
return &Relay{
tickChannel: make(chan struct{}),
errorChannel: make(chan error, 1),
}
},
}
func AcquireRelay(ctx context.Context, logger Logger, bufferSize int, idleTimeout time.Duration) *Relay {
ctx, cancel := context.WithCancel(ctx)
r := relayPool.Get().(*Relay)
r.ctx = ctx
r.ctxCancel = cancel
r.logger = logger
r.tickTimeout = idleTimeout
if len(r.eastBuffer) != bufferSize {
r.eastBuffer = make([]byte, bufferSize)
}
if len(r.westBuffer) != bufferSize {
r.westBuffer = make([]byte, bufferSize)
}
return r
}
func ReleaseRelay(r *Relay) {
r.Reset()
relayPool.Put(r)
}