zactor 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -5,11 +5,12 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 4
9
- version: 0.0.4
8
+ - 5
9
+ version: 0.0.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Andrew Rudenko
13
+ - Nick Recobra
13
14
  autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
@@ -18,7 +19,7 @@ date: 2011-03-24 00:00:00 +03:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- name: ffi
22
+ name: activesupport
22
23
  requirement: &id001 !ruby/object:Gem::Requirement
23
24
  none: false
24
25
  requirements:
@@ -32,21 +33,8 @@ dependencies:
32
33
  prerelease: false
33
34
  version_requirements: *id001
34
35
  - !ruby/object:Gem::Dependency
35
- name: ruby-interface
36
+ name: i18n
36
37
  requirement: &id002 !ruby/object:Gem::Requirement
37
- none: false
38
- requirements:
39
- - - ">"
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
- version: "0"
44
- type: :runtime
45
- prerelease: false
46
- version_requirements: *id002
47
- - !ruby/object:Gem::Dependency
48
- name: ffi-rzmq
49
- requirement: &id003 !ruby/object:Gem::Requirement
50
38
  none: false
51
39
  requirements:
52
40
  - - ">"
@@ -57,64 +45,8 @@ dependencies:
57
45
  version: "0.1"
58
46
  type: :runtime
59
47
  prerelease: false
60
- version_requirements: *id003
61
- - !ruby/object:Gem::Dependency
62
- name: em-zeromq
63
- requirement: &id004 !ruby/object:Gem::Requirement
64
- none: false
65
- requirements:
66
- - - ">"
67
- - !ruby/object:Gem::Version
68
- segments:
69
- - 0
70
- - 1
71
- version: "0.1"
72
- type: :runtime
73
- prerelease: false
74
- version_requirements: *id004
75
- - !ruby/object:Gem::Dependency
76
- name: bson
77
- requirement: &id005 !ruby/object:Gem::Requirement
78
- none: false
79
- requirements:
80
- - - ">"
81
- - !ruby/object:Gem::Version
82
- segments:
83
- - 0
84
- - 1
85
- version: "0.1"
86
- type: :runtime
87
- prerelease: false
88
- version_requirements: *id005
89
- - !ruby/object:Gem::Dependency
90
- name: bson_ext
91
- requirement: &id006 !ruby/object:Gem::Requirement
92
- none: false
93
- requirements:
94
- - - ">"
95
- - !ruby/object:Gem::Version
96
- segments:
97
- - 0
98
- - 1
99
- version: "0.1"
100
- type: :runtime
101
- prerelease: false
102
- version_requirements: *id006
103
- - !ruby/object:Gem::Dependency
104
- name: activesupport
105
- requirement: &id007 !ruby/object:Gem::Requirement
106
- none: false
107
- requirements:
108
- - - ">"
109
- - !ruby/object:Gem::Version
110
- segments:
111
- - 0
112
- - 1
113
- version: "0.1"
114
- type: :runtime
115
- prerelease: false
116
- version_requirements: *id007
117
- description: Zactor
48
+ version_requirements: *id002
49
+ description: Ruby interface
118
50
  email: ceo@prepor.ru
119
51
  executables: []
120
52
 
@@ -125,32 +57,18 @@ extra_rdoc_files: []
125
57
  files:
126
58
  - .document
127
59
  - .gitignore
128
- - .rake_tasks~
129
60
  - .rspec
130
- - .yardopts
131
61
  - Gemfile
132
62
  - Gemfile.lock
133
- - Guardfile
134
63
  - LICENSE.txt
135
64
  - README.md
136
65
  - Rakefile
137
- - VERSION
138
- - examples/chat/client.rb
139
- - examples/chat/server.rb
140
- - examples/ping/inproc.rb
141
- - lib/zactor.rb
142
- - lib/zactor/actor_pub.rb
143
- - lib/zactor/actor_sub.rb
144
- - lib/zactor/broker.rb
145
- - lib/zactor/log_subscriber.rb
146
- - lib/zactor/message.rb
147
- - lib/zactor/version.rb
148
- - spec/lib/actor_spec.rb
149
- - spec/lib/exchange_spec.rb
150
- - spec/lib/link_spec.rb
151
- - spec/lib/zactor_spec.rb
66
+ - lib/ruby-interface/version.rb
67
+ - lib/ruby-interface/yard.rb
68
+ - lib/ruby_interface.rb
69
+ - ruby-interface.gemspec
70
+ - spec/ruby_interface_spec.rb
152
71
  - spec/spec_helper.rb
153
- - zactor.gemspec
154
72
  has_rdoc: true
155
73
  homepage:
156
74
  licenses: []
@@ -165,7 +83,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
83
  requirements:
166
84
  - - ">="
167
85
  - !ruby/object:Gem::Version
168
- hash: -4054841788636265293
86
+ hash: -442756119075028289
169
87
  segments:
170
88
  - 0
171
89
  version: "0"
@@ -183,10 +101,7 @@ rubyforge_project:
183
101
  rubygems_version: 1.3.7
184
102
  signing_key:
185
103
  specification_version: 3
186
- summary: Zactor
104
+ summary: Ruby interface
187
105
  test_files:
188
- - spec/lib/actor_spec.rb
189
- - spec/lib/exchange_spec.rb
190
- - spec/lib/link_spec.rb
191
- - spec/lib/zactor_spec.rb
106
+ - spec/ruby_interface_spec.rb
192
107
  - spec/spec_helper.rb
data/.rake_tasks~ DELETED
@@ -1,19 +0,0 @@
1
- build
2
- console[script]
3
- gemcutter:release
4
- gemspec
5
- gemspec:debug
6
- gemspec:generate
7
- gemspec:release
8
- gemspec:validate
9
- git:release
10
- install
11
- rcov
12
- release
13
- spec
14
- version
15
- version:bump:major
16
- version:bump:minor
17
- version:bump:patch
18
- version:write
19
- yard
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- -m markdown -e ruby-interface/yard
data/Guardfile DELETED
@@ -1,12 +0,0 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
3
-
4
- guard 'rspec', :version => 2 do
5
- watch(/^spec\/(.*)_spec.rb/)
6
- watch(/^lib\/(.*)\.rb/) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
- watch(/^spec\/spec_helper.rb/) { "spec" }
8
-
9
- # watch(/^lib\/zactor.rb/) { "spec/lib/actor_spec.rb" }
10
-
11
- watch(/^app\/(.*)\.rb/) { |m| "spec/app/#{m[1]}_spec.rb" }
12
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.0.3
@@ -1,88 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # ruby client.rb SELF_PORT SERVER LOGIN
4
- # ruby client.rb 6001 0.0.0.0:8000 lolo
5
- require 'bundler'
6
- ENV['BUNDLE_GEMFILE'] = File.join(File.dirname(__FILE__), '..', '..', 'Gemfile')
7
-
8
- Bundler.setup(:default)
9
-
10
- require 'zactor'
11
- class Client
12
- include Zactor
13
-
14
- zactor do
15
- event(:message) do |o, msg, text|
16
- puts text
17
- end
18
- end
19
-
20
- def initialize(login)
21
- @login = login
22
- @persons = {}
23
- end
24
-
25
- def start(server)
26
- zactor.init
27
- @server = Zactor.get_actor("server", :host => server)
28
- connect
29
- end
30
-
31
- def connect
32
- puts "Подключаемся"
33
- zactor.send_request(@server, :new_client, @login) do
34
- puts "Поключились!"
35
- zactor.link(@server) { connect }
36
- end.timeout(5) { puts "Проблемы с подключением..." }
37
- end
38
-
39
- def send_message(text)
40
- if text =~ /(\w+) -> (.+)/
41
- send_personal($1, $2)
42
- else
43
- zactor.send_request(@server, :message, text)
44
- end
45
- end
46
-
47
- def send_personal(login, text)
48
- if client = @persons[login]
49
- zactor.send_request(client, :message, "(personally) #{@login}:" + "#{text}")
50
- else
51
- zactor.send_request(@server, :client_request, login) do |res, client|
52
- case res
53
- when :ok
54
- @persons[login] = client
55
- zactor.link(client) { @persons.delete login }
56
- zactor.send_request(client, :message, "(personally) #{@login}:" + "#{text}")
57
- else
58
- puts "Ошибка отправки сообщения"
59
- end
60
- end
61
- end
62
- end
63
-
64
- def stop
65
- zactor.finish
66
- EM.stop
67
- end
68
-
69
- module KeyboardInput
70
- include EM::Protocols::LineText2
71
- attr_accessor :client
72
- def receive_line(data)
73
- client.send_message data
74
- end
75
- end
76
-
77
- end
78
-
79
- client = Client.new ARGV[2]
80
-
81
- Signal.trap('INT') { client.stop }
82
- Signal.trap('TERM') { client.stop }
83
-
84
- EM.run do
85
- Zactor.start ARGV[0]#, :debug => true
86
- client.start ARGV[1]
87
- EM.open_keyboard(Client::KeyboardInput) { |c| c.client = client }
88
- end
@@ -1,59 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # ruby server.rb PORT
4
- # ruby server.rb 8000
5
- require 'bundler'
6
- ENV['BUNDLE_GEMFILE'] = File.join(File.dirname(__FILE__), '..', '..', 'Gemfile')
7
- Bundler.setup(:default)
8
-
9
- require 'zactor'
10
-
11
- class Server
12
- include Zactor
13
-
14
- zactor do
15
- identity "server"
16
-
17
- event(:new_client) do |o, msg, login|
18
- o.new_client msg.sender, login
19
- msg.reply :ok
20
- end
21
-
22
- event(:client_request) do |o, msg, login|
23
- if client = o.clients.detect { |k, v| v == login }
24
- msg.reply :ok, client.first
25
- else
26
- msg.reply :error
27
- end
28
- end
29
-
30
- event(:message) do |o, msg, text|
31
- o.send_message msg.sender, text
32
- end
33
- end
34
-
35
- attr_accessor :clients
36
- def initialize
37
- zactor.init
38
- @clients = {}
39
- end
40
-
41
- def new_client(client, login)
42
- @clients[client] = login
43
- send_message client, "присоединился"
44
- zactor.link client do
45
- send_message client, "отсоединился"
46
- clients.delete client
47
- end
48
- end
49
-
50
- def send_message(from, message)
51
- (clients.keys - [from]).each { |c| zactor.send_request c, :message, "#{clients[from]}: #{message}"}
52
- end
53
- end
54
-
55
- EM.run do
56
- Zactor.start ARGV[0]#, :debug => true
57
- Server.new
58
- puts "Server started"
59
- end
@@ -1,50 +0,0 @@
1
- require "rubygems"
2
- require "bundler"
3
-
4
- ENV['BUNDLE_GEMFILE'] = File.join(File.dirname(__FILE__), '..', '..', 'Gemfile')
5
-
6
- Bundler.setup(:default, :development)
7
-
8
- require 'zactor'
9
- require 'eventmachine'
10
-
11
- class A
12
- include Zactor
13
-
14
- def initialize
15
- zactor.init
16
- ping Zactor.get_actor("b")
17
- end
18
-
19
- def ping(actor)
20
- puts "Ping!"
21
- zactor.send_request actor, :ping do |res|
22
- puts res
23
- end
24
- end
25
- end
26
-
27
-
28
- class B
29
- include Zactor
30
-
31
- zactor do
32
- identity "b"
33
-
34
- event(:ping) do |o, msg|
35
- msg.reply "Pong!"
36
- end
37
- end
38
-
39
- def initialize
40
- zactor.init
41
- end
42
-
43
- end
44
-
45
- EM.run do
46
- Zactor.start 8000
47
-
48
- a = A.new
49
- b = B.new
50
- end
@@ -1,19 +0,0 @@
1
- module Zactor
2
- class ActorPub
3
- include ZMQMEssages
4
-
5
- attr_accessor :actor
6
- def initialize(actor, endpoint)
7
- Zactor.logger.debug "ZactorPub (#{actor.actor}): starting"
8
- @actor = actor
9
- @connection = Zactor.zmq.connect ZMQ::PUB, endpoint, self
10
- @socket = @connection.socket
11
- end
12
-
13
- def close
14
- @connection.unbind
15
- rescue
16
- end
17
- end
18
-
19
- end
@@ -1,46 +0,0 @@
1
- module Zactor
2
- class ActorSub
3
- attr_accessor :actor
4
- def initialize(actor)
5
- Zactor.logger.debug "ZactorSub (#{actor.actor}): starting"
6
- @actor = actor
7
- @connection = Zactor.zmq.connect ZMQ::SUB, "inproc://zactor_broker_pub", self
8
- @connection.subscribe actor.actor['identity']
9
- end
10
-
11
- def on_readable(socket, messages)
12
- @connection.notify_readable = true
13
- Zactor.logger.debug "ZactorSub for #{actor.actor}: Messages!"
14
- to = messages.shift
15
- sender = messages.shift
16
- case messages.shift.copy_out_string
17
- when "reply"
18
- reply messages
19
- when "request"
20
- request sender, messages
21
- end
22
- end
23
-
24
- def request(sender_mes, messages)
25
- Zactor.logger.debug "ZactorSub for #{actor.actor}: request!"
26
- sender = BSON.deserialize(sender_mes.copy_out_string)
27
- callback_id = messages[0].copy_out_string
28
- event = messages[1].copy_out_string
29
- args = BSON.deserialize(messages[2].copy_out_string)['args']
30
- actor.receive_request sender, event, callback_id, *args
31
- end
32
-
33
- def reply(messages)
34
- Zactor.logger.debug "ZactorSub for #{actor.actor}: reply!"
35
- callback_id = messages[0].copy_out_string
36
- if callback_id != ''
37
- actor.receive_reply callback_id, *BSON.deserialize(messages[1].copy_out_string)['args']
38
- end
39
- end
40
-
41
- def close
42
- @connection.unbind
43
- rescue
44
- end
45
- end
46
- end
data/lib/zactor/broker.rb DELETED
@@ -1,71 +0,0 @@
1
- module Zactor
2
- class BrokerIn
3
- attr_accessor :broker, :params
4
- def initialize(broker, params = {})
5
- @broker = broker
6
- @params = params
7
- init_connection
8
- end
9
-
10
- def on_readable(socket, messages)
11
- Zactor.logger.debug "Broker: messages"
12
- @broker.pub.request messages
13
- end
14
-
15
- def close
16
- @connection.unbind
17
- rescue
18
- end
19
- end
20
-
21
- class BrokerPub
22
- include ZMQMEssages
23
- def initialize(broker)
24
- @broker = broker
25
- @connection = Zactor.zmq.bind ZMQ::PUB, "inproc://zactor_broker_pub", self
26
- @socket = @connection.socket
27
- end
28
-
29
- def request(messages)
30
- Zactor.logger.debug { "Broker: request #{messages.map(&:copy_out_string).inspect}" }
31
- send_messages messages
32
- end
33
-
34
- def close
35
- @connection.unbind
36
- rescue
37
- end
38
- end
39
-
40
- class BrokerSub < BrokerIn
41
- def init_connection
42
- Zactor.logger.info "Starting sub broker tcp://0.0.0.0:#{Zactor.broker_port}"
43
- @connection = Zactor.zmq.bind ZMQ::SUB, "tcp://0.0.0.0:#{Zactor.broker_port}", self
44
- @connection.bind "inproc://zactor_broker_sub"
45
- @connection.subscribe ''
46
- end
47
- end
48
-
49
- class BrokerPull < BrokerIn
50
- def init_connection
51
- Zactor.logger.info "Starting pull broker tcp://#{params[:host]}"
52
- @connection = Zactor.zmq.connect ZMQ::PULL, "tcp://#{params[:host]}", self
53
- end
54
- end
55
-
56
- class Broker
57
- attr_accessor :sub, :pub
58
- def initialize(params = {})
59
- Zactor.logger.info "Broker: starting"
60
- @pub = BrokerPub.new self
61
- @subs = []
62
- @subs << BrokerSub.new(self)
63
- @subs << BrokerPull.new(self, :host => params[:balancer]) if params[:balancer]
64
- end
65
-
66
- def finish
67
- @pub.close
68
- @subs.each(&:close)
69
- end
70
- end
71
- end
@@ -1,25 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require 'active_support/log_subscriber'
3
- module Zactor
4
- class LogSubscriber < ActiveSupport::LogSubscriber
5
- def logger
6
- Zactor.logger
7
- end
8
-
9
- def merge(event)
10
- payload = event.payload
11
-
12
- message = "[Zactor](%.0fms) sending request '#{payload[:event]}' to '#{payload[:actor]}'' with params #{paylaod[:args].inspect}" % event.duration
13
- debug message
14
- end
15
-
16
- def send_to(event)
17
- payload = event.payload
18
-
19
- message = "[Zactor] sending messages to '#{payload[:actor]}'" % event.duration
20
- debug message
21
- end
22
- end
23
- end
24
-
25
- Zactor::LogSubscriber.attach_to :zactor
@@ -1,23 +0,0 @@
1
- module Zactor
2
- class Message
3
- attr_accessor :actor, :params
4
- attr_accessor :callback_id, :args
5
- def initialize(actor, params = {})
6
- @actor = actor
7
- @params = params
8
- end
9
-
10
- def sender
11
- params[:sender]
12
- end
13
-
14
- def args
15
- params[:args]
16
- end
17
-
18
- def reply(*args)
19
- return false unless params[:callback_id]
20
- actor.send_reply sender, params[:callback_id], *args
21
- end
22
- end
23
- end
@@ -1,3 +0,0 @@
1
- module Zactor
2
- VERSION = "0.0.4"
3
- end