-
Notifications
You must be signed in to change notification settings - Fork 10
/
EventQueueService.groovy
132 lines (107 loc) · 3.25 KB
/
EventQueueService.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package org.fogbeam.quoddy
import java.util.Set;
class EventQueueService
{
def userService;
Map<String, Deque<Map>> eventQueues = new HashMap<String, Deque<Map>>();
static expose = ['jms']
static destination = "uitestActivityQueue"
def onMessage(msg)
{
println "Received message from JMS: ${msg}";
// now, figure out which user(s) are interested in this message, and put it on
// all the appropriate queues
Set<Map.Entry<String, Deque<Map>>> entries = eventQueues.entrySet();
println "got entrySet from eventQueues object: ${entries}";
for( Map.Entry<String, Deque<Map>> entry : entries )
{
println "entry: ${entry}";
println "key: ${entry.getKey()}";
String key = entry.getKey();
// TODO: don't offer message unless the owner of this queue
// and the event creator, are friends (or the owner *is* the creator)
println "msg creator: ${msg.creator}";
User msgCreator = userService.findUserByUserId( msg.creator );
if( msgCreator )
{
println "found User object for ${msgCreator.userId}";
}
FriendCollection friendCollection = FriendCollection.findByOwnerUuid( msgCreator.uuid );
if( friendCollection )
{
println "got a valid friends collection for ${msgCreator.userId}";
}
Set<String> friends = friendCollection.friends;
if( friends )
{
println "got valid friends set: ${friends}";
for( String friend : friends )
{
println "friend: ${friend}";
}
}
User targetUser = userService.findUserByUserId( key );
if( friends.contains( targetUser.uuid ) || msgCreator.uuid.equals( targetUser.uuid ) )
{
println "match found, offering message";
Deque<Map> userQueue = entry.getValue();
if( msg instanceof Map )
{
println "MapMessage being offered";
userQueue.offerFirst( msg );
}
else
{
println "WTF is this? ${msg}";
}
}
}
println "done processing eventQueue instances";
}
public long getQueueSizeForUser( final String userId )
{
long queueSize = 0;
Deque<Map> userQueue = eventQueues.get( userId );
if( userQueue != null )
{
queueSize = userQueue.size();
}
// println "Queue size for user: ${userId} = ${queueSize}";
return queueSize;
}
public List<Map> getMessagesForUser( final String userId, final int msgCount )
{
println "getting messages for user: ${userId}, msgCount: ${msgCount}";
List<Map> messages = new ArrayList<Map>();
Deque<Map> userQueue = eventQueues.get( userId );
if( userQueue != null )
{
println "got userQueue for user ${userId}";
for( int i = 0; i < msgCount; i++ )
{
// get message from queue, put it in return set
Map msg = userQueue.pollFirst();
messages.add( msg );
}
}
return messages;
}
public void registerEventQueueForUser( final String userId )
{
println "registering eventqueue for user: ${userId}";
if( !eventQueues.containsKey( userId ))
{
Deque<String> userQueue = new ArrayDeque<String>();
eventQueues.put( userId, userQueue );
}
else
{
println "We already have an event queue for this user: ${userId}";
}
}
public void unRegisterEventQueueForUser( final String userId )
{
// TODO: implement me
throw new UnsupportedOperationException( "Not implemented yet!" );
}
}