src: Add DMA localagent
[barometer.git] / src / dma / vendor / github.com / go-redis / redis / internal / pool / conn.go
1 package pool
2
3 import (
4         "net"
5         "sync/atomic"
6         "time"
7
8         "github.com/go-redis/redis/internal/proto"
9 )
10
11 var noDeadline = time.Time{}
12
13 type Conn struct {
14         netConn net.Conn
15
16         Rd *proto.Reader
17         Wb *proto.WriteBuffer
18
19         Inited bool
20         usedAt atomic.Value
21 }
22
23 func NewConn(netConn net.Conn) *Conn {
24         cn := &Conn{
25                 netConn: netConn,
26                 Wb:      proto.NewWriteBuffer(),
27         }
28         cn.Rd = proto.NewReader(cn.netConn)
29         cn.SetUsedAt(time.Now())
30         return cn
31 }
32
33 func (cn *Conn) UsedAt() time.Time {
34         return cn.usedAt.Load().(time.Time)
35 }
36
37 func (cn *Conn) SetUsedAt(tm time.Time) {
38         cn.usedAt.Store(tm)
39 }
40
41 func (cn *Conn) SetNetConn(netConn net.Conn) {
42         cn.netConn = netConn
43         cn.Rd.Reset(netConn)
44 }
45
46 func (cn *Conn) IsStale(timeout time.Duration) bool {
47         return timeout > 0 && time.Since(cn.UsedAt()) > timeout
48 }
49
50 func (cn *Conn) SetReadTimeout(timeout time.Duration) {
51         now := time.Now()
52         cn.SetUsedAt(now)
53         if timeout > 0 {
54                 cn.netConn.SetReadDeadline(now.Add(timeout))
55         } else {
56                 cn.netConn.SetReadDeadline(noDeadline)
57         }
58 }
59
60 func (cn *Conn) SetWriteTimeout(timeout time.Duration) {
61         now := time.Now()
62         cn.SetUsedAt(now)
63         if timeout > 0 {
64                 cn.netConn.SetWriteDeadline(now.Add(timeout))
65         } else {
66                 cn.netConn.SetWriteDeadline(noDeadline)
67         }
68 }
69
70 func (cn *Conn) Write(b []byte) (int, error) {
71         return cn.netConn.Write(b)
72 }
73
74 func (cn *Conn) RemoteAddr() net.Addr {
75         return cn.netConn.RemoteAddr()
76 }
77
78 func (cn *Conn) Close() error {
79         return cn.netConn.Close()
80 }