Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
4584bc8d
提交
4584bc8d
authored
10月 25, 2014
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
clean up core initialization
- less floating variables
上级
8cf22c06
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
39 行增加
和
57 行删除
+39
-57
core.go
core/core.go
+39
-57
没有找到文件。
core/core.go
浏览文件 @
4584bc8d
...
...
@@ -77,14 +77,11 @@ type IpfsNode struct {
}
// NewIpfsNode constructs a new IpfsNode based on the given config.
func
NewIpfsNode
(
cfg
*
config
.
Config
,
online
bool
)
(
*
IpfsNode
,
error
)
{
// derive this from a higher context.
// cancel if we need to fail early.
ctx
,
cancel
:=
context
.
WithCancel
(
context
.
TODO
())
func
NewIpfsNode
(
cfg
*
config
.
Config
,
online
bool
)
(
n
*
IpfsNode
,
err
error
)
{
success
:=
false
// flip to true after all sub-system inits succeed
defer
func
()
{
if
!
success
{
cancel
()
if
!
success
&&
n
!=
nil
{
n
.
Close
()
}
}()
...
...
@@ -92,94 +89,79 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) {
return
nil
,
fmt
.
Errorf
(
"configuration required"
)
}
d
,
err
:=
makeDatastore
(
cfg
.
Datastore
)
if
err
!=
nil
{
// derive this from a higher context.
ctx
:=
context
.
TODO
()
n
=
&
IpfsNode
{
Config
:
cfg
,
ContextCloser
:
ctxc
.
NewContextCloser
(
ctx
,
nil
),
}
// setup datastore.
if
n
.
Datastore
,
err
=
makeDatastore
(
cfg
.
Datastore
);
err
!=
nil
{
return
nil
,
err
}
peerstore
:=
peer
.
NewPeerstore
()
local
,
err
:=
initIdentity
(
cfg
,
peerstore
,
online
)
// setup peerstore + local peer identity
n
.
Peerstore
=
peer
.
NewPeerstore
()
n
.
Identity
,
err
=
initIdentity
(
n
.
Config
,
n
.
Peerstore
,
online
)
if
err
!=
nil
{
return
nil
,
err
}
// FIXME(brian): This is a bit dangerous. If any of the vars declared in
// this block are assigned inside of the "if online" block using the ":="
// declaration syntax, the compiler permits re-declaration. This is rather
// undesirable
var
(
net
inet
.
Network
// TODO: refactor so we can use IpfsRouting interface instead of being DHT-specific
route
*
dht
.
IpfsDHT
exchangeSession
exchange
.
Interface
diagnostics
*
diag
.
Diagnostics
network
inet
.
Network
)
// setup online services
if
online
{
dhtService
:=
netservice
.
NewService
(
ctx
,
nil
)
// nil handler for now, need to patch it
exchangeService
:=
netservice
.
NewService
(
ctx
,
nil
)
// nil handler for now, need to patch it
diagService
:=
netservice
.
NewService
(
ctx
,
nil
)
diagService
:=
netservice
.
NewService
(
ctx
,
nil
)
// nil handler for now, need to patch it
net
,
err
=
inet
.
NewIpfsNetwork
(
ctx
,
local
,
peerstore
,
&
mux
.
ProtocolMap
{
muxMap
:=
&
mux
.
ProtocolMap
{
mux
.
ProtocolID_Routing
:
dhtService
,
mux
.
ProtocolID_Exchange
:
exchangeService
,
mux
.
ProtocolID_Diagnostic
:
diagService
,
// add protocol services here.
})
}
// setup the network
n
.
Network
,
err
=
inet
.
NewIpfsNetwork
(
ctx
,
n
.
Identity
,
n
.
Peerstore
,
muxMap
)
if
err
!=
nil
{
return
nil
,
err
}
n
etwork
=
net
n
.
AddCloserChild
(
n
.
Network
)
diagnostics
=
diag
.
NewDiagnostics
(
local
,
net
,
diagService
)
diagService
.
SetHandler
(
diagnostics
)
// setup diagnostics service
n
.
Diagnostics
=
diag
.
NewDiagnostics
(
n
.
Identity
,
n
.
Network
,
diagService
)
diagService
.
SetHandler
(
n
.
Diagnostics
)
route
=
dht
.
NewDHT
(
ctx
,
local
,
peerstore
,
net
,
dhtService
,
d
)
// setup routing service
dhtRouting
:=
dht
.
NewDHT
(
ctx
,
n
.
Identity
,
n
.
Peerstore
,
n
.
Network
,
dhtService
,
n
.
Datastore
)
// TODO(brian): perform this inside NewDHT factory method
dhtService
.
SetHandler
(
route
)
// wire the handler to the service.
dhtService
.
SetHandler
(
dhtRouting
)
// wire the handler to the service.
n
.
Routing
=
dhtRouting
// setup exchange service
const
alwaysSendToPeer
=
true
// use YesManStrategy
exchangeSession
=
bitswap
.
NetMessageSession
(
ctx
,
local
,
net
,
exchangeService
,
route
,
d
,
alwaysSendToPeer
)
n
.
Exchange
=
bitswap
.
NetMessageSession
(
ctx
,
n
.
Identity
,
n
.
Network
,
exchangeService
,
n
.
Routing
,
n
.
Datastore
,
alwaysSendToPeer
)
// ok, this function call is ridiculous o/ consider making it simpler.
// TODO(brian): pass a context to initConnections
go
initConnections
(
ctx
,
cfg
,
peerstore
,
route
)
go
initConnections
(
ctx
,
n
.
Config
,
n
.
Peerstore
,
dhtRouting
)
}
// TODO(brian): when offline instantiate the BlockService with a bitswap
// session that simply doesn't return blocks
bs
,
err
:=
bserv
.
NewBlockService
(
d
,
exchangeSession
)
n
.
Blocks
,
err
=
bserv
.
NewBlockService
(
n
.
Datastore
,
n
.
Exchange
)
if
err
!=
nil
{
return
nil
,
err
}
dag
:=
merkledag
.
NewDAGService
(
b
s
)
n
s
:=
namesys
.
NewNameSystem
(
route
)
p
,
err
:=
pin
.
LoadPinner
(
d
,
dag
)
n
.
DAG
=
merkledag
.
NewDAGService
(
n
.
Block
s
)
n
.
Namesys
=
namesys
.
NewNameSystem
(
n
.
Routing
)
n
.
Pinning
,
err
=
pin
.
LoadPinner
(
n
.
Datastore
,
n
.
DAG
)
if
err
!=
nil
{
p
=
pin
.
NewPinner
(
d
,
dag
)
n
.
Pinning
=
pin
.
NewPinner
(
n
.
Datastore
,
n
.
DAG
)
}
success
=
true
n
:=
&
IpfsNode
{
Config
:
cfg
,
Peerstore
:
peerstore
,
Datastore
:
d
,
Blocks
:
bs
,
DAG
:
dag
,
Resolver
:
&
path
.
Resolver
{
DAG
:
dag
},
Exchange
:
exchangeSession
,
Identity
:
local
,
Routing
:
route
,
Namesys
:
ns
,
Diagnostics
:
diagnostics
,
Network
:
network
,
Pinning
:
p
,
ContextCloser
:
ctxc
.
NewContextCloser
(
ctx
,
nil
),
}
n
.
AddCloserChild
(
n
.
Network
)
return
n
,
nil
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论