package gorillaws2netconn import ( "github.com/gorilla/websocket" "io" "net" "time" ) type NetConn4Gorilla struct { WS *websocket.Conn r io.Reader WriteMessageType int } func (c *NetConn4Gorilla) Read(b []byte) (int, error) { var opCode int var err error if c.r == nil { var r io.Reader for { if opCode, r, err = c.WS.NextReader(); err != nil { return 0, err } if opCode != websocket.BinaryMessage && opCode != websocket.TextMessage { continue } c.r = r break } } n, err := c.r.Read(b) if err != nil { if err == io.EOF { c.r = nil err = nil } } /* if n > 0 { fmt.Printf("ReadData: %v\r\n", b[:n]) } */ return n, err } func (c *NetConn4Gorilla) Write(b []byte) (n int, err error) { //fmt.Printf("WriteData: %v\r\n", b) var w io.WriteCloser if w, err = c.WS.NextWriter(c.WriteMessageType); err != nil { return } if n, err = w.Write(b); err != nil { return } err = w.Close() return } func (c *NetConn4Gorilla) Close() error { return c.WS.Close() } func (c *NetConn4Gorilla) LocalAddr() net.Addr { return c.WS.LocalAddr() } func (c *NetConn4Gorilla) RemoteAddr() net.Addr { return c.WS.RemoteAddr() } func (c *NetConn4Gorilla) SetDeadline(t time.Time) (err error) { if err = c.WS.SetReadDeadline(t); err != nil { return } return c.WS.SetWriteDeadline(t) } func (c *NetConn4Gorilla) SetReadDeadline(t time.Time) error { return c.WS.SetReadDeadline(t) } func (c *NetConn4Gorilla) SetWriteDeadline(t time.Time) error { return c.WS.SetWriteDeadline(t) }