mikka 1.1.0-java → 1.1.1-java

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm --create use jruby-1.6.3@mikka
1
+ rvm --create use jruby-1.6.5@mikka
@@ -1,16 +1,70 @@
1
1
  $: << File.expand_path('../../lib', __FILE__)
2
2
 
3
+ # Run this with the argument 'server' to start a server, then run again
4
+ # without argument to run a client
5
+
3
6
  require 'mikka'
4
7
 
5
8
 
6
- if ARGV.first == '1'
7
- ping_actor = Mikka.actor do |message|
8
- puts message
9
+ SERVICE_NAME = 'translation-service'
10
+ SERVER_PORT = 1337
11
+
12
+
13
+ if ARGV.any? && ARGV.first == 'server'
14
+ # this is the server, it spawns the actor, starts a server and registers the
15
+ # actor with the server
16
+
17
+ class ServerActor < Mikka::Actor
18
+ TRANSLATIONS = {
19
+ 'bonjour' => 'hello'
20
+ }
21
+
22
+ def receive(message)
23
+ context.reply_safe(TRANSLATIONS[message])
24
+ end
9
25
  end
10
26
 
11
- server = Mikka::Remote.start(:port => 1337)
12
- server.register('ping', ping_actor)
27
+ # start the server, the host can be specified with :host and defaults to
28
+ # localhost (the port defaults to 2552, but 1337 is cooler)
29
+ server = Mikka::Remote.start(:port => SERVER_PORT)
30
+
31
+ # create and register an actor with the server, this ID is used by the
32
+ # client to get a reference to the actor
33
+ server.register(SERVICE_NAME, Mikka.actor_of(ServerActor))
34
+
35
+ # now we're just waiting for messages
13
36
  else
14
- ping_actor = Mikka::Remote.actor_for('ping', :port => 1337)
15
- ping_actor << 'hello'
37
+ # this is the client code, it connects to the remote actor and sends it a message
38
+
39
+ class ClientActor < Mikka::Actor
40
+ def initialize(word)
41
+ super() # remember to use super with parentheses!
42
+ @word = word
43
+ end
44
+
45
+ def pre_start
46
+ # this gets an actor reference to the remote actor, you need to supply
47
+ # the ID the actor was registered with, and the host and port where it's
48
+ # running (these default to localhost and 2552)
49
+ @translation_actor = Mikka::Remote.actor_for(SERVICE_NAME, :port => SERVER_PORT)
50
+ @translation_actor << @word
51
+ end
52
+
53
+ def receive(message)
54
+ if message
55
+ puts "#{@word} means #{message}"
56
+ else
57
+ puts "#{@word} has no meaning"
58
+ end
59
+ context.exit
60
+ end
61
+ end
62
+
63
+ # if you want to receive replies you need to start a server on the client
64
+ # side too, but you can use the no-args constructor to use the defaults
65
+ # (just don't use the defaults for both server and client)
66
+ Mikka::Remote.start
67
+
68
+ client = Mikka.actor_of { ClientActor.new('bonjour') }
69
+ client.start
16
70
  end
@@ -34,14 +34,23 @@ module Mikka
34
34
  end
35
35
 
36
36
  module Remote
37
- def self.start(options={})
38
- raise ArgumentError, %(No port given) unless options.key?(:port)
39
- Akka::Actors.remote.start(options.fetch(:host, 'localhost'), options[:port])
37
+ DEFAULT_HOST = 'localhost'
38
+ DEFAULT_PORT = 2552
39
+
40
+ def self.start(options=nil)
41
+ if options
42
+ then remote_support.start(options.fetch(:host, DEFAULT_HOST), options.fetch(:port, DEFAULT_PORT))
43
+ else remote_support.start
44
+ end
40
45
  end
41
46
 
42
47
  def self.actor_for(id, options={})
43
- raise ArgumentError, %(No port given) unless options.key?(:port)
44
- Akka::Actors.remote.actor_for(id, options.fetch(:host, 'localhost'), options[:port])
48
+ remote_support.actor_for(id, options.fetch(:host, DEFAULT_HOST), options.fetch(:port, DEFAULT_PORT))
49
+ end
50
+
51
+ private
52
+ def self.remote_support
53
+ Akka::Actors.remote
45
54
  end
46
55
  end
47
56
 
@@ -60,26 +69,34 @@ module Mikka
60
69
  end
61
70
 
62
71
  module ImplicitSender
72
+ def onReceive(*args)
73
+ capture_current_actor { super }
74
+ end
75
+
76
+ def preStart(*args)
77
+ capture_current_actor { super }
78
+ end
79
+
80
+ def postStop(*args)
81
+ capture_current_actor { super }
82
+ end
83
+
84
+ def preRestart(*args)
85
+ capture_current_actor { super }
86
+ end
87
+
88
+ def postRestart(*args)
89
+ capture_current_actor { super }
90
+ end
91
+
92
+ private
93
+
63
94
  def capture_current_actor
64
95
  Thread.current[:mikka_current_actor] = context
65
96
  yield
66
97
  ensure
67
98
  Thread.current[:mikka_current_actor] = nil
68
99
  end
69
-
70
- def self.included(mod)
71
- mod.class_eval do
72
- [:onReceive, :preStart, :postStop, :preRestart, :postRestart].each do |method_name|
73
- actual_method_name = :"__actual_#{method_name}"
74
- alias_method actual_method_name, method_name
75
- define_method method_name do |*args|
76
- capture_current_actor do
77
- send(actual_method_name, *args)
78
- end
79
- end
80
- end
81
- end
82
- end
83
100
  end
84
101
 
85
102
  module SupervisionDsl
@@ -103,12 +120,14 @@ module Mikka
103
120
  end
104
121
 
105
122
  def life_cycle(type)
106
- @life_cycle = case type
107
- when :permanent then Akka::Config::Supervision.permanent
108
- when :temporary then Akka::Config::Supervision.temporary
109
- when :undefined then Akka::Config::Supervision.undefined_life_cycle
110
- else raise ArgumentError, 'type must be one of :permanent, :temporary or :undefined'
111
- end
123
+ @life_cycle = begin
124
+ case type
125
+ when :permanent then Akka::Config::Supervision.permanent
126
+ when :temporary then Akka::Config::Supervision.temporary
127
+ when :undefined then Akka::Config::Supervision.undefined_life_cycle
128
+ else raise ArgumentError, 'type must be one of :permanent, :temporary or :undefined'
129
+ end
130
+ end
112
131
  end
113
132
 
114
133
  def registered_life_cycle
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Mikka
4
- VERSION = '1.1.0'
4
+ VERSION = '1.1.1'
5
5
  end
metadata CHANGED
@@ -1,60 +1,45 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mikka
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 1
8
- - 0
9
- version: 1.1.0
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.1.1
10
6
  platform: java
11
- authors:
7
+ authors:
12
8
  - Theo Hultberg
13
- autorequire:
9
+ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-10-25 00:00:00 +02:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-10-25 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: akka-actor-jars
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
16
+ version_requirements: &2056 !ruby/object:Gem::Requirement
17
+ requirements:
25
18
  - - ~>
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 1
29
- - 2
30
- - 0
19
+ - !ruby/object:Gem::Version
31
20
  version: 1.2.0
21
+ none: false
22
+ requirement: *2056
23
+ prerelease: false
32
24
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
25
+ - !ruby/object:Gem::Dependency
35
26
  name: akka-remote-jars
36
- prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
27
+ version_requirements: &2074 !ruby/object:Gem::Requirement
28
+ requirements:
39
29
  - - ~>
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 1
43
- - 2
44
- - 0
30
+ - !ruby/object:Gem::Version
45
31
  version: 1.2.0
32
+ none: false
33
+ requirement: *2074
34
+ prerelease: false
46
35
  type: :runtime
47
- version_requirements: *id002
48
36
  description: Mikka adapts Akka's Java API to fit better with Ruby
49
- email:
37
+ email:
50
38
  - theo@iconara.net
51
39
  executables: []
52
-
53
40
  extensions: []
54
-
55
41
  extra_rdoc_files: []
56
-
57
- files:
42
+ files:
58
43
  - .gitignore
59
44
  - .rvmrc
60
45
  - Gemfile
@@ -71,35 +56,29 @@ files:
71
56
  - lib/mikka.rb
72
57
  - lib/mikka/version.rb
73
58
  - mikka.gemspec
74
- has_rdoc: true
75
59
  homepage: http://github.com/iconara/mikka
76
60
  licenses: []
77
-
78
- post_install_message:
61
+ post_install_message:
79
62
  rdoc_options: []
80
-
81
- require_paths:
63
+ require_paths:
82
64
  - lib
83
- required_ruby_version: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 0
89
- version: "0"
90
- required_rubygems_version: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- segments:
95
- - 0
96
- version: "0"
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ none: false
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ none: false
97
77
  requirements: []
98
-
99
78
  rubyforge_project: mikka
100
- rubygems_version: 1.3.6
101
- signing_key:
79
+ rubygems_version: 1.8.9
80
+ signing_key:
102
81
  specification_version: 3
103
82
  summary: Mikka is a JRuby wrapper for Akka
104
83
  test_files: []
105
-
84
+ ...