qswarm 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,6 +17,7 @@ module Qswarm
17
17
  @name = name.to_s unless name.nil?
18
18
  @block = block
19
19
  @args = OpenStruct.new args
20
+ @bind = nil
20
21
  end
21
22
 
22
23
  def parse(metadata, payload)
@@ -32,7 +33,7 @@ module Qswarm
32
33
  rescue JSON::ParserError
33
34
  error = "JSON::ParserError on #{payload.inspect}"
34
35
  logger.error error
35
- publish :errors, :text, "errors.#{@agent.name}.#{$fqdn}", error
36
+ # publish :errors, :text, "errors.#{@agent.name}.#{$fqdn}", error
36
37
  end
37
38
 
38
39
  def log(msg)
@@ -40,8 +41,9 @@ module Qswarm
40
41
  end
41
42
 
42
43
  def inject(format = :text, msg)
43
- logger.debug "[#{@agent.name}] Sending '#{msg}' to broker #{get_broker(@broker).name}/#{@name}"
44
- publish @broker, format, @name, msg
44
+ routing_key = @bind || @name
45
+ logger.debug "[#{@agent.name}] Sending '#{msg}' to broker #{get_broker(@broker).name}/#{routing_key}"
46
+ publish @broker, format, routing_key, msg
45
47
  log msg if format == :text
46
48
  end
47
49
 
@@ -56,6 +58,10 @@ module Qswarm
56
58
  @args[name]
57
59
  end
58
60
 
61
+ def bind(routing_key)
62
+ @bind = routing_key
63
+ end
64
+
59
65
  private
60
66
 
61
67
  def publish(broker_name, format, routing_key, msg)
@@ -8,36 +8,58 @@ module Qswarm
8
8
 
9
9
  def initialize(listener, name, args, &block)
10
10
  @admin_host = args[:admin_host]
11
+ @channels = []
12
+ @connected = false
11
13
  super
12
14
  end
13
15
 
14
16
  def inject(format = :text, msg)
15
- logger.debug "[#{@agent.name}] Sending '#{msg}' to channel #{@name}"
16
- publish format, @name, msg
17
+ if @connected
18
+ routing_key = @bind || @name
19
+ logger.debug "[#{@agent.name}] Sending '#{msg}' to channel #{routing_key}"
20
+ publish format, routing_key, msg
21
+ else
22
+ EventMachine::Timer.new(5,self.inject(format, msg))
23
+ end
17
24
  end
18
25
 
19
26
  def run
20
27
  @name.match(/([^#]*)(#.+)/) { irc_connect $1.empty? ? 'localhost' : $1, $2 }
21
28
  end
22
29
 
23
- def join(m)
30
+ def on_join(m)
24
31
  unless m.user.nick == m.bot.nick
25
32
  if @admin_host && Regexp.new(@admin_host).match(m.user.host)
26
33
  m.channel.op(m.user)
27
34
  end
28
35
  end
29
36
  end
37
+
38
+ def on_connect(m)
39
+ @connected = true
40
+ end
41
+
42
+ def on_disconnect(m)
43
+ @connected = false
44
+ end
30
45
 
31
46
  private
47
+
48
+ def join(irc_server, channel)
49
+ if !@channels.include? channel
50
+ logger.debug "Joining channel #{channel}"
51
+ @@irc_servers[irc_server].channel_list.find_ensured(channel).join()
52
+ @channels << channel
53
+ end
54
+ end
32
55
 
33
56
  def irc_connect(irc_server, channel)
34
57
  if bot = @@irc_servers[irc_server]
35
- logger.debug "Joining channel #{channel}"
36
- @@irc_servers[irc_server].config.channels << channel
58
+ join irc_server, channel
37
59
  else
38
60
  logger.debug "Connecting to IRC server #{irc_server} channel #{channel}"
39
61
 
40
- @@irc_servers[irc_server] = Cinch::Bot.new do
62
+ @@irc_servers[irc_server] = Cinch::Bot.new do
41
63
  on :channel do |m|
42
64
  if m.message =~ /^#{m.bot.nick}/
43
65
  EM.defer do
@@ -47,7 +69,15 @@ module Qswarm
47
69
  end
48
70
 
49
71
  on :join do |m|
50
- m.bot.config.shared['speaker'].join(m)
72
+ m.bot.config.shared['speaker'].on_join(m)
73
+ end
74
+
75
+ on :connect do |m|
76
+ m.bot.config.shared['speaker'].on_connect(m)
77
+ end
78
+
79
+ on :disconnect do |m|
80
+ m.bot.config.shared['speaker'].on_disconnect(m)
51
81
  end
52
82
  end
53
83
 
@@ -55,6 +85,8 @@ module Qswarm
55
85
  @@irc_servers[irc_server].config.nick = @agent.name
56
86
  @@irc_servers[irc_server].config.channels << channel
57
87
  @@irc_servers[irc_server].config.shared['speaker'] = self
88
+
89
+ @channels << channel
58
90
 
59
91
  EM.defer do
60
92
  @@irc_servers[irc_server].start
@@ -63,13 +95,13 @@ module Qswarm
63
95
  end
64
96
 
65
97
  def publish(format, name, msg)
66
- @name.match(/([^#]*)(#.+)/) do
67
- @@irc_servers[$1.empty? ? 'localhost' : $1].channel_list.find_ensured($2).andand.send(
68
- format == :json ? JSON.generate(msg) : msg
69
- )
98
+ name.match(/([^#]*)(#.+)/) do
99
+ irc_server = $1.empty? ? 'localhost' : $1
100
+ join(irc_server, $2)
101
+ @@irc_servers[irc_server].channel_list.find($2).andand.send( format == :json ? JSON.generate(msg) : msg )
70
102
  end
71
103
  end
72
104
 
73
105
  end
74
106
  end
75
- end
107
+ end
@@ -1,3 +1,3 @@
1
1
  module Qswarm
2
- VERSION = "0.0.14"
2
+ VERSION = "0.0.15"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qswarm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-20 00:00:00.000000000Z
12
+ date: 2012-04-22 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
16
- requirement: &70096253650400 !ruby/object:Gem::Requirement
16
+ requirement: &70205369152540 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70096253650400
24
+ version_requirements: *70205369152540
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: amqp
27
- requirement: &70096253649860 !ruby/object:Gem::Requirement
27
+ requirement: &70205369152020 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70096253649860
35
+ version_requirements: *70205369152020
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: uuid
38
- requirement: &70096253649440 !ruby/object:Gem::Requirement
38
+ requirement: &70205369151420 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70096253649440
46
+ version_requirements: *70205369151420
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: json
49
- requirement: &70096253649020 !ruby/object:Gem::Requirement
49
+ requirement: &70205369150900 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70096253649020
57
+ version_requirements: *70205369150900
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: andand
60
- requirement: &70096253648600 !ruby/object:Gem::Requirement
60
+ requirement: &70205369150080 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70096253648600
68
+ version_requirements: *70205369150080
69
69
  description: Framework for writing distributed agents hanging off an AMQP message
70
70
  bus
71
71
  email: