提交 35741fc6 编写于 作者: J Jason

透传后端

上级 a2553e39
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 {
......
......@@ -26,6 +26,8 @@ func Serve() {
//MQTT
app.GET("/mqtt", mqtt)
//透传
app.GET("/peer", peer)
//开放接口
open.RegisterRoutes(app.Group("/open"))
......
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()
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册