mirror of
				https://github.com/onyx-and-iris/q3rcon-proxy.git
				synced 2025-11-04 06:41:48 +00:00 
			
		
		
		
	add WithStaleTimeout Option function.
add a trace level log when a session gets deleted.
This commit is contained in:
		
							parent
							
								
									51f22f480b
								
							
						
					
					
						commit
						64c1df645d
					
				@ -8,6 +8,21 @@ import (
 | 
				
			|||||||
	log "github.com/sirupsen/logrus"
 | 
						log "github.com/sirupsen/logrus"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Option is a functional option type that allows us to configure the Client.
 | 
				
			||||||
 | 
					type Option func(*Client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// WithStaleTimeout is a functional option to set the stale session timeout
 | 
				
			||||||
 | 
					func WithStaleTimeout(timeout time.Duration) Option {
 | 
				
			||||||
 | 
						return func(c *Client) {
 | 
				
			||||||
 | 
							if timeout < time.Minute {
 | 
				
			||||||
 | 
								log.Warnf("cannot set stale session timeout to less than 1 minute.. defaulting to 5 minutes")
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							c.timeout = timeout
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Client struct {
 | 
					type Client struct {
 | 
				
			||||||
	laddr *net.UDPAddr
 | 
						laddr *net.UDPAddr
 | 
				
			||||||
	raddr *net.UDPAddr
 | 
						raddr *net.UDPAddr
 | 
				
			||||||
@ -16,9 +31,11 @@ type Client struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	mutex    sync.RWMutex
 | 
						mutex    sync.RWMutex
 | 
				
			||||||
	sessions map[string]*session
 | 
						sessions map[string]*session
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						timeout time.Duration
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func New(port, target string) (*Client, error) {
 | 
					func New(port, target string, options ...Option) (*Client, error) {
 | 
				
			||||||
	laddr, err := net.ResolveUDPAddr("udp", port)
 | 
						laddr, err := net.ResolveUDPAddr("udp", port)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
@ -29,12 +46,19 @@ func New(port, target string) (*Client, error) {
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &Client{
 | 
						c := &Client{
 | 
				
			||||||
		laddr:    laddr,
 | 
							laddr:    laddr,
 | 
				
			||||||
		raddr:    raddr,
 | 
							raddr:    raddr,
 | 
				
			||||||
		mutex:    sync.RWMutex{},
 | 
							mutex:    sync.RWMutex{},
 | 
				
			||||||
		sessions: map[string]*session{},
 | 
							sessions: map[string]*session{},
 | 
				
			||||||
	}, nil
 | 
							timeout:  5 * time.Minute,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, o := range options {
 | 
				
			||||||
 | 
							o(c)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return c, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Client) ListenAndServe() error {
 | 
					func (c *Client) ListenAndServe() error {
 | 
				
			||||||
@ -76,8 +100,9 @@ func (c *Client) pruneSessions() {
 | 
				
			|||||||
	for range ticker.C {
 | 
						for range ticker.C {
 | 
				
			||||||
		for _, session := range c.sessions {
 | 
							for _, session := range c.sessions {
 | 
				
			||||||
			c.mutex.RLock()
 | 
								c.mutex.RLock()
 | 
				
			||||||
			if time.Since(session.updateTime) > time.Minute*5 {
 | 
								if time.Since(session.updateTime) > c.timeout {
 | 
				
			||||||
				delete(c.sessions, session.caddr.String())
 | 
									delete(c.sessions, session.caddr.String())
 | 
				
			||||||
 | 
									log.Tracef("session for %s deleted", session.caddr)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			c.mutex.RUnlock()
 | 
								c.mutex.RUnlock()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user