stompserver 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/queue_manager.rb +16 -3
- data/lib/stomp_server.rb +6 -1
- data/lib/topic_manager.rb +6 -0
- metadata +1 -1
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
|
-
|
25
|
-
|
26
|
-
|
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.
|
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']
|