devp2p 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/devp2p.rb +14 -29
- data/lib/devp2p/app.rb +70 -0
- data/lib/devp2p/command.rb +1 -1
- data/lib/devp2p/connection_monitor.rb +27 -21
- data/lib/devp2p/discovery.rb +1 -1
- data/lib/devp2p/discovery/protocol.rb +2 -2
- data/lib/devp2p/discovery/service.rb +108 -49
- data/lib/devp2p/p2p_protocol.rb +9 -9
- data/lib/devp2p/peer.rb +53 -59
- data/lib/devp2p/peer_manager.rb +77 -39
- data/lib/devp2p/{base_protocol.rb → protocol.rb} +19 -17
- data/lib/devp2p/service.rb +50 -0
- data/lib/devp2p/sync_queue.rb +58 -45
- data/lib/devp2p/version.rb +2 -1
- data/lib/devp2p/wired_service.rb +3 -3
- metadata +19 -35
- data/lib/devp2p/app_helper.rb +0 -85
- data/lib/devp2p/base_app.rb +0 -88
- data/lib/devp2p/base_service.rb +0 -55
- data/lib/devp2p/control.rb +0 -32
data/lib/devp2p/base_app.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
# -*- encoding : ascii-8bit -*-
|
2
|
-
require 'hashie'
|
3
|
-
|
4
|
-
module DEVp2p
|
5
|
-
class BaseApp
|
6
|
-
|
7
|
-
extend Configurable
|
8
|
-
add_config(
|
9
|
-
default_config: {
|
10
|
-
client_version_string: "ruby-devp2p #{VersionString}",
|
11
|
-
deactivated_services: []
|
12
|
-
}
|
13
|
-
)
|
14
|
-
|
15
|
-
attr :config, :services
|
16
|
-
|
17
|
-
def initialize(config=default_config)
|
18
|
-
@config = Utils.update_config_with_defaults config, default_config
|
19
|
-
@container = Celluloid::Supervision::Container.new
|
20
|
-
@services = Hashie::Mash.new
|
21
|
-
end
|
22
|
-
|
23
|
-
##
|
24
|
-
# Registers protocol with app, which will be accessible as
|
25
|
-
# `app.services.<protocol_name>` (e.g. `app.services.p2p` or
|
26
|
-
# `app.services.eth`)
|
27
|
-
#
|
28
|
-
def register_service(klass, *args)
|
29
|
-
raise ArgumentError, "service must be instance of BaseService" unless klass.instance_of?(Class) && klass < BaseService
|
30
|
-
raise ArgumentError, "service #{klass.name} already registered" if services.has_key?(klass.name)
|
31
|
-
|
32
|
-
logger.info "registering service", service: klass.name
|
33
|
-
@container.add type: klass, as: get_actor_name(klass.name), args: args
|
34
|
-
services[klass.name] = actor(klass.name)
|
35
|
-
|
36
|
-
klass
|
37
|
-
end
|
38
|
-
|
39
|
-
##
|
40
|
-
# Terminate service instance, remove it from registry.
|
41
|
-
#
|
42
|
-
def deregister_service(klass)
|
43
|
-
raise ArgumentError, "service must be instance of BaseService" unless klass.instance_of?(Class) && klass < BaseService
|
44
|
-
raise ArgumentError, "service #{klass.name} not registered" unless services.has_key?(klass.name)
|
45
|
-
|
46
|
-
logger.info "deregistering service", service: klass.name
|
47
|
-
@container.remove actor(klass.name)
|
48
|
-
services.delete klass.name
|
49
|
-
|
50
|
-
klass
|
51
|
-
end
|
52
|
-
|
53
|
-
def start
|
54
|
-
services.each_value do |service|
|
55
|
-
service.start if service.stopped?
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def stop
|
60
|
-
services.each_value do |service|
|
61
|
-
service.stop if service.alive?
|
62
|
-
end
|
63
|
-
|
64
|
-
#@container.shutdown
|
65
|
-
end
|
66
|
-
|
67
|
-
def join
|
68
|
-
@services.each_value do |service|
|
69
|
-
Celluloid::Actor.join service
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
private
|
74
|
-
|
75
|
-
def logger
|
76
|
-
@logger ||= Logger.new 'app'
|
77
|
-
end
|
78
|
-
|
79
|
-
def actor(name)
|
80
|
-
Celluloid::Actor[get_actor_name(name)]
|
81
|
-
end
|
82
|
-
|
83
|
-
def get_actor_name(service_name)
|
84
|
-
"#{object_id}_#{service_name}"
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
end
|
data/lib/devp2p/base_service.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# -*- encoding : ascii-8bit -*-
|
2
|
-
module DEVp2p
|
3
|
-
|
4
|
-
##
|
5
|
-
# Service instances are added to the application under
|
6
|
-
# `app.services.<service_name>`.
|
7
|
-
#
|
8
|
-
# App should be passed to the service in order to query other services.
|
9
|
-
#
|
10
|
-
# Services must be an actor. If a service spawns additional services, it's
|
11
|
-
# responsible to stop them.
|
12
|
-
#
|
13
|
-
class BaseService
|
14
|
-
include Celluloid
|
15
|
-
#finalizer :stop
|
16
|
-
include Control
|
17
|
-
|
18
|
-
extend Configurable
|
19
|
-
add_config(
|
20
|
-
name: '',
|
21
|
-
default_config: {name: {}},
|
22
|
-
required_services: []
|
23
|
-
)
|
24
|
-
|
25
|
-
class <<self
|
26
|
-
##
|
27
|
-
# Services know best how to initiate themselves. Create a service
|
28
|
-
# instance, probably based on `app.config` and `app.services`.
|
29
|
-
#
|
30
|
-
def register_with_app(app)
|
31
|
-
app.register_service self, app
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
attr :app, :config
|
36
|
-
|
37
|
-
def initialize(app)
|
38
|
-
@app = app
|
39
|
-
@config = Utils.update_config_with_defaults app.config, default_config
|
40
|
-
|
41
|
-
initialize_control
|
42
|
-
|
43
|
-
available_services = app.services.each_value.map(&:class)
|
44
|
-
required_services.each do |r|
|
45
|
-
raise MissingRequiredServiceError, "require service #{r}" unless available_services.include?(r)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def to_s
|
50
|
-
"<Service #{name}##{object_id}>"
|
51
|
-
end
|
52
|
-
alias inspect to_s
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
data/lib/devp2p/control.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module DEVp2p
|
2
|
-
module Control
|
3
|
-
|
4
|
-
def initialize_control
|
5
|
-
@stopped = true
|
6
|
-
@killed = false
|
7
|
-
end
|
8
|
-
|
9
|
-
def run
|
10
|
-
_run
|
11
|
-
end
|
12
|
-
|
13
|
-
def start
|
14
|
-
@stopped = false
|
15
|
-
async.run unless killed?
|
16
|
-
end
|
17
|
-
|
18
|
-
def stop
|
19
|
-
@stopped = true
|
20
|
-
@killed = true
|
21
|
-
end
|
22
|
-
|
23
|
-
def stopped?
|
24
|
-
@stopped
|
25
|
-
end
|
26
|
-
|
27
|
-
def killed?
|
28
|
-
@killed
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|