mirror of
https://github.com/onyx-and-iris/q3rcon.git
synced 2024-11-21 16:10:48 +00:00
add functional option WithLoginTimeout
use it to set the login timeout
This commit is contained in:
parent
08af9d3388
commit
a7702c8050
10
README.md
10
README.md
@ -52,6 +52,16 @@ func main() {
|
||||
}
|
||||
```
|
||||
|
||||
#### `WithLoginTimeout(timeout time.Duration)`
|
||||
|
||||
If the server was just started or is currently performing a long operation like map rotating then it's possible to receive empty rcon responses. In which case you'll want to retry login. Use this functional option to set the max timeout for logins, it defaults to 5 seconds. For example:
|
||||
|
||||
```go
|
||||
rcon, err := q3rcon.New(
|
||||
host, port, password,
|
||||
q3rcon.WithLoginTimeout(2*time.Second))
|
||||
```
|
||||
|
||||
#### `WithDefaultTimeout(timeout time.Duration)`
|
||||
|
||||
You may want to change the default timeout if some of your responses are getting mixed together (stability can depend on connection to the server). For example, on LAN I can leave the default at 20ms, when connecting remotely I normally increase this to 50ms.
|
||||
|
17
q3rcon.go
17
q3rcon.go
@ -12,13 +12,21 @@ import (
|
||||
// Option is a functional option type that allows us to configure the VbanTxt.
|
||||
type Option func(*Rcon)
|
||||
|
||||
// WithLoginTimeout is a functional option to set the login timeout
|
||||
func WithLoginTimeout(timeout time.Duration) Option {
|
||||
return func(rcon *Rcon) {
|
||||
rcon.loginTimeout = timeout
|
||||
}
|
||||
}
|
||||
|
||||
// WithDefaultTimeout is a functional option to set the default response timeout
|
||||
func WithDefaultTimeout(timeout time.Duration) Option {
|
||||
return func(rcon *Rcon) {
|
||||
rcon.defaultTimeout = timeout
|
||||
}
|
||||
}
|
||||
|
||||
// WithTimeouts is a functional option to set the timeouts for responses
|
||||
// WithTimeouts is a functional option to set the timeouts for responses per command
|
||||
func WithTimeouts(timeouts map[string]time.Duration) Option {
|
||||
return func(rcon *Rcon) {
|
||||
rcon.timeouts = timeouts
|
||||
@ -30,6 +38,7 @@ type Rcon struct {
|
||||
request packet.Request
|
||||
response packet.Response
|
||||
|
||||
loginTimeout time.Duration
|
||||
defaultTimeout time.Duration
|
||||
timeouts map[string]time.Duration
|
||||
|
||||
@ -50,6 +59,7 @@ func New(host string, port int, password string, options ...Option) (*Rcon, erro
|
||||
conn: conn,
|
||||
request: packet.NewRequest(password),
|
||||
resp: make(chan string),
|
||||
loginTimeout: 5 * time.Second,
|
||||
defaultTimeout: 20 * time.Millisecond,
|
||||
timeouts: make(map[string]time.Duration),
|
||||
}
|
||||
@ -58,8 +68,7 @@ func New(host string, port int, password string, options ...Option) (*Rcon, erro
|
||||
o(r)
|
||||
}
|
||||
|
||||
err = r.Login()
|
||||
if err != nil {
|
||||
if err = r.Login(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@ -67,7 +76,7 @@ func New(host string, port int, password string, options ...Option) (*Rcon, erro
|
||||
}
|
||||
|
||||
func (r Rcon) Login() error {
|
||||
timeout := time.After(2 * time.Second)
|
||||
timeout := time.After(r.loginTimeout)
|
||||
for {
|
||||
select {
|
||||
case <-timeout:
|
||||
|
Loading…
Reference in New Issue
Block a user