package vooga.rts.networking.examplechat; import java.awt.Dimension; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import vooga.rts.networking.client.ClientModel; import vooga.rts.networking.client.IClient; import vooga.rts.networking.client.IMessageReceiver; import vooga.rts.networking.client.NetworkedGame; import vooga.rts.networking.communications.ExpandedLobbyInfo; import vooga.rts.networking.communications.IMessage; import vooga.rts.networking.communications.PlayerInfo; import vooga.rts.networking.communications.UserTimeStamp; /** * An example client for games that wish to use networking. * * @author David Winegar * */ public class ExampleChat implements NetworkedGame, IChatModel, IMessageReceiver { private static final int ONE_MILLISECOND = 1000000; private static final String SEPARATOR = " : "; private static final int MAX_PLAYERS = 8; private static final int DEFAULT_HEIGHT = 500; private static final int DEFAULT_WIDTH = 600; private ClientModel myModel; private JFrame myFrame; private ChatPanel myChatPanel; private IClient myClient; private PlayerInfo myPlayer; private ExpandedLobbyInfo myInfo; private long myStartTime; /** * Starts by creating the dialog box. */ public ExampleChat () { new UsernameDialogBox(this); } /** * Creates the frame for the given panel */ protected void createFrame (JPanel panel) { myFrame = new JFrame(); myFrame.add(panel); myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myFrame.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT)); myFrame.setVisible(true); myFrame.pack(); } @Override public void switchToServerBrowser (String name) { createServerBrowserModel(name); createFrame(myModel.getView()); } protected void createServerBrowserModel (String name) { List<String> factions = new ArrayList<String>(); factions.add("chat person"); List<String> maps = new ArrayList<String>(); maps.add("chat room"); List<Integer> maxPlayers = new ArrayList<Integer>(); maxPlayers.add(MAX_PLAYERS); myModel = new ClientModel(this, "Chat Room", name, factions, maps, maxPlayers); } @Override public void loadGame (ExpandedLobbyInfo info, PlayerInfo thisPlayer) { myFrame.dispose(); myChatPanel = new ChatPanel(this); myPlayer = thisPlayer; myInfo = info; createFrame(myChatPanel); } @Override public void startGame (IClient client) { myClient = client; client.setMessageReceiver(this); myStartTime = System.nanoTime(); } @Override public void getMessage (IMessage message) { if (message instanceof ChatMessage) { ChatMessage chat = (ChatMessage) message; myChatPanel.appendMessage( chat.getInitialTime() + SEPARATOR + myInfo.getPlayer(chat.getSender()).getName() + SEPARATOR + chat.getMessage() + "\n"); } } @Override public void messageEntered (String message) { myClient.sendMessage(new ChatMessage( new UserTimeStamp( (System.nanoTime() - myStartTime) / ONE_MILLISECOND), message, myPlayer.getId())); } @Override public void connectionClosed () { JOptionPane.showMessageDialog(new JFrame(), "Connection Closed."); System.exit(0); } @Override public void serverBrowserClosed () { System.exit(0); } }