use of games.strategy.net.INode in project triplea by triplea-game.
the class Decoder method readMessageHeader.
private MessageHeader readMessageHeader(final SocketChannel channel, final ObjectInputStream objectInput) throws IOException, ClassNotFoundException {
final INode to;
if (objectInput.read() == 1) {
to = null;
} else {
if (objectInput.read() == 1) {
// this may be null if we
// have not yet fully joined the network
to = nioSocket.getLocalNode();
} else {
to = new Node();
((Node) to).readExternal(objectInput);
}
}
final INode from;
final int readMark = objectInput.read();
if (readMark == 1) {
from = nioSocket.getRemoteNode(channel);
} else if (readMark == 2) {
from = null;
} else {
from = new Node();
((Node) from).readExternal(objectInput);
}
final Serializable message;
final byte type = (byte) objectInput.read();
if (type != Byte.MAX_VALUE) {
final Externalizable template = getTemplate(type);
template.readExternal(objectInput);
message = template;
} else {
message = (Serializable) objectInput.readObject();
}
return new MessageHeader(to, from, message);
}
use of games.strategy.net.INode in project triplea by triplea-game.
the class ChatController method deactivate.
// clean up
public void deactivate() {
pingThread.shutdown();
synchronized (mutex) {
final IChatChannel chatter = getChatBroadcaster();
for (final INode node : chatters.keySet()) {
version++;
chatter.speakerRemoved(node, version);
}
remoteMessenger.unregisterRemote(getChatControlerRemoteName(chatName));
}
((IServerMessenger) messenger).removeConnectionChangeListener(connectionChangeListener);
}
use of games.strategy.net.INode in project triplea by triplea-game.
the class ChatController method joinChat.
// a player has joined
@Override
public Tuple<Map<INode, Tag>, Long> joinChat() {
final INode node = MessageContext.getSender();
logger.info("Chatter:" + node + " is joining chat:" + chatName);
final Tag tag;
if (moderatorController.isPlayerAdmin(node)) {
tag = Tag.MODERATOR;
} else {
tag = Tag.NONE;
}
synchronized (mutex) {
chatters.put(node, tag);
version++;
getChatBroadcaster().speakerAdded(node, tag, version);
final Map<INode, Tag> copy = new HashMap<>(chatters);
return Tuple.of(copy, version);
}
}
use of games.strategy.net.INode in project triplea by triplea-game.
the class ChatPlayerPanel method mouseOnPlayersList.
private void mouseOnPlayersList(final MouseEvent e) {
if (!e.isPopupTrigger()) {
return;
}
final int index = players.locationToIndex(e.getPoint());
if (index == -1) {
return;
}
final INode player = listModel.get(index);
final JPopupMenu menu = new JPopupMenu();
boolean hasActions = false;
for (final IPlayerActionFactory factory : actionFactories) {
final List<Action> actions = factory.mouseOnPlayer(player);
if (actions != null && !actions.isEmpty()) {
if (hasActions) {
menu.addSeparator();
}
hasActions = true;
for (final Action a : actions) {
menu.add(a);
}
}
}
if (hasActions) {
menu.show(players, e.getX(), e.getY());
}
}
use of games.strategy.net.INode in project triplea by triplea-game.
the class LobbyFrame method createAdminActions.
private List<Action> createAdminActions(final INode clickedOn) {
if (!client.isAdmin()) {
return Collections.emptyList();
}
if (clickedOn.equals(client.getMessenger().getLocalNode())) {
return Collections.emptyList();
}
final IModeratorController controller = (IModeratorController) client.getRemoteMessenger().getRemote(ModeratorController.getModeratorControllerName());
final List<Action> actions = new ArrayList<>();
actions.add(SwingAction.of("Boot " + clickedOn.getName(), e -> {
if (!confirm("Boot " + clickedOn.getName())) {
return;
}
controller.boot(clickedOn);
}));
actions.add(SwingAction.of("Ban Player", e -> {
final int resultBanType = JOptionPane.showOptionDialog(LobbyFrame.this, "Select the type of ban:", "Select Ban Type", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, banOrMuteOptions.toArray(), banOrMuteOptions.get(banOrMuteOptions.size() - 1));
if (resultBanType < 0) {
return;
}
final String selectedBanType = banOrMuteOptions.get(resultBanType);
if (selectedBanType.equals("Cancel")) {
return;
}
TimespanDialog.prompt(this, "Select Timespan", "Please consult other admins before banning longer than 1 day. \n" + "And please remember to report this ban.", date -> {
if (selectedBanType.toLowerCase().contains("name")) {
controller.banUsername(clickedOn, date);
}
if (selectedBanType.toLowerCase().contains("mac")) {
controller.banMac(clickedOn, date);
}
// Should we keep this auto?
controller.boot(clickedOn);
});
}));
actions.add(SwingAction.of("Mute Player", e -> {
final int resultMuteType = JOptionPane.showOptionDialog(LobbyFrame.this, "<html>Select the type of mute: <br>Please consult other admins before muting longer than 1 day.</html>", "Select Mute Type", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, banOrMuteOptions.toArray(), banOrMuteOptions.get(banOrMuteOptions.size() - 1));
if (resultMuteType < 0) {
return;
}
final String selectedMuteType = banOrMuteOptions.get(resultMuteType);
if (selectedMuteType.equals("Cancel")) {
return;
}
TimespanDialog.prompt(this, "Select Timespan", "Please consult other admins before muting longer than 1 day. \n" + "And please remember to report this mute.", date -> {
if (selectedMuteType.toLowerCase().contains("name")) {
controller.muteUsername(clickedOn, date);
}
if (selectedMuteType.toLowerCase().contains("mac")) {
controller.muteMac(clickedOn, date);
}
});
}));
actions.add(SwingAction.of("Quick Mute", e -> {
final JLabel label = new JLabel("How many minutes should this player be muted?");
final JSpinner spinner = new JSpinner(new SpinnerNumberModel(10, 0, 60 * 24 * 2, 1));
final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(label);
panel.add(spinner);
if (JOptionPane.showConfirmDialog(LobbyFrame.this, panel, "Mute Player", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
final Object value = spinner.getValue();
if (value == null) {
return;
}
final long resultMuteLengthInMinutes = Long.parseLong(value.toString());
if (resultMuteLengthInMinutes < 0) {
return;
}
final Instant expire = Instant.now().plus(Duration.ofMinutes(resultMuteLengthInMinutes));
controller.muteUsername(clickedOn, Date.from(expire));
controller.muteMac(clickedOn, Date.from(expire));
}
}));
actions.add(SwingAction.of("Show player information", e -> {
final String text = controller.getInformationOn(clickedOn);
final JTextPane textPane = new JTextPane();
textPane.setEditable(false);
textPane.setText(text);
JOptionPane.showMessageDialog(null, textPane, "Player Info", JOptionPane.INFORMATION_MESSAGE);
}));
return actions;
}
Aggregations