From 35741fc6b72c86a08da91c088be77151028ba0c2 Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 30 Sep 2020 11:00:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=8F=E4=BC=A0=E5=90=8E=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/core/peer.go | 35 +++++++++++++++++++++++++---------- internal/web/app.go | 2 ++ internal/web/peer.go | 24 ++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 internal/web/peer.go diff --git a/internal/core/peer.go b/internal/core/peer.go index 646c90a..362eec0 100644 --- a/internal/core/peer.go +++ b/internal/core/peer.go @@ -1,13 +1,21 @@ package core -import "net" +import ( + "fmt" + "golang.org/x/net/websocket" +) type Peer struct { - conn net.Conn + conn *websocket.Conn link *Link } -func NewPeer(conn net.Conn, link *Link) *Peer { +type PeerPacket struct { + cmd string + payload []byte +} + +func NewPeer(conn *websocket.Conn, link *Link) *Peer { peer := &Peer{ conn: conn, link: link, @@ -16,21 +24,28 @@ func NewPeer(conn net.Conn, link *Link) *Peer { return peer } -func (p *Peer) receive() { - buf := make([]byte, 1024) +func (p *Peer) Receive() { for { - n, e := p.conn.Read(buf) - if e != nil { + var pack PeerPacket + if err := websocket.JSON.Receive(p.conn, &pack); err != nil { + fmt.Println(err) break } - _ = p.link.Write(buf[:n]) - //TODO 使用协议 + + switch pack.cmd { + case "transfer": + _ = p.link.Write(pack.payload) + } } _ = p.Close() } func (p *Peer) Send(buf []byte) error { - return nil + pack := &PeerPacket{ + cmd: "transfer", + payload: buf, + } + return websocket.Message.Send(p.conn, pack) } func (p *Peer) Close() error { diff --git a/internal/web/app.go b/internal/web/app.go index 9e41252..09c1eef 100644 --- a/internal/web/app.go +++ b/internal/web/app.go @@ -26,6 +26,8 @@ func Serve() { //MQTT app.GET("/mqtt", mqtt) + //透传 + app.GET("/peer", peer) //开放接口 open.RegisterRoutes(app.Group("/open")) diff --git a/internal/web/peer.go b/internal/web/peer.go new file mode 100644 index 0000000..043f2a6 --- /dev/null +++ b/internal/web/peer.go @@ -0,0 +1,24 @@ +package web + +import ( + "git.zgwit.com/zgwit/iot-admin/internal/core" + "github.com/gin-gonic/gin" + "golang.org/x/net/websocket" + "log" +) + +func peer(ctx *gin.Context) { + key := ctx.Query("key") + log.Println(key) + + //TODO 获取链接 + //link, err := core.GetLink() + + + websocket.Handler(func(ws *websocket.Conn) { + peer := core.NewPeer(ws, nil) + peer.Receive() + }).ServeHTTP(ctx.Writer, ctx.Request) + //ctx.Abort() +} + -- GitLab