Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
b25c14f2
Unverified
提交
b25c14f2
authored
10月 27, 2018
作者:
Steven Allen
提交者:
GitHub
10月 27, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5675 from overbool/refactor/commands/ping
commands/ping: use new cmds lib
上级
ccd7f2c8
cec3af28
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
28 行增加
和
49 行删除
+28
-49
ping.go
core/commands/ping.go
+27
-48
root.go
core/commands/root.go
+1
-1
没有找到文件。
core/commands/ping.go
浏览文件 @
b25c14f2
package
commands
import
(
"bytes"
"context"
"errors"
"fmt"
...
...
@@ -9,14 +8,14 @@ import (
"strings"
"time"
cmds
"github.com/ipfs/go-ipfs/commands"
"github.com/ipfs/go-ipfs/core"
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
u
"gx/ipfs/QmPdKqUcHGFdeSpvjVoaTRPPstGif9GBZb5Q56RVw9o69A/go-ipfs-util
"
cmds
"gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds
"
ma
"gx/ipfs/QmT4U94DnD8FRfqr21obWY32HLM5VExccPKMjQHofeYqr9/go-multiaddr"
"gx/ipfs/QmTRhk7cgjUf2gfQ3p2M9KPECNZEW9XUrmHcFCgog4cPgB/go-libp2p-peer"
pstore
"gx/ipfs/QmTTJcDL3gsnGDALjh2fDGg1onGRUdVgNL2hU2WEZcVrMX/go-libp2p-peerstore"
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
cmdkit
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
)
const
kPingTimeout
=
10
*
time
.
Second
...
...
@@ -49,72 +48,52 @@ trip latency information.
Options
:
[]
cmdkit
.
Option
{
cmdkit
.
IntOption
(
pingCountOptionName
,
"n"
,
"Number of ping messages to send."
)
.
WithDefault
(
10
),
},
Marshalers
:
cmds
.
MarshalerMap
{
cmds
.
Text
:
func
(
res
cmds
.
Response
)
(
io
.
Reader
,
error
)
{
v
,
err
:=
unwrapOutput
(
res
.
Output
())
if
err
!=
nil
{
return
nil
,
err
}
obj
,
ok
:=
v
.
(
*
PingResult
)
if
!
ok
{
return
nil
,
u
.
ErrCast
()
}
buf
:=
new
(
bytes
.
Buffer
)
if
len
(
obj
.
Text
)
>
0
{
buf
=
bytes
.
NewBufferString
(
obj
.
Text
+
"
\n
"
)
}
else
if
obj
.
Success
{
fmt
.
Fprintf
(
buf
,
"Pong received: time=%.2f ms
\n
"
,
obj
.
Time
.
Seconds
()
*
1000
)
}
else
{
fmt
.
Fprintf
(
buf
,
"Pong failed
\n
"
)
}
return
buf
,
nil
},
},
Run
:
func
(
req
cmds
.
Request
,
res
cmds
.
Response
)
{
ctx
:=
req
.
Context
()
n
,
err
:=
req
.
InvocContext
()
.
GetNode
()
Run
:
func
(
req
*
cmds
.
Request
,
res
cmds
.
ResponseEmitter
,
env
cmds
.
Environment
)
error
{
n
,
err
:=
cmdenv
.
GetNode
(
env
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmdkit
.
ErrNormal
)
return
return
err
}
// Must be online!
if
!
n
.
OnlineMode
()
{
res
.
SetError
(
ErrNotOnline
,
cmdkit
.
ErrClient
)
return
return
ErrNotOnline
}
addr
,
peerID
,
err
:=
ParsePeerParam
(
req
.
Arguments
()
[
0
])
addr
,
peerID
,
err
:=
ParsePeerParam
(
req
.
Arguments
[
0
])
if
err
!=
nil
{
res
.
SetError
(
fmt
.
Errorf
(
"failed to parse peer address '%s': %s"
,
req
.
Arguments
()[
0
],
err
),
cmdkit
.
ErrNormal
)
return
return
fmt
.
Errorf
(
"failed to parse peer address '%s': %s"
,
req
.
Arguments
[
0
],
err
)
}
if
peerID
==
n
.
Identity
{
res
.
SetError
(
ErrPingSelf
,
cmdkit
.
ErrNormal
)
return
return
ErrPingSelf
}
if
addr
!=
nil
{
n
.
Peerstore
.
AddAddr
(
peerID
,
addr
,
pstore
.
TempAddrTTL
)
// temporary
}
numPings
,
_
,
err
:=
req
.
Option
(
pingCountOptionName
)
.
Int
()
if
err
!=
nil
{
res
.
SetError
(
err
,
cmdkit
.
ErrNormal
)
return
}
numPings
,
_
:=
req
.
Options
[
pingCountOptionName
]
.
(
int
)
if
numPings
<=
0
{
re
s
.
SetError
(
fmt
.
Errorf
(
"error: ping count must be greater than 0, was %d"
,
numPings
),
cmdkit
.
ErrNormal
)
re
turn
fmt
.
Errorf
(
"error: ping count must be greater than 0, was %d"
,
numPings
)
}
outChan
:=
pingPeer
(
ctx
,
n
,
peerID
,
numPings
)
res
.
SetOutput
(
outChan
)
outChan
:=
pingPeer
(
req
.
Context
,
n
,
peerID
,
numPings
)
return
res
.
Emit
(
outChan
)
},
Type
:
PingResult
{},
Encoders
:
cmds
.
EncoderMap
{
cmds
.
Text
:
cmds
.
MakeTypedEncoder
(
func
(
req
*
cmds
.
Request
,
w
io
.
Writer
,
out
*
PingResult
)
error
{
if
len
(
out
.
Text
)
>
0
{
fmt
.
Fprintln
(
w
,
out
.
Text
)
}
else
if
out
.
Success
{
fmt
.
Fprintf
(
w
,
"Pong received: time=%.2f ms
\n
"
,
out
.
Time
.
Seconds
()
*
1000
)
}
else
{
fmt
.
Fprintf
(
w
,
"Pong failed
\n
"
)
}
return
nil
}),
},
}
func
pingPeer
(
ctx
context
.
Context
,
n
*
core
.
IpfsNode
,
pid
peer
.
ID
,
numPings
int
)
<-
chan
interface
{}
{
...
...
core/commands/root.go
浏览文件 @
b25c14f2
...
...
@@ -136,7 +136,7 @@ var rootSubcommands = map[string]*cmds.Command{
"name"
:
name
.
NameCmd
,
"object"
:
ocmd
.
ObjectCmd
,
"pin"
:
lgc
.
NewCommand
(
PinCmd
),
"ping"
:
lgc
.
NewCommand
(
PingCmd
)
,
"ping"
:
PingCmd
,
"p2p"
:
lgc
.
NewCommand
(
P2PCmd
),
"refs"
:
lgc
.
NewCommand
(
RefsCmd
),
"resolve"
:
ResolveCmd
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论