Browse Source

First Version

zry 3 years ago
parent
commit
09bb0427fd
1 changed files with 85 additions and 0 deletions
  1. 85 0
      g2nc.go

+ 85 - 0
g2nc.go

@@ -0,0 +1,85 @@
+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)
+}