提交 42de342f 编写于 作者: J Jason

总线加入启动,注册包尚未解析

上级 0918aca1
package dbus
import (
"errors"
"github.com/zgwit/dtu-admin/base"
"github.com/zgwit/dtu-admin/packet"
"log"
"net"
"strings"
)
type Server struct {
......@@ -47,14 +50,32 @@ func (s *Server) accept() {
}
func (s *Server) receive(conn net.Conn) {
buf := make([]byte, 1024)
//TODO 接收Key,并校验
var parser packet.Parser
buf := make([]byte, 1024)
c := NewClient()
//p := &Plugin{conn: conn}
//接收第一个包,作为类型校验
n, e := conn.Read(buf)
if e != nil {
log.Println(e)
return
}
packs := parser.Parse(buf[:n])
if len(packs) == 0 {
_ = conn.Close()
return
}
//根据第一个包创建客户羰
c, e := s.createTunnel(packs[0])
if e != nil {
_, _ = conn.Write([]byte(e.Error()))
_ = conn.Close()
return
}
//处理第一次接收的剩余包(网络拥堵时,可能会发生)
for _, pack := range packs[1:] {
c.Handle(pack)
}
for {
n, e := conn.Read(buf)
......@@ -68,12 +89,30 @@ func (s *Server) receive(conn net.Conn) {
}
}
//关闭透传
c.CLose()
//关闭
_ = c.CLose()
}
func (s *Server) createTunnel(p *packet.Packet) (base.Client, error) {
if p.Type != packet.TypeConnect {
//告诉客户端,第一个包必须是注册包
return nil, errors.New("first packet must be connect")
}
register := string(p.Data)
rs := strings.Split(register, ":")
switch rs[0] {
case "peer":
//TODO 解析 peer:key
case "plugin":
//TODO 解析 plugin:key:secret
}
return nil, errors.New("未支持的类型")
}
func ListenAndServe(addr string) error {
func Start(addr string) error {
s := &Server{
Net: "tcp",
Addr: addr,
......
......@@ -4,6 +4,7 @@ import (
"github.com/denisbrodbeck/machineid"
"github.com/zgwit/dtu-admin/conf"
"github.com/zgwit/dtu-admin/db"
"github.com/zgwit/dtu-admin/dbus"
"github.com/zgwit/dtu-admin/dtu"
"github.com/zgwit/dtu-admin/flag"
"github.com/zgwit/dtu-admin/web"
......@@ -45,6 +46,13 @@ func main() {
return
}
//启动总线 TODO 添加配置
err = dbus.Start(":1843")
if err != nil {
log.Println("总线启动失败:", err)
return
}
//恢复之前的链接
err = dtu.Recovery()
if err != nil {
......@@ -52,6 +60,7 @@ func main() {
return
}
//启动Web服务
web.Serve()
}
......@@ -13,12 +13,12 @@ const (
TypeHeartBeak
TypePing
TypePong
TypeError
//透传
TypeTransfer = iota + 10
TypeOnline //上线
TypeOffline //掉线
TypeError
)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册