@@ -14,12 +14,12 @@ type Client struct {
14
14
flush http.Flusher
15
15
write io.Writer
16
16
ctx context.Context
17
- events chan * Event
17
+ events chan Event
18
18
closed bool
19
19
waiter sync.WaitGroup
20
20
lock sync.Mutex
21
- lastFlush time. Time
22
- lastWrite time. Time
21
+ lastFlush uint64
22
+ lastWrite uint64
23
23
}
24
24
25
25
// NewClient creates a client wrapping a response writer.
@@ -30,7 +30,7 @@ type Client struct {
30
30
// Returns nil on error.
31
31
func NewClient (w http.ResponseWriter , req * http.Request ) * Client {
32
32
c := & Client {
33
- events : make (chan * Event , 100 ),
33
+ events : make (chan Event , 100 ),
34
34
write : w ,
35
35
}
36
36
@@ -62,24 +62,24 @@ func NewClient(w http.ResponseWriter, req *http.Request) *Client {
62
62
// This does not block until the event has been sent,
63
63
// however it could block if the event queue is full.
64
64
// Returns an error if the Client has disconnected
65
- func (c * Client ) Send (ev * Event ) error {
65
+ func (c * Client ) Send (ev Event ) error {
66
66
if c .closed {
67
67
return io .ErrClosedPipe
68
68
}
69
- c .events <- ev . Clone ()
69
+ c .events <- ev
70
70
return nil
71
71
}
72
72
73
73
// Send queues an event to be sent to the client.
74
74
// This guarantees not block until the event has been sent.
75
75
// Returns true if blocked
76
76
// Returns an error if the Client has disconnected
77
- func (c * Client ) SendNonBlocking (ev * Event ) (bool , error ) {
77
+ func (c * Client ) SendNonBlocking (ev Event ) (bool , error ) {
78
78
if c .closed {
79
79
return false , io .ErrClosedPipe
80
80
}
81
81
select {
82
- case c .events <- ev . Clone () :
82
+ case c .events <- ev :
83
83
default :
84
84
return true , nil
85
85
}
@@ -114,8 +114,8 @@ func (c *Client) run() {
114
114
115
115
// send the event
116
116
c .lock .Lock ()
117
- io .Copy (c .write , ev )
118
- c .lastWrite = time . Now ()
117
+ io .Copy (c .write , & ev )
118
+ c .lastWrite += 1
119
119
c .lock .Unlock ()
120
120
121
121
case <- done :
@@ -137,7 +137,7 @@ func (c *Client) flusher() {
137
137
if c .closed {
138
138
break
139
139
}
140
- if c .lastFlush . Before ( c .lastWrite ) {
140
+ if c .lastFlush < c .lastWrite {
141
141
c .lastFlush = c .lastWrite
142
142
c .flush .Flush ()
143
143
}
0 commit comments