Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
07500964
提交
07500964
authored
7月 08, 2014
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
swarm connection using msgio
http://github.com/jbenet/msgio
上级
3588f5ad
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
174 行增加
和
0 行删除
+174
-0
conn.go
swarm/conn.go
+72
-0
conn_test.go
swarm/conn_test.go
+93
-0
swarm.go
swarm/swarm.go
+9
-0
没有找到文件。
swarm/conn.go
0 → 100644
浏览文件 @
07500964
package
swarm
import
(
"fmt"
"net"
ma
"github.com/jbenet/go-multiaddr"
peer
"github.com/jbenet/go-ipfs/peer"
msgio
"github.com/jbenet/go-msgio"
)
const
ChanBuffer
=
10
type
Conn
struct
{
Peer
*
peer
.
Peer
Addr
*
ma
.
Multiaddr
Conn
net
.
Conn
Closed
chan
bool
Outgoing
*
msgio
.
Chan
Incoming
*
msgio
.
Chan
}
func
Dial
(
network
string
,
peer
*
peer
.
Peer
)
(
*
Conn
,
error
)
{
addr
:=
peer
.
NetAddress
(
network
)
if
addr
==
nil
{
return
nil
,
fmt
.
Errorf
(
"No address for network %s"
,
network
)
}
network
,
host
,
err
:=
addr
.
DialArgs
()
if
err
!=
nil
{
return
nil
,
err
}
nconn
,
err
:=
net
.
Dial
(
network
,
host
)
if
err
!=
nil
{
return
nil
,
err
}
out
:=
msgio
.
NewChan
(
10
)
inc
:=
msgio
.
NewChan
(
10
)
conn
:=
&
Conn
{
Peer
:
peer
,
Addr
:
addr
,
Conn
:
nconn
,
Outgoing
:
out
,
Incoming
:
inc
,
Closed
:
make
(
chan
bool
,
1
),
}
go
out
.
WriteTo
(
nconn
)
go
inc
.
ReadFrom
(
nconn
,
1
<<
12
)
return
conn
,
nil
}
func
(
s
*
Conn
)
Close
()
error
{
if
s
.
Conn
==
nil
{
return
fmt
.
Errorf
(
"Already closed."
)
// already closed
}
// closing net connection
err
:=
s
.
Conn
.
Close
()
s
.
Conn
=
nil
// closing channels
s
.
Incoming
.
Close
()
s
.
Outgoing
.
Close
()
s
.
Closed
<-
true
return
err
}
swarm/conn_test.go
0 → 100644
浏览文件 @
07500964
package
swarm
import
(
"fmt"
"net"
"testing"
ma
"github.com/jbenet/go-multiaddr"
mh
"github.com/jbenet/go-multihash"
peer
"github.com/jbenet/go-ipfs/peer"
)
func
setupPeer
(
id
string
,
addr
string
)
(
*
peer
.
Peer
,
error
)
{
tcp
,
err
:=
ma
.
NewMultiaddr
(
addr
)
if
err
!=
nil
{
return
nil
,
err
}
mh
,
err
:=
mh
.
FromHexString
(
id
)
if
err
!=
nil
{
return
nil
,
err
}
p
:=
&
peer
.
Peer
{
Id
:
peer
.
PeerId
(
mh
)}
p
.
AddAddress
(
tcp
)
return
p
,
nil
}
func
echoListen
(
listener
*
net
.
TCPListener
)
{
for
{
c
,
err
:=
listener
.
Accept
()
if
err
==
nil
{
fmt
.
Println
(
"accepeted"
)
go
echo
(
c
)
}
}
}
func
echo
(
c
net
.
Conn
)
{
for
{
data
:=
make
([]
byte
,
1024
)
i
,
err
:=
c
.
Read
(
data
)
if
err
!=
nil
{
fmt
.
Printf
(
"error %v
\n
"
,
err
)
return
}
_
,
err
=
c
.
Write
(
data
[
:
i
])
if
err
!=
nil
{
fmt
.
Printf
(
"error %v
\n
"
,
err
)
return
}
fmt
.
Println
(
"echoing"
,
data
[
:
i
])
}
}
func
TestDial
(
t
*
testing
.
T
)
{
listener
,
err
:=
net
.
Listen
(
"tcp"
,
"127.0.0.1:1234"
)
if
err
!=
nil
{
t
.
Fatal
(
"error setting up listener"
,
err
)
}
go
echoListen
(
listener
.
(
*
net
.
TCPListener
))
p
,
err
:=
setupPeer
(
"11140beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
,
"/ip4/127.0.0.1/tcp/1234"
)
if
err
!=
nil
{
t
.
Fatal
(
"error setting up peer"
,
err
)
}
c
,
err
:=
Dial
(
"tcp"
,
p
)
if
err
!=
nil
{
t
.
Fatal
(
"error dialing peer"
,
err
)
}
fmt
.
Println
(
"sending"
)
c
.
Outgoing
.
MsgChan
<-
[]
byte
(
"beep"
)
c
.
Outgoing
.
MsgChan
<-
[]
byte
(
"boop"
)
out
:=
<-
c
.
Incoming
.
MsgChan
fmt
.
Println
(
"recving"
,
string
(
out
))
if
string
(
out
)
!=
"beep"
{
t
.
Error
(
"unexpected conn output"
)
}
out
=
<-
c
.
Incoming
.
MsgChan
if
string
(
out
)
!=
"boop"
{
t
.
Error
(
"unexpected conn output"
)
}
fmt
.
Println
(
"closing"
)
c
.
Close
()
listener
.
Close
()
}
swarm/swarm.go
0 → 100644
浏览文件 @
07500964
package
swarm
import
(
)
type
Swarm
struct
{
Conns
map
[
string
]
*
Conn
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论