Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
rudern
物联大师
提交
42de342f
物
物联大师
项目概览
rudern
/
物联大师
通知
5
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
物
物联大师
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
42de342f
编写于
9月 06, 2020
作者:
J
Jason
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
总线加入启动,注册包尚未解析
上级
0918aca1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
57 addition
and
9 deletion
+57
-9
dbus/server.go
dbus/server.go
+47
-8
main.go
main.go
+9
-0
packet/type.go
packet/type.go
+1
-1
未找到文件。
dbus/server.go
浏览文件 @
42de342f
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
,
...
...
main.go
浏览文件 @
42de342f
...
...
@@ -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
()
}
packet/
id
.go
→
packet/
type
.go
浏览文件 @
42de342f
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录