ara 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -51,6 +51,51 @@ Because of akka[http://akka.io/] and my two parakeets ;)
51
51
  sleep 1
52
52
  end
53
53
 
54
+ === Create remote actor
55
+
56
+ Server :
57
+
58
+ # Server
59
+ require 'ara'
60
+
61
+ class SimpleMessage < Actor
62
+ def receive(message)
63
+ reply "@ #{Time.now} : Hello #{message}"
64
+ end
65
+ end
66
+
67
+ Ara::Remote.server("localhost", 9292).register("simple_actor", Actors.actor_of(SimpleMessage)).start
68
+
69
+ Client :
70
+
71
+ # Client
72
+ require 'ara'
73
+
74
+ actor = Actors.actor_for("simple_actor", "localhost", 9292)
75
+ puts actor << "World"
76
+
77
+ === Use scheduler
78
+
79
+ require 'ara'
80
+
81
+ class MySimpleActor < SimpleActor
82
+ def receive( message )
83
+ puts "Actor #{self} receive message : #{message}"
84
+ end
85
+ end
86
+
87
+ my_actor = Actors.actor_of(MySimpleActor).start
88
+
89
+ my_scheduler = Scheduler.schedule(my_actor, "Hello World! (every 1 second)", 1, 1, Scheduler::SECOND)
90
+
91
+ sleep 10
92
+
93
+ my_scheduler.shutdown
94
+ puts "-- Scheduler has been shutdown! We wait 5 second to be sure ;)"
95
+
96
+ sleep 5
97
+
98
+ my_actor.stop
54
99
 
55
100
  == Changelog
56
101
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ara}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gregoire Lejeune"]
12
- s.date = %q{2011-07-14}
12
+ s.date = %q{2011-07-15}
13
13
  s.description = %q{Ara is a tiny class that’s allow you to use actors in Ruby}
14
14
  s.email = %q{gregoire.lejeune@free.fr}
15
15
  s.extra_rdoc_files = [
@@ -36,11 +36,15 @@ Gem::Specification.new do |s|
36
36
  "examples/simple_scheduler.rb",
37
37
  "examples/sync_actor.rb",
38
38
  "examples/test_actor.rb",
39
+ "examples/ws-client.rb",
40
+ "examples/ws.rb",
39
41
  "lib/ara.rb",
40
42
  "lib/ara/actor.rb",
41
43
  "lib/ara/actors.rb",
42
44
  "lib/ara/exception.rb",
43
45
  "lib/ara/logger.rb",
46
+ "lib/ara/remote.rb",
47
+ "lib/ara/remote_actor.rb",
44
48
  "lib/ara/scheduler.rb",
45
49
  "lib/ara/simple_actor.rb",
46
50
  "lib/ext/binding_of_caller.rb",
@@ -0,0 +1,5 @@
1
+ $:.unshift("../lib")
2
+ require 'ara'
3
+
4
+ actor = Actors.actor_for("simple_actor", "localhost", 9292)
5
+ puts actor << "World"
@@ -0,0 +1,10 @@
1
+ $:.unshift("../lib")
2
+ require 'ara'
3
+
4
+ class SimpleMessage < Actor
5
+ def receive(message)
6
+ reply "@ #{Time.now} : Hello #{message}"
7
+ end
8
+ end
9
+
10
+ Ara::Remote.server("localhost", 9292).register("simple_actor", Actors.actor_of(SimpleMessage)).start
data/lib/ara.rb CHANGED
@@ -6,3 +6,5 @@ require 'ara/simple_actor'
6
6
  require 'ara/actor'
7
7
  require 'ara/actors'
8
8
  require 'ara/scheduler'
9
+
10
+ require 'ara/remote'
@@ -1,16 +1,21 @@
1
+ require 'ara/remote_actor'
1
2
  # Actors class
2
3
  class Actors
3
- # Create a new Actor with class klass
4
- #
5
- # class MyActor < Actor
6
- # def receive(message)
7
- # ...
8
- # end
9
- # end
10
- #
11
- # myActor = Actors.actor_of(MyActor)
12
- def self.actor_of(klass)
13
- return klass.new()
14
- end
4
+ # Create a new Actor with class klass
5
+ #
6
+ # class MyActor < Actor
7
+ # def receive(message)
8
+ # ...
9
+ # end
10
+ # end
11
+ #
12
+ # myActor = Actors.actor_of(MyActor)
13
+ def self.actor_of(klass)
14
+ return klass.new()
15
+ end
16
+
17
+ def self.actor_for(route, host, port)
18
+ return RemoteActor.new(route, host, port)
19
+ end
15
20
  end
16
21
 
@@ -0,0 +1,45 @@
1
+ require 'rubygems'
2
+ require 'rack'
3
+
4
+ module Rack
5
+ class ActorMap
6
+ def initialize(actor)
7
+ @actor = actor.start
8
+ end
9
+
10
+ def call( env )
11
+ response = Rack::Response.new
12
+ request = Rack::Request.new(env)
13
+ message = request.params["message"]
14
+ response.write @actor << message
15
+ response.finish
16
+ end
17
+ end
18
+ end
19
+
20
+ module Ara
21
+ module Remote
22
+ def self.server(host, port)
23
+ return Server.new(host, port)
24
+ end
25
+
26
+ class Server
27
+ def initialize(host, port)
28
+ @host = host
29
+ @port = port
30
+ @routes = {}
31
+ end
32
+
33
+ def register(route, actor)
34
+ @routes["/#{route}"] = Rack::ActorMap.new(actor)
35
+ self
36
+ end
37
+
38
+ def start
39
+ app = Rack::URLMap.new(@routes)
40
+ app = Rack::ContentLength.new(app)
41
+ Rack::Handler::WEBrick.run( app, {:Port => @port} )
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,12 @@
1
+ require 'net/http'
2
+
3
+ class RemoteActor
4
+ def initialize(route, host, port)
5
+ @route = route
6
+ @host = host
7
+ @port = port
8
+ end
9
+ def <<(message)
10
+ Net::HTTP.get(@host, "/#{@route}?message=#{message}", @port)
11
+ end
12
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-14 00:00:00.000000000 +02:00
12
+ date: 2011-07-15 00:00:00.000000000 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: shoulda
17
- requirement: &2151807640 !ruby/object:Gem::Requirement
17
+ requirement: &2153397620 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *2151807640
25
+ version_requirements: *2153397620
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &2151806340 !ruby/object:Gem::Requirement
28
+ requirement: &2153396300 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.0.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *2151806340
36
+ version_requirements: *2153396300
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: jeweler
39
- requirement: &2151804400 !ruby/object:Gem::Requirement
39
+ requirement: &2153395040 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.6.2
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2151804400
47
+ version_requirements: *2153395040
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rcov
50
- requirement: &2151802760 !ruby/object:Gem::Requirement
50
+ requirement: &2153393200 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2151802760
58
+ version_requirements: *2153393200
59
59
  description: Ara is a tiny class that’s allow you to use actors in Ruby
60
60
  email: gregoire.lejeune@free.fr
61
61
  executables: []
@@ -83,11 +83,15 @@ files:
83
83
  - examples/simple_scheduler.rb
84
84
  - examples/sync_actor.rb
85
85
  - examples/test_actor.rb
86
+ - examples/ws-client.rb
87
+ - examples/ws.rb
86
88
  - lib/ara.rb
87
89
  - lib/ara/actor.rb
88
90
  - lib/ara/actors.rb
89
91
  - lib/ara/exception.rb
90
92
  - lib/ara/logger.rb
93
+ - lib/ara/remote.rb
94
+ - lib/ara/remote_actor.rb
91
95
  - lib/ara/scheduler.rb
92
96
  - lib/ara/simple_actor.rb
93
97
  - lib/ext/binding_of_caller.rb