File tree 1 file changed +10
-10
lines changed
1 file changed +10
-10
lines changed Original file line number Diff line number Diff line change 1
1
package cnet
2
2
3
3
import (
4
+ "bytes"
4
5
"net"
5
6
"time"
6
7
@@ -9,26 +10,27 @@ import (
9
10
10
11
type wsConn struct {
11
12
* websocket.Conn
12
- buff [] byte
13
+ buff * bytes. Buffer
13
14
}
14
15
15
- //NewWebSocketConn converts a websocket.Conn into a net.Conn
16
+ // NewWebSocketConn converts a websocket.Conn into a net.Conn
16
17
func NewWebSocketConn (websocketConn * websocket.Conn ) net.Conn {
17
18
c := wsConn {
18
19
Conn : websocketConn ,
20
+ buff : & bytes.Buffer {},
19
21
}
20
22
return & c
21
23
}
22
24
23
- //Read is not threadsafe though thats okay since there
24
- //should never be more than one reader
25
+ // Read is not threadsafe though thats okay since there
26
+ // should never be more than one reader
25
27
func (c * wsConn ) Read (dst []byte ) (int , error ) {
26
28
ldst := len (dst )
27
29
//use buffer or read new message
28
30
var src []byte
29
- if len ( c .buff ) > 0 {
30
- src = c .buff
31
- c .buff = nil
31
+ if c .buff . Len ( ) > 0 {
32
+ src = c .buff . Bytes ()
33
+ c .buff . Reset ()
32
34
} else if _ , msg , err := c .Conn .ReadMessage (); err == nil {
33
35
src = msg
34
36
} else {
@@ -41,9 +43,7 @@ func (c *wsConn) Read(dst []byte) (int, error) {
41
43
n = copy (dst , src [:ldst ])
42
44
//copy remainder into buffer
43
45
r := src [ldst :]
44
- lr := len (r )
45
- c .buff = make ([]byte , lr )
46
- copy (c .buff , r )
46
+ c .buff .Write (r )
47
47
} else {
48
48
//copy all of src into dst
49
49
n = copy (dst , src )
You can’t perform that action at this time.
0 commit comments