stompserver 0.9.1 → 0.9.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.
data/lib/queue_manager.rb CHANGED
@@ -21,9 +21,19 @@ class QueueManager
21
21
  def subscribe(dest, user, use_ack=false)
22
22
  user = Struct::QueueUser.new(user, use_ack)
23
23
  @queues[dest] += [user]
24
- @messages[dest].each do |frame|
25
- send_to_user(frame, user)
26
- end
24
+
25
+ # TODO handle this is some form of call back
26
+ # it is quite possible that this could be a lot
27
+ # of data and block things up.
28
+ send_backlog(@messages[dest], user)
29
+ end
30
+
31
+ def send_backlog(queue, user)
32
+ until queue.empty?
33
+ current = queue.first
34
+ send_to_user(current, user)
35
+ queue.shift
36
+ end
27
37
  end
28
38
 
29
39
  def unsubscribe(topic, user)
@@ -42,6 +52,9 @@ class QueueManager
42
52
  @pending[user].each do |frame|
43
53
  sendmsg(frame)
44
54
  end
55
+ @queues.each do |dest, queue|
56
+ queue.delete_if { |qu| qu.user == user }
57
+ end
45
58
  end
46
59
 
47
60
  def send_to_user(frame, user)
data/lib/stomp_server.rb CHANGED
@@ -5,7 +5,7 @@ require 'queue_manager'
5
5
  require 'frame_journal'
6
6
 
7
7
  module StompServer
8
- VERSION = '0.9.1'
8
+ VERSION = '0.9.2'
9
9
  VALID_COMMANDS = [:connect, :send, :subscribe, :unsubscribe, :begin, :commit, :abort, :ack, :disconnect]
10
10
 
11
11
  def self.setup(j = FrameJournal.new, tm = TopicManager.new, qm = QueueManager.new(j))
@@ -129,6 +129,11 @@ module StompServer
129
129
  close_connection_after_writing
130
130
  end
131
131
 
132
+ def unbind
133
+ @@queue_manager.disconnect(self)
134
+ @@topic_manager.disconnect(self)
135
+ end
136
+
132
137
  def send_message(msg)
133
138
  msg.command = "MESSAGE"
134
139
  send_data(msg.to_s)
data/lib/topic_manager.rb CHANGED
@@ -13,6 +13,12 @@ class TopicManager
13
13
  @topics[topic].delete(user)
14
14
  end
15
15
 
16
+ def disconnect(user)
17
+ @topics.each do |dest, queue|
18
+ queue.delete_if { |qu| qu == user }
19
+ end
20
+ end
21
+
16
22
  def sendmsg(msg)
17
23
  msg.command = "MESSAGE"
18
24
  topic = msg.headers['destination']
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: stompserver
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.9.1
6
+ version: 0.9.2
7
7
  date: 2006-10-16 00:00:00 -04:00
8
8
  summary: A very light messaging server
9
9
  require_paths: