1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.push.cdi;
21
22 import java.io.Serializable;
23 import java.util.ArrayList;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28 import javax.enterprise.context.ApplicationScoped;
29
30
31
32
33 @ApplicationScoped
34 public class WebsocketApplicationBean
35 {
36
37
38
39
40 private Map<String, List<WebsocketChannel> > channelTokenListMap =
41 new HashMap<String, List<WebsocketChannel> >(2);
42
43 public void registerWebsocketSession(String token, WebsocketChannelMetadata metadata)
44 {
45 if ("application".equals(metadata.getScope()))
46 {
47 channelTokenListMap.putIfAbsent(metadata.getChannel(), new ArrayList<WebsocketChannel>(1));
48 channelTokenListMap.get(metadata.getChannel()).add(new WebsocketChannel(
49 token, metadata));
50 }
51 }
52
53
54
55
56
57
58
59
60
61 public boolean isChannelAvailable(String channel)
62 {
63 return channelTokenListMap.containsKey(channel);
64 }
65
66 public List<String> getChannelTokensFor(String channel)
67 {
68 List<WebsocketChannel> list = channelTokenListMap.get(channel);
69 if (list != null && !list.isEmpty())
70 {
71 List<String> value = new ArrayList<String>(list.size());
72 for (WebsocketChannel md : list)
73 {
74 value.add(md.getChannelToken());
75 }
76 return value;
77 }
78 return Collections.emptyList();
79 }
80
81 public <S extends Serializable> List<String> getChannelTokensFor(String channel, S user)
82 {
83 List<WebsocketChannel> list = channelTokenListMap.get(channel);
84 if (list != null && !list.isEmpty())
85 {
86 List<String> value = new ArrayList<String>(list.size());
87 for (WebsocketChannel md : list)
88 {
89 if (user.equals(md.getUser()))
90 {
91 value.add(md.getChannelToken());
92 }
93 }
94 return value;
95 }
96 return null;
97 }
98 }