01 /**
02 *
03 * All content copyright (c) 2003-2008 Terracotta, Inc.,
04 * except as may otherwise be noted in a separate copyright notice.
05 * All rights reserved.
06 *
07 */
08 package demo.chatter;
09
10 import java.util.Map;
11 import java.util.TreeMap;
12
13 /**
14 * Description of the Class
15 *
16 *@author Terracotta, Inc.
17 */
18 class ChatManager {
19
20 private final Map<String, User> users;
21 private transient volatile ChatListener listener;
22
23 public ChatManager() {
24 this.users = new TreeMap<String, User>();
25 init();
26 }
27
28 public void setLocalListener(ChatListener listener) {
29 this.listener = listener;
30 }
31
32 public User[] getCurrentUsers() {
33 synchronized (users) {
34 return users.values().toArray(new User[]{});
35 }
36 }
37
38 public void send(Message msg) {
39 sendNewMessageEvent(msg);
40 }
41
42 public void registerUser(User user) {
43 synchronized (users) {
44 users.put(user.getNodeId(), user);
45 }
46 sendNewUserEvent(user.getName());
47 }
48
49 public void removeUser(String nodeId) {
50 synchronized (users) {
51 users.remove(nodeId);
52 }
53 }
54
55 /**
56 * Normally the user list is maintained via JMX notifications received in
57 * each node. This method will ensure that the list is consistent even if
58 * all clients crash simultaneously
59 *
60 *@param listProvider Description of Parameter
61 */
62 public void retainNodes(NodeListProvider listProvider) {
63 synchronized (users) {
64 users.keySet().retainAll(listProvider.getNodeList());
65 }
66 }
67
68 private void init() {
69 this.listener = new NullChatListener();
70 }
71
72 private void sendNewUserEvent(String username) {
73 this.listener.newUser(username);
74 }
75
76 private void sendNewMessageEvent(Message message) {
77 this.listener.newMessage(message);
78 }
79
80 /**
81 * Description of the Class
82 *
83 *@author Terracotta, Inc.
84 */
85 private static class NullChatListener implements ChatListener {
86 public void newMessage(Message message) {
87 //
88 }
89
90 public void newUser(String username) {
91 //
92 }
93 }
94
95 }
|