12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- 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)
- }
|