Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sidecar
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
sidecar
Commits
7eff445d
Commit
7eff445d
authored
Sep 06, 2021
by
suyanlong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
replace port.Message to pb.Message
parent
41c3ed99
Pipeline
#7945
canceled with stages
Changes
15
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
123 additions
and
140 deletions
+123
-140
mock_monitor.go
internal/appchain/mock_monitor/mock_monitor.go
+4
-4
port.go
internal/appchain/port.go
+3
-4
checker_test.go
internal/checker/checker_test.go
+1
-1
local.go
internal/peermgr/local.go
+13
-9
mock_peermgr.go
internal/peermgr/mock_peermgr/mock_peermgr.go
+4
-4
peermgr.go
internal/peermgr/peermgr.go
+4
-4
peermgr_test.go
internal/peermgr/peermgr_test.go
+14
-17
port.go
internal/peermgr/port.go
+4
-5
swarm.go
internal/peermgr/swarm.go
+12
-19
port.go
internal/port/port.go
+4
-4
init.go
internal/router/init.go
+31
-18
mock_router.go
internal/router/mock_router/mock_router.go
+23
-50
router.go
internal/router/router.go
+1
-1
message.go
model/pb/message.go
+4
-0
message.pb.go
model/pb/message.pb.go
+1
-0
No files found.
internal/appchain/mock_monitor/mock_monitor.go
View file @
7eff445d
...
...
@@ -49,18 +49,18 @@ func (mr *MockMonitorMockRecorder) ListenIBTP() *gomock.Call {
}
// QueryIBTP mocks base method.
func
(
m
*
MockMonitor
)
QueryIBTP
(
id
string
)
(
*
pb
.
IBTP
,
error
)
{
func
(
m
*
MockMonitor
)
QueryIBTP
(
to
,
id
string
)
(
*
pb
.
IBTP
,
error
)
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"QueryIBTP"
,
id
)
ret
:=
m
.
ctrl
.
Call
(
m
,
"QueryIBTP"
,
to
,
id
)
ret0
,
_
:=
ret
[
0
]
.
(
*
pb
.
IBTP
)
ret1
,
_
:=
ret
[
1
]
.
(
error
)
return
ret0
,
ret1
}
// QueryIBTP indicates an expected call of QueryIBTP.
func
(
mr
*
MockMonitorMockRecorder
)
QueryIBTP
(
id
interface
{})
*
gomock
.
Call
{
func
(
mr
*
MockMonitorMockRecorder
)
QueryIBTP
(
to
,
id
interface
{})
*
gomock
.
Call
{
mr
.
mock
.
ctrl
.
T
.
Helper
()
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"QueryIBTP"
,
reflect
.
TypeOf
((
*
MockMonitor
)(
nil
)
.
QueryIBTP
),
id
)
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"QueryIBTP"
,
reflect
.
TypeOf
((
*
MockMonitor
)(
nil
)
.
QueryIBTP
),
to
,
id
)
}
// QueryOuterMeta mocks base method.
...
...
internal/appchain/port.go
View file @
7eff445d
package
appchain
import
(
"github.com/link33/sidecar/internal/port"
"github.com/link33/sidecar/model/pb"
)
...
...
@@ -21,7 +20,7 @@ func (a *appChain) Name() string {
return
a
.
client
.
Name
()
}
func
(
a
*
appChain
)
Send
(
msg
port
.
Message
)
(
*
pb
.
Message
,
error
)
{
func
(
a
*
appChain
)
Send
(
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
{
//TODO 调用该执行。
//a.ExecuteIBTP()
//a.Rollback()
...
...
@@ -29,7 +28,7 @@ func (a *appChain) Send(msg port.Message) (*pb.Message, error) {
panic
(
"implement me"
)
}
func
(
a
*
appChain
)
AsyncSend
(
msg
port
.
Message
)
error
{
func
(
a
*
appChain
)
AsyncSend
(
msg
*
pb
.
Message
)
error
{
//TODO 调用该执行。
//a.ExecuteIBTP()
//a.Rollback()
...
...
@@ -37,7 +36,7 @@ func (a *appChain) AsyncSend(msg port.Message) error {
panic
(
"implement me"
)
}
func
(
a
*
appChain
)
ListenIBTPX
()
<-
chan
*
pb
.
IBTPX
{
func
(
a
*
appChain
)
ListenIBTPX
()
<-
chan
*
pb
.
Message
{
panic
(
"implement me"
)
}
internal/checker/checker_test.go
View file @
7eff445d
...
...
@@ -71,7 +71,7 @@ func getIBTP(t *testing.T, index uint64, typ pb.IBTP_Type, fid, tid, proofPath s
From
:
fid
,
To
:
tid
,
Payload
:
ibtppd
,
Index
:
index
,
Nonce
:
index
,
Type
:
typ
,
Timestamp
:
time
.
Now
()
.
UnixNano
(),
Proof
:
proof
,
...
...
internal/peermgr/local.go
View file @
7eff445d
...
...
@@ -12,7 +12,7 @@ type local struct {
id
peer
.
ID
privKey
crypto
.
PrivateKey
tag
string
rev
chan
*
pb
.
IBTPX
rev
chan
*
pb
.
Message
rout
router
.
Router
}
...
...
@@ -32,7 +32,11 @@ func (l *local) Tag() string {
return
l
.
tag
}
func
(
l
*
local
)
Send
(
msg
port
.
Message
)
(
*
pb
.
Message
,
error
)
{
func
(
l
*
local
)
Send
(
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
{
panic
(
"implement me"
)
}
func
(
l
*
local
)
AsyncSend
(
msg
*
pb
.
Message
)
error
{
// 目标to == id 本机,获取信息
// 转发给路由器的。
// 判断数据类型
...
...
@@ -43,15 +47,15 @@ func (l *local) Send(msg port.Message) (*pb.Message, error) {
}
else
{
//转发给路由模块
//l.rout.Route()
var
ibtp
=
&
pb
.
Message
{}
l
.
rev
<-
ibtp
}
panic
(
"implement me"
)
return
nil
//
panic("implement me")
}
func
(
l
*
local
)
AsyncSend
(
msg
port
.
Message
)
error
{
panic
(
"implement me"
)
}
func
(
l
*
local
)
ListenIBTPX
()
<-
chan
*
pb
.
IBTPX
{
func
(
l
*
local
)
ListenIBTPX
()
<-
chan
*
pb
.
Message
{
return
l
.
rev
}
// sidecar 节点
internal/peermgr/mock_peermgr/mock_peermgr.go
View file @
7eff445d
...
...
@@ -38,7 +38,7 @@ func (m *MockPeerManager) EXPECT() *MockPeerManagerMockRecorder {
}
// AsyncSend mocks base method.
func
(
m
*
MockPeerManager
)
AsyncSend
(
arg0
string
,
arg1
port
.
Message
)
error
{
func
(
m
*
MockPeerManager
)
AsyncSend
(
arg0
string
,
arg1
*
pb
.
Message
)
error
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"AsyncSend"
,
arg0
,
arg1
)
ret0
,
_
:=
ret
[
0
]
.
(
error
)
...
...
@@ -52,7 +52,7 @@ func (mr *MockPeerManagerMockRecorder) AsyncSend(arg0, arg1 interface{}) *gomock
}
// AsyncSendWithPort mocks base method.
func
(
m
*
MockPeerManager
)
AsyncSendWithPort
(
arg0
port
.
Port
,
arg1
port
.
Message
)
error
{
func
(
m
*
MockPeerManager
)
AsyncSendWithPort
(
arg0
port
.
Port
,
arg1
*
pb
.
Message
)
error
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"AsyncSendWithPort"
,
arg0
,
arg1
)
ret0
,
_
:=
ret
[
0
]
.
(
error
)
...
...
@@ -152,7 +152,7 @@ func (mr *MockPeerManagerMockRecorder) RegisterMultiMsgHandler(arg0, arg1 interf
}
// Send mocks base method.
func
(
m
*
MockPeerManager
)
Send
(
arg0
string
,
arg1
port
.
Message
)
(
*
pb
.
Message
,
error
)
{
func
(
m
*
MockPeerManager
)
Send
(
arg0
string
,
arg1
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"Send"
,
arg0
,
arg1
)
ret0
,
_
:=
ret
[
0
]
.
(
*
pb
.
Message
)
...
...
@@ -167,7 +167,7 @@ func (mr *MockPeerManagerMockRecorder) Send(arg0, arg1 interface{}) *gomock.Call
}
// SendWithPort mocks base method.
func
(
m
*
MockPeerManager
)
SendWithPort
(
s
port
.
Port
,
msg
port
.
Message
)
(
*
pb
.
Message
,
error
)
{
func
(
m
*
MockPeerManager
)
SendWithPort
(
s
port
.
Port
,
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"SendWithPort"
,
s
,
msg
)
ret0
,
_
:=
ret
[
0
]
.
(
*
pb
.
Message
)
...
...
internal/peermgr/peermgr.go
View file @
7eff445d
...
...
@@ -22,13 +22,13 @@ type PeerManager interface {
Connect
(
info
*
peer
.
AddrInfo
)
(
string
,
error
)
// AsyncSend sends message to peer with peer info.
AsyncSend
(
string
,
port
.
Message
)
error
AsyncSend
(
string
,
*
pb
.
Message
)
error
// Send sends message waiting response
Send
(
string
,
port
.
Message
)
(
*
pb
.
Message
,
error
)
Send
(
string
,
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
AsyncSendWithPort
(
port
.
Port
,
port
.
Message
)
error
AsyncSendWithPort
(
port
.
Port
,
*
pb
.
Message
)
error
SendWithPort
(
s
port
.
Port
,
msg
port
.
Message
)
(
*
pb
.
Message
,
error
)
SendWithPort
(
s
port
.
Port
,
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
Handler
}
...
...
internal/peermgr/peermgr_test.go
View file @
7eff445d
...
...
@@ -2,6 +2,7 @@ package peermgr
import
(
"fmt"
router2
"github.com/link33/sidecar/internal/router"
"github.com/link33/sidecar/model/pb"
"testing"
"time"
...
...
@@ -18,12 +19,12 @@ import (
"github.com/stretchr/testify/require"
)
var
portMap
=
&
port
.
PortMap
{}
var
router
router2
.
Router
func
newSidecar
(
addr
*
peer2
.
AddrInfo
,
pm
PeerManager
)
port
.
Port
{
rec
:=
make
(
chan
*
pb
.
IBTPX
)
rec
:=
make
(
chan
*
pb
.
Message
)
return
&
sidecar
{
addr
:
addr
,
id
:
addr
.
ID
.
String
()
,
swarm
:
pm
,
tag
:
""
,
rev
:
rec
,
...
...
@@ -35,22 +36,22 @@ func TestNew(t *testing.T) {
// test wrong nodePrivKey
nodeKeys
,
privKeys
,
config
,
_
:=
genKeysAndConfig
(
t
,
2
,
repo
.
DirectMode
)
_
,
err
:=
New
(
config
,
portMap
,
nil
,
privKeys
[
0
],
0
,
logger
)
_
,
err
:=
New
(
config
,
router
,
nil
,
privKeys
[
0
],
0
,
logger
)
require
.
NotNil
(
t
,
err
)
// test new swarm in direct mode
nodeKeys
,
privKeys
,
config
,
_
=
genKeysAndConfig
(
t
,
2
,
repo
.
DirectMode
)
_
,
err
=
New
(
config
,
portMap
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
logger
)
_
,
err
=
New
(
config
,
router
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
logger
)
require
.
Nil
(
t
,
err
)
_
,
err
=
New
(
config
,
portMap
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
logger
)
_
,
err
=
New
(
config
,
router
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
logger
)
require
.
Nil
(
t
,
err
)
// test new swarm in unsupport mode
nodeKeys
,
privKeys
,
config
,
_
=
genKeysAndConfig
(
t
,
2
,
""
)
_
,
err
=
New
(
config
,
portMap
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
logger
)
_
,
err
=
New
(
config
,
router
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
logger
)
require
.
NotNil
(
t
,
err
)
}
...
...
@@ -58,12 +59,12 @@ func TestSwarm_Start(t *testing.T) {
logger
:=
log
.
NewWithModule
(
"swarm"
)
nodeKeys
,
privKeys
,
config
,
_
:=
genKeysAndConfig
(
t
,
2
,
repo
.
DirectMode
)
swarm1
,
err
:=
New
(
config
,
portMap
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
logger
)
swarm1
,
err
:=
New
(
config
,
router
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
logger
)
require
.
Nil
(
t
,
err
)
go
swarm1
.
Start
()
swarm2
,
err
:=
New
(
config
,
portMap
,
nodeKeys
[
1
],
privKeys
[
1
],
0
,
logger
)
swarm2
,
err
:=
New
(
config
,
router
,
nodeKeys
[
1
],
privKeys
[
1
],
0
,
logger
)
require
.
Nil
(
t
,
err
)
go
swarm2
.
Start
()
...
...
@@ -92,11 +93,9 @@ func TestSwarm_AsyncSend(t *testing.T) {
require
.
NotNil
(
t
,
err
)
// test in right way
addr
,
err
:
=
AddrToPeerInfo
(
mockMultiAddr
)
_
,
err
=
AddrToPeerInfo
(
mockMultiAddr
)
require
.
Nil
(
t
,
err
)
mockSwarm
.
router
.
Store
(
mockId
,
newSidecar
(
addr
,
mockSwarm
))
err
=
mockSwarm
.
AsyncSend
(
mockId
,
mockMsg
)
require
.
Nil
(
t
,
err
)
}
...
...
@@ -109,11 +108,9 @@ func TestSwarm_Send(t *testing.T) {
require
.
NotNil
(
t
,
err
)
// test in right way
addr
,
err
:
=
AddrToPeerInfo
(
mockMultiAddr
)
_
,
err
=
AddrToPeerInfo
(
mockMultiAddr
)
require
.
Nil
(
t
,
err
)
mockSwarm
.
router
.
Store
(
mockId
,
newSidecar
(
addr
,
mockSwarm
))
_
,
err
=
mockSwarm
.
Send
(
mockId
,
mockMsg
)
require
.
Nil
(
t
,
err
)
}
...
...
@@ -223,10 +220,10 @@ func TestSwarm_Provider(t *testing.T) {
require
.
Nil
(
t
,
err
)
}
func
prepare
(
t
*
testing
.
T
)
(
*
Swarm
,
[]
string
,
*
Swarm
,
port
.
Message
,
string
,
string
)
{
func
prepare
(
t
*
testing
.
T
)
(
*
Swarm
,
[]
string
,
*
Swarm
,
*
pb
.
Message
,
string
,
string
)
{
nodeKeys
,
privKeys
,
config
,
ids
:=
genKeysAndConfig
(
t
,
2
,
repo
.
DirectMode
)
swarm
,
err
:=
New
(
config
,
portMap
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
log
.
NewWithModule
(
"swarm"
))
swarm
,
err
:=
New
(
config
,
router
,
nodeKeys
[
0
],
privKeys
[
0
],
0
,
log
.
NewWithModule
(
"swarm"
))
require
.
Nil
(
t
,
err
)
mockMsg
:=
&
pb
.
Message
{
Type
:
pb
.
Message_APPCHAIN_REGISTER
}
...
...
internal/peermgr/port.go
View file @
7eff445d
...
...
@@ -9,7 +9,7 @@ type sidecar struct {
id
string
swarm
PeerManager
tag
string
rev
chan
*
pb
.
IBTPX
rev
chan
*
pb
.
Message
}
func
(
s
*
sidecar
)
ID
()
string
{
...
...
@@ -30,17 +30,16 @@ func (s *sidecar) Tag() string {
// Send TODO 如何区别IBTPX与Message
// Send 同步发送给绑定的对应的port dev
func
(
s
*
sidecar
)
Send
(
msg
port
.
Message
)
(
*
pb
.
Message
,
error
)
{
func
(
s
*
sidecar
)
Send
(
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
{
return
s
.
swarm
.
Send
(
s
.
ID
(),
msg
)
}
// AsyncSend 异步发送给绑定的对应的port dev
func
(
s
*
sidecar
)
AsyncSend
(
msg
port
.
Message
)
error
{
func
(
s
*
sidecar
)
AsyncSend
(
msg
*
pb
.
Message
)
error
{
return
s
.
swarm
.
AsyncSend
(
s
.
ID
(),
msg
)
}
// ListenIBTPX 从绑定的对应的port dev接收数据
func
(
s
*
sidecar
)
ListenIBTPX
()
<-
chan
*
pb
.
IBTPX
{
func
(
s
*
sidecar
)
ListenIBTPX
()
<-
chan
*
pb
.
Message
{
return
s
.
rev
}
internal/peermgr/swarm.go
View file @
7eff445d
...
...
@@ -96,7 +96,7 @@ func (swarm *Swarm) Start() error {
id
:
swarm
.
id
,
privKey
:
swarm
.
privKey
,
tag
:
""
,
rev
:
make
(
chan
*
pb
.
IBTPX
),
rev
:
make
(
chan
*
pb
.
Message
),
rout
:
swarm
.
router
,
}
swarm
.
router
.
Add
(
l
)
...
...
@@ -142,7 +142,7 @@ func (swarm *Swarm) Start() error {
"address:"
:
address
,
})
.
Info
(
"Connect successfully"
)
rec
:=
make
(
chan
*
pb
.
IBTPX
)
rec
:=
make
(
chan
*
pb
.
Message
)
p
:=
&
sidecar
{
id
:
id
,
swarm
:
swarm
,
...
...
@@ -173,7 +173,7 @@ func (swarm *Swarm) Start() error {
return
nil
}
//注册异步处理数据的方法
//
注册异步处理数据的方法
func
(
swarm
*
Swarm
)
handleMessage
(
s
network
.
Stream
,
data
[]
byte
)
{
m
:=
&
pb
.
Message
{}
if
err
:=
m
.
Unmarshal
(
data
);
err
!=
nil
{
...
...
@@ -181,26 +181,20 @@ func (swarm *Swarm) handleMessage(s network.Stream, data []byte) {
return
}
pack
:=
m
.
Payload
.
Data
t
:=
m
.
Type
switch
{
// 接收其它sidecar节点发过来的交易、请求等。主要是IBTP结构相关数据。
case
t
==
pb
.
Message_IBTP_SEND
||
t
==
pb
.
Message_IBTP_GET
||
t
==
pb
.
Message_IBTP_RECEIPT_SEND
||
t
==
pb
.
Message_IBTP_RECEIPT_GET
:
ibtpx
:=
&
pb
.
IBTPX
{}
if
err
:=
m
.
Unmarshal
(
pack
);
err
!=
nil
{
swarm
.
logger
.
Error
(
err
)
return
}
p
,
is
:=
swarm
.
router
.
Load
(
s
.
RemotePeerID
())
if
is
{
ps
,
iss
:=
p
.
(
*
sidecar
)
if
iss
{
ps
.
rev
<-
ibtpx
ps
.
rev
<-
m
return
}
}
addr
,
_
:=
peer
.
AddrInfoFromP2pAddr
(
s
.
RemotePeerAddr
())
rec
:=
make
(
chan
*
pb
.
IBTPX
)
rec
:=
make
(
chan
*
pb
.
Message
)
newPort
:=
&
sidecar
{
id
:
addr
.
ID
.
String
(),
swarm
:
swarm
,
...
...
@@ -208,10 +202,9 @@ func (swarm *Swarm) handleMessage(s network.Stream, data []byte) {
rev
:
rec
,
}
swarm
.
router
.
Add
(
newPort
)
rec
<-
ibtpx
default
:
//非IBTP结构相关数据
rec
<-
m
default
:
//非IBTP结构相关数据
,转发给local处理
//TODO
}
}
...
...
@@ -237,7 +230,7 @@ func (swarm *Swarm) Connect(addrInfo *peer.AddrInfo) (string, error) {
"addrInfo"
:
addrInfo
,
})
.
Info
(
"Connect peer"
)
rec
:=
make
(
chan
*
pb
.
IBTPX
)
rec
:=
make
(
chan
*
pb
.
Message
)
p
:=
&
sidecar
{
id
:
addrInfo
.
ID
.
String
(),
swarm
:
swarm
,
...
...
@@ -248,15 +241,15 @@ func (swarm *Swarm) Connect(addrInfo *peer.AddrInfo) (string, error) {
return
addrInfo
.
ID
.
String
(),
nil
}
func
(
swarm
*
Swarm
)
AsyncSendWithPort
(
s
port
.
Port
,
msg
port
.
Message
)
error
{
func
(
swarm
*
Swarm
)
AsyncSendWithPort
(
s
port
.
Port
,
msg
*
pb
.
Message
)
error
{
return
s
.
AsyncSend
(
msg
)
}
func
(
swarm
*
Swarm
)
SendWithPort
(
s
port
.
Port
,
msg
port
.
Message
)
(
*
pb
.
Message
,
error
)
{
func
(
swarm
*
Swarm
)
SendWithPort
(
s
port
.
Port
,
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
{
return
s
.
Send
(
msg
)
}
func
(
swarm
*
Swarm
)
AsyncSend
(
id
string
,
msg
port
.
Message
)
error
{
func
(
swarm
*
Swarm
)
AsyncSend
(
id
string
,
msg
*
pb
.
Message
)
error
{
data
,
err
:=
msg
.
Marshal
()
if
err
!=
nil
{
return
fmt
.
Errorf
(
"marshal message: %w"
,
err
)
...
...
@@ -265,7 +258,7 @@ func (swarm *Swarm) AsyncSend(id string, msg port.Message) error {
return
swarm
.
p2p
.
AsyncSend
(
id
,
data
)
}
func
(
swarm
*
Swarm
)
Send
(
id
string
,
msg
port
.
Message
)
(
*
pb
.
Message
,
error
)
{
func
(
swarm
*
Swarm
)
Send
(
id
string
,
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
{
data
,
err
:=
msg
.
Marshal
()
if
err
!=
nil
{
return
nil
,
err
...
...
internal/port/port.go
View file @
7eff445d
...
...
@@ -15,7 +15,7 @@ const (
Appchain
=
"appchain"
//区块链客户端
)
// 设计一套port管理机制:包括各种的管理模块。
以组合的行驶。
// 设计一套port管理机制:包括各种的管理模块。
// 设计一套,管理机制。
// 与中继交互的是单独完整的机制。并且注册到路由表中。或者更加类型,这样就限制一个sidecar最多只能连接一个hub。避免网络风暴。或者只是一个转发功能。转发到指定节点。
// 先是从转发开始完成。
...
...
@@ -39,13 +39,13 @@ type Port interface {
Tag
()
string
// Send 同步发送给绑定的对应的port dev
Send
(
msg
Message
)
(
*
pb
.
Message
,
error
)
//TODO 如何区别IBTPX与Message
Send
(
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
//TODO 如何区别IBTPX与Message
// AsyncSend 异步发送给绑定的对应的port dev
AsyncSend
(
msg
Message
)
error
AsyncSend
(
msg
*
pb
.
Message
)
error
// ListenIBTPX 从绑定的对应的port dev接收数据
ListenIBTPX
()
<-
chan
*
pb
.
IBTPX
ListenIBTPX
()
<-
chan
*
pb
.
Message
}
type
Message
interface
{
...
...
internal/router/init.go
View file @
7eff445d
...
...
@@ -3,6 +3,7 @@ package router
import
(
"context"
"errors"
"strings"
"github.com/link33/sidecar/internal/checker"
"github.com/link33/sidecar/internal/port"
...
...
@@ -51,8 +52,8 @@ func (r *router) Add(p port.Port) error {
c
:=
p
.
ListenIBTPX
()
for
{
select
{
case
ibtpx
:=
<-
c
:
err
:=
r
.
Route
(
ibtpx
)
case
msg
:=
<-
c
:
err
:=
r
.
Route
(
msg
)
if
err
!=
nil
{
r
.
logger
.
Error
(
err
)
}
...
...
@@ -78,7 +79,12 @@ func (r *router) Remove(p port.Port) error {
return
nil
}
func
(
r
*
router
)
Route
(
ibtpx
*
pb
.
IBTPX
)
error
{
func
(
r
*
router
)
Route
(
msg
*
pb
.
Message
)
error
{
ibtpx
:=
&
pb
.
IBTPX
{}
err
:=
ibtpx
.
Unmarshal
(
msg
.
Payload
.
Data
)
if
err
!=
nil
{
return
err
}
mode
:=
ibtpx
.
Mode
//本网关已签名、中继链已背书、to是本网关内部的appchain,即顺利通过并转发,否则打断。
if
!
((
r
.
isSign
(
ibtpx
)
&&
mode
==
repo
.
RelayMode
&&
r
.
isEndorse
(
ibtpx
))
||
!
r
.
isSign
(
ibtpx
))
{
...
...
@@ -89,8 +95,14 @@ func (r *router) Route(ibtpx *pb.IBTPX) error {
r
.
sign
(
ibtpx
)
}
data
,
err
:=
ibtpx
.
Marshal
()
if
err
!=
nil
{
return
err
}
msg
.
Payload
.
Data
=
data
ibtp
:=
ibtpx
.
Ibtp
err
:
=
r
.
checker
.
Check
(
ibtp
)
err
=
r
.
checker
.
Check
(
ibtp
)
if
err
!=
nil
{
r
.
logger
.
Error
(
"check ibtp: %w"
,
err
)
return
err
...
...
@@ -99,20 +111,21 @@ func (r *router) Route(ibtpx *pb.IBTPX) error {
if
pp
,
is
:=
r
.
portMap
.
Port
(
to
);
is
{
switch
{
case
pp
.
Type
()
==
port
.
Sidecar
:
return
pp
.
AsyncSend
(
ibtpx
)
//转发给sidecar节点,或者本身local节点。
case
pp
.
Type
()
==
port
.
Hub
:
//发给hub appchain
return
pp
.
AsyncSend
(
ibtpx
)
//
return
pp
.
AsyncSend
(
msg
)
//转发给其它的sidecar节点或者本身local节点。
case
pp
.
Type
()
==
port
.
Hub
:
//发给hub appchain TODO 本机找到的appchain只能是自己的appchain
return
pp
.
AsyncSend
(
msg
)
case
pp
.
Type
()
==
port
.
Appchain
:
//TODO 本机找到的appchain只能是自己的appchain
switch
mode
{
case
repo
.
RelayMode
:
hub
,
is
:=
r
.
getHub
()
if
is
&&
!
r
.
isEndorse
(
ibtpx
)
{
return
hub
.
AsyncSend
(
ibtpx
)
return
hub
.
AsyncSend
(
msg
)
}
else
{
return
pp
.
AsyncSend
(
ibtpx
)
return
pp
.
AsyncSend
(
msg
)
}
case
repo
.
DirectMode
:
return
pp
.
AsyncSend
(
ibtpx
)
return
pp
.
AsyncSend
(
msg
)
default
:
//TODO 跳过
return
nil
...
...
@@ -122,23 +135,23 @@ func (r *router) Route(ibtpx *pb.IBTPX) error {
return
nil
}
}
//规则判断 转发给sidecar节点
method
:=
ibtpx
.
RouteMethod
//规则判断 转发给
其它的
sidecar节点
method
:=
strings
.
ToLower
(
ibtpx
.
RouteMethod
)
if
md
,
is
:=
r
.
methodMap
[
method
];
is
{
ports
:=
md
(
ibtpx
.
RouteMethodArg
)
if
len
(
ports
)
==
0
{
r
.
firstRoute
(
ibtpx
)
r
.
firstRoute
(
msg
)
}
for
_
,
p
:=
range
ports
{
_
=
p
.
AsyncSend
(
ibtpx
)
_
=
p
.
AsyncSend
(
msg
)
}
}
else
{
r
.
firstRoute
(
ibtpx
)
r
.
firstRoute
(
msg
)
}
return
nil
}
func
(
r
*
router
)
firstRoute
(
ibtp
*
pb
.
IBTPX
)
{
func
(
r
*
router
)
firstRoute
(
ibtp
*
pb
.
Message
)
{
panic
(
"implement me"
)
}
...
...
@@ -179,7 +192,7 @@ func (r *router) Official([]string) []port.Port {
panic
(
"implement me"
)
}
func
(
r
*
router
)
Send
(
id
string
,
msg
port
.
Message
)
(
*
pb
.
Message
,
error
)
{
func
(
r
*
router
)
Send
(
id
string
,
msg
*
pb
.
Message
)
(
*
pb
.
Message
,
error
)
{
if
p
,
is
:=
r
.
portMap
.
Port
(
id
);
is
{
return
p
.
Send
(
msg
)
}
...
...
@@ -187,7 +200,7 @@ func (r *router) Send(id string, msg port.Message) (*pb.Message, error) {
return
nil
,
errors
.
New
(
"id error!"
)
}
func
(
r
*
router
)
AsyncSend
(
id
string
,
msg
port
.
Message
)
error
{
func
(
r
*
router
)
AsyncSend
(
id
string
,
msg
*
pb
.
Message
)
error
{
if
p
,
is
:=
r
.
portMap
.
Port
(
id
);
is
{
return
p
.
AsyncSend
(
msg
)
}
...
...
internal/router/mock_router/mock_router.go
View file @
7eff445d
...
...
@@ -8,8 +8,8 @@ import (
reflect
"reflect"
gomock
"github.com/golang/mock/gomock"
port
"github.com/link33/sidecar/internal/port"
pb
"github.com/link33/sidecar/model/pb"
appchain_mgr
"github.com/meshplus/bitxhub-core/appchain-mgr"
)
// MockRouter is a mock of Router interface.
...
...
@@ -35,78 +35,51 @@ func (m *MockRouter) EXPECT() *MockRouterMockRecorder {
return
m
.
recorder
}
// Add
Appchains
mocks base method.
func
(
m
*
MockRouter
)
Add
Appchains
(
appchains
[]
*
appchain_mgr
.
Appchain
)
error
{
// Add mocks base method.
func
(
m
*
MockRouter
)
Add
(
p
port
.
Port
)
error
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"Add
Appchains"
,
appchains
)
ret
:=
m
.
ctrl
.
Call
(
m
,
"Add
"
,
p
)
ret0
,
_
:=
ret
[
0
]
.
(
error
)
return
ret0
}
// Add
Appchains indicates an expected call of AddAppchains
.
func
(
mr
*
MockRouterMockRecorder
)
Add
Appchains
(
appchains
interface
{})
*
gomock
.
Call
{
// Add
indicates an expected call of Add
.
func
(
mr
*
MockRouterMockRecorder
)
Add
(
p
interface
{})
*
gomock
.
Call
{
mr
.
mock
.
ctrl
.
T
.
Helper
()
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"Add
Appchains"
,
reflect
.
TypeOf
((
*
MockRouter
)(
nil
)
.
AddAppchains
),
appchains
)
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"Add
"
,
reflect
.
TypeOf
((
*
MockRouter
)(
nil
)
.
Add
),
p
)
}
//
Broadcast
mocks base method.
func
(
m
*
MockRouter
)
Broadcast
(
ids
[]
string
)
error
{
//
Adds
mocks base method.
func
(
m
*
MockRouter
)
Adds
(
p
[]
port
.
Port
)
error
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"
Broadcast"
,
ids
)
ret
:=
m
.
ctrl
.
Call
(
m
,
"
Adds"
,
p
)
ret0
,
_
:=
ret
[
0
]
.
(
error
)
return
ret0
}
//
Broadcast indicates an expected call of Broadcast
.
func
(
mr
*
MockRouterMockRecorder
)
Broadcast
(
ids
interface
{})
*
gomock
.
Call
{
//
Adds indicates an expected call of Adds
.
func
(
mr
*
MockRouterMockRecorder
)
Adds
(
p
interface
{})
*
gomock
.
Call
{
mr
.
mock
.
ctrl
.
T
.
Helper
()
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"
Broadcast"
,
reflect
.
TypeOf
((
*
MockRouter
)(
nil
)
.
Broadcast
),
ids
)
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"
Adds"
,
reflect
.
TypeOf
((
*
MockRouter
)(
nil
)
.
Adds
),
p
)
}
//
ExistAppchain
mocks base method.
func
(
m
*
MockRouter
)
ExistAppchain
(
id
string
)
bool
{
//
Load
mocks base method.
func
(
m
*
MockRouter
)
Load
(
key
string
)
(
port
.
Port
,
bool
)
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"ExistAppchain"
,
id
)
ret0
,
_
:=
ret
[
0
]
.
(
bool
)
return
ret0
}
// ExistAppchain indicates an expected call of ExistAppchain.
func
(
mr
*
MockRouterMockRecorder
)
ExistAppchain
(
id
interface
{})
*
gomock
.
Call
{
mr
.
mock
.
ctrl
.
T
.
Helper
()
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"ExistAppchain"
,
reflect
.
TypeOf
((
*
MockRouter
)(
nil
)
.
ExistAppchain
),
id
)
}
// InPut mocks base method.
func
(
m
*
MockRouter
)
InPut
(
ibtp
*
pb
.
IBTP
)
chan
*
pb
.
IBTP
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"InPut"
,
ibtp
)
ret0
,
_
:=
ret
[
0
]
.
(
chan
*
pb
.
IBTP
)
return
ret0
}
// InPut indicates an expected call of InPut.
func
(
mr
*
MockRouterMockRecorder
)
InPut
(
ibtp
interface
{})
*
gomock
.
Call
{
mr
.
mock
.
ctrl
.
T
.
Helper
()
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"InPut"
,
reflect
.
TypeOf
((
*
MockRouter
)(
nil
)
.
InPut
),
ibtp
)
}
// OutPut mocks base method.
func
(
m
*
MockRouter
)
OutPut
(
ibtp
*
pb
.
IBTP
)
chan
*
pb
.
IBTP
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"OutPut"
,
ibtp
)
ret0
,
_
:=
ret
[
0
]
.
(
chan
*
pb
.
IBTP
)
return
ret0
ret
:=
m
.
ctrl
.
Call
(
m
,
"Load"
,
key
)
ret0
,
_
:=
ret
[
0
]
.
(
port
.
Port
)
ret1
,
_
:=
ret
[
1
]
.
(
bool
)
return
ret0
,
ret1
}
//
OutPut indicates an expected call of OutPut
.
func
(
mr
*
MockRouterMockRecorder
)
OutPut
(
ibtp
interface
{})
*
gomock
.
Call
{
//
Load indicates an expected call of Load
.
func
(
mr
*
MockRouterMockRecorder
)
Load
(
key
interface
{})
*
gomock
.
Call
{
mr
.
mock
.
ctrl
.
T
.
Helper
()
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"
OutPut"
,
reflect
.
TypeOf
((
*
MockRouter
)(
nil
)
.
OutPut
),
ibtp
)
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"
Load"
,
reflect
.
TypeOf
((
*
MockRouter
)(
nil
)
.
Load
),
key
)
}
// Route mocks base method.
func
(
m
*
MockRouter
)
Route
(
ibtp
*
pb
.
IBTPX
)
error
{
func
(
m
*
MockRouter
)
Route
(
ibtp
*
pb
.
Message
)
error
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"Route"
,
ibtp
)
ret0
,
_
:=
ret
[
0
]
.
(
error
)
...
...
internal/router/router.go
View file @
7eff445d
...
...
@@ -18,7 +18,7 @@ type Router interface {
Adds
(
p
[]
port
.
Port
)
error
//Route sends ibtp to the union pier in target relay chain
Route
(
ibtp
*
pb
.
IBTPX
)
error
Route
(
ibtp
*
pb
.
Message
)
error
Load
(
key
string
)
(
value
port
.
Port
,
ok
bool
)
...
...
model/pb/message.go
View file @
7eff445d
...
...
@@ -9,3 +9,7 @@ const (
// Unmarshal([]byte) error
// IsMsg()bool
//}
func
(
m
*
Message
)
IsIBTPX
()
bool
{
return
false
}
model/pb/message.pb.go
View file @
7eff445d
...
...
@@ -32,6 +32,7 @@ const (
Message_APPCHAIN_GET
Message_Type
=
4
Message_INTERCHAIN_META_GET
Message_Type
=
5
Message_RULE_DEPLOY
Message_Type
=
6
//异步完成
Message_IBTP_GET
Message_Type
=
7
Message_IBTP_SEND
Message_Type
=
8
Message_IBTP_RECEIPT_SEND
Message_Type
=
9
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment