Search in sources :

Example 31 with INode

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);
}
Also used : INode(games.strategy.net.INode) Serializable(java.io.Serializable) INode(games.strategy.net.INode) Node(games.strategy.net.Node) Externalizable(java.io.Externalizable) MessageHeader(games.strategy.net.MessageHeader)

Example 32 with INode

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);
}
Also used : INode(games.strategy.net.INode) IServerMessenger(games.strategy.net.IServerMessenger)

Example 33 with INode

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);
    }
}
Also used : INode(games.strategy.net.INode) HashMap(java.util.HashMap)

Example 34 with INode

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());
    }
}
Also used : INode(games.strategy.net.INode) Action(javax.swing.Action) SwingAction(games.strategy.ui.SwingAction) JPopupMenu(javax.swing.JPopupMenu)

Example 35 with INode

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;
}
Also used : JSplitPane(javax.swing.JSplitPane) Date(java.util.Date) SpinnerNumberModel(javax.swing.SpinnerNumberModel) IModeratorController(games.strategy.engine.lobby.server.IModeratorController) Action(javax.swing.Action) ChatMessagePanel(games.strategy.engine.chat.ChatMessagePanel) LobbyServer(games.strategy.engine.lobby.server.LobbyServer) ChatPlayerPanel(games.strategy.engine.chat.ChatPlayerPanel) ArrayList(java.util.ArrayList) ModeratorController(games.strategy.engine.lobby.server.ModeratorController) ImmutableList(com.google.common.collect.ImmutableList) LobbyClient(games.strategy.engine.lobby.client.LobbyClient) Duration(java.time.Duration) JTextPane(javax.swing.JTextPane) BorderLayout(java.awt.BorderLayout) JFrame(javax.swing.JFrame) LobbyMenu(games.strategy.triplea.ui.menubar.LobbyMenu) BoxLayout(javax.swing.BoxLayout) INode(games.strategy.net.INode) JSpinner(javax.swing.JSpinner) LobbyServerProperties(games.strategy.engine.lobby.client.login.LobbyServerProperties) Chat(games.strategy.engine.chat.Chat) WindowAdapter(java.awt.event.WindowAdapter) Instant(java.time.Instant) JOptionPane(javax.swing.JOptionPane) GameRunner(games.strategy.engine.framework.GameRunner) WindowEvent(java.awt.event.WindowEvent) Dimension(java.awt.Dimension) List(java.util.List) JLabel(javax.swing.JLabel) EventThreadJOptionPane(games.strategy.util.EventThreadJOptionPane) Collections(java.util.Collections) JPanel(javax.swing.JPanel) SwingAction(games.strategy.ui.SwingAction) JPanel(javax.swing.JPanel) IModeratorController(games.strategy.engine.lobby.server.IModeratorController) Action(javax.swing.Action) SwingAction(games.strategy.ui.SwingAction) BoxLayout(javax.swing.BoxLayout) Instant(java.time.Instant) ArrayList(java.util.ArrayList) JLabel(javax.swing.JLabel) SpinnerNumberModel(javax.swing.SpinnerNumberModel) JTextPane(javax.swing.JTextPane) JSpinner(javax.swing.JSpinner)

Aggregations

INode (games.strategy.net.INode)46 IModeratorController (games.strategy.engine.lobby.server.IModeratorController)10 RemoteName (games.strategy.engine.message.RemoteName)8 BorderLayout (java.awt.BorderLayout)8 JLabel (javax.swing.JLabel)7 JPanel (javax.swing.JPanel)7 JPasswordField (javax.swing.JPasswordField)5 IServerMessenger (games.strategy.net.IServerMessenger)4 HashMap (java.util.HashMap)4 List (java.util.List)4 Node (games.strategy.net.Node)3 Dimension (java.awt.Dimension)3 ArrayList (java.util.ArrayList)3 HashSet (java.util.HashSet)3 Set (java.util.Set)3 DefaultComboBoxModel (javax.swing.DefaultComboBoxModel)3 JComboBox (javax.swing.JComboBox)3 Chat (games.strategy.engine.chat.Chat)2 GameRunner (games.strategy.engine.framework.GameRunner)2 IGamePlayer (games.strategy.engine.gamePlayer.IGamePlayer)2