firetower 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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