qswarm 0.0.14 → 0.0.15

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.
@@ -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: