提交 4322e09c 编写于 作者: J Jason

小小优化

上级 6c9960c3
......@@ -46,4 +46,12 @@ func (p *baseClient) SendError(err string) error {
Status: 0,
Data: []byte(err),
})
}
func (p *baseClient) Disconnect(info string) error {
return p.Send(&packet.Packet{
Type: packet.TypeDisconnect,
Status: 0,
Data: []byte(info),
})
}
\ No newline at end of file
package dbus
import (
"fmt"
"github.com/zgwit/dtu-admin/base"
"github.com/zgwit/dtu-admin/dtu"
"github.com/zgwit/dtu-admin/packet"
"log"
"sync"
"time"
)
......@@ -18,7 +18,7 @@ type Peer struct {
func (p *Peer) Handle(msg *packet.Packet) {
switch msg.Type {
case packet.TypeConnect:
_ = p.SendError("duplicate register")
_ = p.Disconnect("duplicate register")
_ = p.CLose()
case packet.TypeHeartBeak:
case packet.TypePing:
......@@ -26,7 +26,7 @@ func (p *Peer) Handle(msg *packet.Packet) {
case packet.TypeTransfer:
p.handleTransfer(msg)
default:
log.Println("unknown command", msg)
_ = p.SendError(fmt.Sprintf("unknown command %d", msg.Type))
}
}
......
......@@ -12,16 +12,15 @@ type Plugin struct {
func (p *Plugin) Handle(msg *packet.Packet) {
switch msg.Type {
case packet.TypeConnect:
_ = p.SendError("duplicate register")
_ = p.Disconnect("duplicate register")
_ = p.CLose()
//p.handleConnect(msg)
case packet.TypeHeartBeak:
case packet.TypePing:
_ = p.Send(&packet.Packet{Type: packet.TypePong})
case packet.TypeTransfer:
p.handleTransfer(msg)
default:
log.Println("unknown command", msg)
_ = p.SendError(fmt.Sprintf("unknown command %d", msg.Type))
}
}
......
......@@ -66,13 +66,18 @@ func (s *Server) receive(conn net.Conn) {
_ = conn.Close()
return
}
//根据第一个包创建客户
//根据第一个包创建客户
c, e := s.createTunnel(conn, packs[0])
if e != nil {
_, _ = conn.Write([]byte(e.Error()))
p := packet.Packet{
Type: packet.TypeDisconnect,
Data: []byte(e.Error()),
}
_, _ = conn.Write(p.Encode())
_ = conn.Close()
return
}
//处理第一次接收的剩余包(网络拥堵时,可能会发生)
for _, pack := range packs[1:] {
c.Handle(pack)
......@@ -117,6 +122,8 @@ func (s *Server) createTunnel(conn net.Conn, p *packet.Packet) (base.Tunnel, err
link := v.(*dtu.Link)
peer := &Peer{baseClient: baseClient{conn: conn}, link: link}
link.Peer(peer)
//TODO 回复ConnectAck,连接信息
return peer, nil
case "plugin":
//TODO 解析 plugin:key:secret
......
......@@ -128,5 +128,3 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册