refactor ConnectedUsers a bit to make broadcasting easier
This commit is contained in:
parent
c1e033cd65
commit
10a4d4e62e
|
@ -1,11 +1,19 @@
|
||||||
package net.socialgamer.cah.data;
|
package net.socialgamer.cah.data;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.socialgamer.cah.data.QueuedMessage.Type;
|
import net.socialgamer.cah.data.QueuedMessage.Type;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class that holds all users connected to the server, and provides functions to operate on said
|
||||||
|
* list.
|
||||||
|
*
|
||||||
|
* @author ajanata
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class ConnectedUsers {
|
public class ConnectedUsers {
|
||||||
|
|
||||||
private final Map<String, User> users = new HashMap<String, User>();
|
private final Map<String, User> users = new HashMap<String, User>();
|
||||||
|
@ -15,24 +23,49 @@ public class ConnectedUsers {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void newUser(final User user) {
|
public void newUser(final User user) {
|
||||||
// TODO fire an event for a new user to interested parties
|
|
||||||
synchronized (users) {
|
synchronized (users) {
|
||||||
users.put(user.getNickname(), user);
|
users.put(user.getNickname(), user);
|
||||||
for (final User u : users.values()) {
|
final HashMap<String, Object> data = new HashMap<String, Object>();
|
||||||
final Map<String, Object> data = new HashMap<String, Object>();
|
data.put("event", "new_player");
|
||||||
data.put("event", "newplayer");
|
data.put("nickname", user.getNickname());
|
||||||
data.put("nickname", user.getNickname());
|
broadcastToAll(Type.NEW_PLAYER, data);
|
||||||
data.put("timestamp", System.currentTimeMillis());
|
|
||||||
final QueuedMessage qm = new QueuedMessage(Type.NEW_PLAYER, data);
|
|
||||||
u.enqueueMessage(qm);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeUser(final User user, final User.DisconnectReason reason) {
|
public void removeUser(final User user, final User.DisconnectReason reason) {
|
||||||
// TODO fire an event for a disconnected user to interested parties
|
// TODO fire an event for a disconnected user to interested parties
|
||||||
synchronized (users) {
|
// synchronized (users) {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcast a message to all connected players.
|
||||||
|
*
|
||||||
|
* @param type
|
||||||
|
* @param masterData
|
||||||
|
*/
|
||||||
|
public void broadcastToAll(final Type type, final HashMap<String, Object> masterData) {
|
||||||
|
broadcastToList(users.values(), type, masterData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcast a message to a specified subset of connected players.
|
||||||
|
*
|
||||||
|
* @param broadcastTo
|
||||||
|
* @param type
|
||||||
|
* @param masterData
|
||||||
|
*/
|
||||||
|
public void broadcastToList(final Collection<User> broadcastTo, final Type type,
|
||||||
|
final HashMap<String, Object> masterData) {
|
||||||
|
synchronized (users) {
|
||||||
|
for (final User u : broadcastTo) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
final Map<String, Object> data = (Map<String, Object>) masterData.clone();
|
||||||
|
data.put("timestamp", System.currentTimeMillis());
|
||||||
|
final QueuedMessage qm = new QueuedMessage(type, data);
|
||||||
|
u.enqueueMessage(qm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue