firetower 0.0.1 → 0.0.2

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.
@@ -0,0 +1 @@
1
+ pkg
@@ -213,16 +213,16 @@ Main do
213
213
  def run
214
214
  if detach
215
215
  firetower_daemon.startup
216
+ puts "Firetower is vigilantly scanning the treetops"
216
217
  else
217
218
  logger ::Logger.new($stdout)
218
219
  start_server(:logger => logger)
219
220
  end
220
- puts "Firetower is vigilantly scanning the treetops"
221
221
  end
222
222
  end
223
223
 
224
224
  mode :stop do
225
- description "Start the listener daemon"
225
+ description "Stop the listener daemon"
226
226
 
227
227
  def run
228
228
  firetower_daemon.shutdown
@@ -11,6 +11,7 @@ module Firetower
11
11
  data = session.get(subdomain, "/users/#{user_id}.json")
12
12
  cache[user_id] = data['user']
13
13
  end
14
+ @joined_rooms = []
14
15
  end
15
16
 
16
17
  def rooms
@@ -45,6 +46,28 @@ module Firetower
45
46
  })
46
47
  end
47
48
 
49
+ def join!(room_name)
50
+ room = rooms[room_name]
51
+ session.post(subdomain, "/room/#{room.id}/join.json")
52
+ @joined_rooms << room
53
+ session.logger.info "Joined room #{subdomain}/#{room_name}"
54
+ session.execute_hook(:join, session, room)
55
+ end
56
+
57
+ def leave!(room_name)
58
+ room = rooms[room_name]
59
+ session.post(subdomain, "/room/#{room.id}/leave.json")
60
+ @joined_rooms.delete(room)
61
+ session.logger.info "Left room #{subdomain}/#{room_name}"
62
+ session.execute_hook(:leave, session, room)
63
+ end
64
+
65
+ def close!
66
+ @joined_rooms.each do |room|
67
+ leave!(room.name)
68
+ end
69
+ end
70
+
48
71
  def ssl?
49
72
  @ssl
50
73
  end
@@ -4,7 +4,7 @@ module Firetower
4
4
 
5
5
  def startup(session)
6
6
  if session.kind == :server
7
- notify("Firetower", "Firetower is vigilant!")
7
+ notify("Firetower", "Firetower is vigilantly scanning the treetops")
8
8
  end
9
9
  end
10
10
 
@@ -12,6 +12,10 @@ module Firetower
12
12
  notify("Firetower", "Joined room \"#{room.name}\"")
13
13
  end
14
14
 
15
+ def leave(session, room)
16
+ notify("Firetower", "Left room \"#{room.name}\"")
17
+ end
18
+
15
19
  def receive(session, event)
16
20
  case event['type']
17
21
  when "TextMessage"
@@ -22,8 +26,8 @@ module Firetower
22
26
  end
23
27
  end
24
28
 
25
- def error(session, description)
26
- notify("Campfire Error", description)
29
+ def error(session, error)
30
+ notify("Campfire Error", error.message)
27
31
  end
28
32
 
29
33
  private
@@ -31,7 +35,7 @@ module Firetower
31
35
  def notify(*args)
32
36
  system('notify-send', '--icon',
33
37
  File.expand_path(
34
- '../images/campfire-logo-for-fluid.png',
38
+ 'campfire-logo-for-fluid.png',
35
39
  File.dirname(__FILE__)),
36
40
  '-c', 'Firetower',
37
41
  *args) or raise "Desktop notification failed"
@@ -26,11 +26,16 @@ module Firetower
26
26
  subscribe_to_room(room)
27
27
  end
28
28
  end
29
+ @logger.info "Finished processing events; closing session"
29
30
  session.close!
31
+ @logger.info "Session closed"
30
32
  end
31
33
 
32
34
  def subscribe_to_room(room)
33
35
  @logger.info "Subscribing to #{room}"
36
+
37
+ room.account.join!(room.name)
38
+
34
39
  stream = Twitter::JSONStream.connect(
35
40
  :path => "/room/#{room.id}/live.json",
36
41
  :host => 'streaming.campfirenow.com',
@@ -45,8 +50,9 @@ module Firetower
45
50
  end
46
51
 
47
52
  stream.on_error do |message|
48
- @logger.error message
49
- session.execute_hook(:error, session, message)
53
+ error = RuntimeError.new(message)
54
+ @logger.error error.message
55
+ session.execute_hook(:error, error)
50
56
  end
51
57
 
52
58
  stream.on_max_reconnects do |timeout, retries|
@@ -55,7 +61,6 @@ module Firetower
55
61
  "Unable to connect after #{retries} attempts")
56
62
  stop_event_loop
57
63
  end
58
- session.execute_hook(:join, session, room)
59
64
  end
60
65
 
61
66
  end
@@ -19,7 +19,7 @@ module Firetower
19
19
  define_hook :connect, :session, :account
20
20
  define_hook :join, :session, :room
21
21
  define_hook :receive, :session, :event
22
- define_hook :error, :session, :description
22
+ define_hook :error, :session, :error
23
23
  define_hook :leave, :session, :room
24
24
  define_hook :disconnect, :session, :account
25
25
  define_hook :shutdown, :session
@@ -71,9 +71,9 @@ module Firetower
71
71
  @default_room ||= @subscribed_rooms.first
72
72
  end
73
73
 
74
- def post(subdomain, path, data)
74
+ def post(subdomain, path, data=nil)
75
75
  request = Net::HTTP::Post.new(path)
76
- request.body = data.to_json
76
+ request.body = data.to_json if data
77
77
  request['Content-Type'] = 'application/json'
78
78
  perform_request(subdomain, request)
79
79
  end
@@ -98,7 +98,9 @@ module Firetower
98
98
  end
99
99
 
100
100
  def close!
101
- # TODO
101
+ accounts.values.each do |account|
102
+ account.close!
103
+ end
102
104
  end
103
105
  end
104
106
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Avdi Grimm
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-07-12 00:00:00 -04:00
17
+ date: 2010-07-13 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -148,9 +148,11 @@ extra_rdoc_files:
148
148
  - History.txt
149
149
  - bin/firetower
150
150
  - lib/firetower/firetower.conf.erb
151
+ - lib/firetower/plugins/core/campfire-logo-for-fluid.png
151
152
  - version.txt
152
153
  files:
153
154
  - .bnsignore
155
+ - .gitignore
154
156
  - History.txt
155
157
  - README.html
156
158
  - README.org
@@ -158,10 +160,10 @@ files:
158
160
  - bin/firetower
159
161
  - example/bot.rb
160
162
  - images/BaldMountainLookout.jpg
161
- - images/campfire-logo-for-fluid.png
162
163
  - lib/firetower.rb
163
164
  - lib/firetower/account.rb
164
165
  - lib/firetower/firetower.conf.erb
166
+ - lib/firetower/plugins/core/campfire-logo-for-fluid.png
165
167
  - lib/firetower/plugins/core/init_v1.rb
166
168
  - lib/firetower/plugins/core/notify_plugin.rb
167
169
  - lib/firetower/room.rb