package udpchatserver; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.lang.*; import java.net.*; import java.util.*; import java.io.*; public class ClientInterfaceFrame extends JFrame { JPanel contentPane; JPanel jPanel1 = new JPanel(); JPanel jPanel2 = new JPanel(); JTextField MachinePortInput = new JTextField(); JTextField UsernameInput = new JTextField(); JTextField MessageToInput = new JTextField(); JTextField MessageInput = new JTextField(); JLabel MachinePortLabel = new JLabel(); JLabel UsernameLabel = new JLabel(); JLabel MesageToLabel = new JLabel(); JLabel MessageLabel = new JLabel(); JButton LeaveButton = new JButton(); JButton QuitButton = new JButton(); JButton JoinButton = new JButton(); JButton SendButton = new JButton(); JScrollPane jScrollPane1 = new JScrollPane(); JTextArea TextMessageDisplay = new JTextArea(); static final int BUFFER_SIZE = 516; DatagramSocket ChatSocket; DatagramPacket FinalPacket; ChatPacket PacketToServer; String MachinePort; String Machine; String Port; String Username; String MessageTo; String Message; String MachineName = ""; String PortString = ""; String Blank = "0"; int PacketType; int MessageLength; int UsernameLength; int MessageToLength; int PortInt; int MachineLength; int PortLength; byte [] FinalBytePacket; byte [] data; byte [] PacketTypeByte = new byte [1]; byte [] ULengthByte; byte [] UsernameByte; byte [] MessageToLengthByte; byte [] MessageToByte; byte [] MessageLengthByte; byte [] MessageByte; byte [] ResvByte; byte [] BlankByte = new byte [1]; String UIStatus = new String("Not Set Yet\n"); /**Construct the frame*/ public ClientInterfaceFrame(DatagramSocket Socket) { ChatSocket = Socket; enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } try{ ChatSocket = new DatagramSocket(); ChatSocket = Socket; } catch (SocketException se) { System.err.println(se); } catch (IOException e) { System.err.println(e); } } /**Component initialization*/ private void jbInit() throws Exception { //setIconImage(Toolkit.getDefaultToolkit().createImage(ClientInterfaceFrame.class.getResource("[Your Icon]"))); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(null); this.setSize(new Dimension(436, 499)); this.setTitle("ClientInterface"); jPanel1.setBorder(BorderFactory.createEtchedBorder()); jPanel1.setBounds(new Rectangle(8, 8, 308, 106)); jPanel1.setLayout(null); jPanel2.setBounds(new Rectangle(8, 121, 308, 106)); jPanel2.setLayout(null); jPanel2.setBorder(BorderFactory.createEtchedBorder()); MachinePortInput.setText("redsox.rutgers.edu:7042"); MachinePortInput.setBounds(new Rectangle(10, 25, 288, 25)); UsernameInput.setToolTipText("Enter your Username"); UsernameInput.setBounds(new Rectangle(10, 72, 288, 25)); UsernameInput.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { UsernameInput_actionPerformed(e); } }); MessageToInput.setEnabled(false); MessageToInput.setBounds(new Rectangle(9, 25, 288, 25)); MessageInput.setEnabled(false); MessageInput.setBounds(new Rectangle(9, 73, 288, 25)); MessageInput.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { MessageInput_actionPerformed(e); } }); MachinePortLabel.setText("Machine:Port"); MachinePortLabel.setBounds(new Rectangle(10, 7, 177, 16)); UsernameLabel.setBounds(new Rectangle(10, 55, 177, 16)); UsernameLabel.setText("Username"); MesageToLabel.setBounds(new Rectangle(9, 7, 177, 16)); MesageToLabel.setText("Private Message To"); MessageLabel.setText("Type Message Here"); MessageLabel.setBounds(new Rectangle(8, 55, 177, 16)); LeaveButton.setEnabled(false); LeaveButton.setToolTipText("Must Join Before Leaving"); LeaveButton.setText("Leave Chat"); LeaveButton.setBounds(new Rectangle(323, 234, 103, 29)); LeaveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { LeaveButton_actionPerformed(e); } }); QuitButton.setBounds(new Rectangle(323, 274, 102, 29)); QuitButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { QuitButton_actionPerformed(e); } }); QuitButton.setToolTipText("Press To Quit"); QuitButton.setText("Quit"); JoinButton.setBounds(new Rectangle(324, 33, 103, 29)); JoinButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { JoinButton_actionPerformed(e); } }); JoinButton.setEnabled(true); JoinButton.setToolTipText("Press To Join"); JoinButton.setText("Join Chat"); SendButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { SendButton_actionPerformed(e); } }); SendButton.setBounds(new Rectangle(322, 197, 103, 29)); SendButton.setText("Send"); SendButton.setToolTipText("Must Join Chat Before Sending Message"); SendButton.setEnabled(false); jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane1.setBounds(new Rectangle(8, 236, 307, 222)); TextMessageDisplay.setBackground(Color.white); TextMessageDisplay.setEditable(false); contentPane.add(jPanel1, null); jPanel1.add(UsernameInput, null); jPanel1.add(MachinePortInput, null); jPanel1.add(MachinePortLabel, null); jPanel1.add(UsernameLabel, null); contentPane.add(jPanel2, null); jPanel2.add(MessageInput, null); jPanel2.add(MessageToInput, null); jPanel2.add(MessageLabel, null); jPanel2.add(MesageToLabel, null); contentPane.add(LeaveButton, null); contentPane.add(QuitButton, null); contentPane.add(JoinButton, null); contentPane.add(SendButton, null); contentPane.add(jScrollPane1, null); jScrollPane1.getViewport().add(TextMessageDisplay, null); } /**Overridden so we can exit when window is closed*/ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } //The following are the various methods to handle actions perfomed by the user //Join, Leave, Quit are all taken care of here //All actions except Join and Username Input change the state of the form //Join and username are handled in the reciever thread void JoinButton_actionPerformed(ActionEvent e) { PacketType = 1; GetUserInput(); FinalBytePacket = MakePacket(PacketType, Username, Blank); SendPacket(FinalBytePacket); } void UsernameInput_actionPerformed(ActionEvent e) { PacketType = 1; GetUserInput(); FinalBytePacket = MakePacket(PacketType, Username, Blank); SendPacket(FinalBytePacket); } void MessageInput_actionPerformed(ActionEvent e) { PacketType = 3; GetUserInput(); FinalBytePacket = MakePacket(PacketType, MessageTo, Message); SendPacket(FinalBytePacket); //Update Interface States MessageInput.setText(""); MessageToInput.setText(""); } void SendButton_actionPerformed(ActionEvent e) { PacketType = 3; GetUserInput(); FinalBytePacket = MakePacket(PacketType, MessageTo, Message); SendPacket(FinalBytePacket); //Update Interface States MessageInput.setText(""); MessageToInput.setText(""); } void LeaveButton_actionPerformed(ActionEvent e) { PacketType = 2; GetUserInput(); FinalBytePacket = MakePacket(PacketType, Blank, Blank); SendPacket(FinalBytePacket); //Update Interface States JoinButton.setEnabled(true); MachinePortInput.setEnabled(true); UsernameInput.setEnabled(true); JoinButton.setToolTipText("Press To Join"); SendButton.setToolTipText("Must Join Chat Before Sending"); LeaveButton.setToolTipText("Must Join Chat Before Leaving"); MessageInput.setText(""); MessageToInput.setText(""); SendButton.setEnabled(false); LeaveButton.setEnabled(false); MachinePortInput.setEnabled(true); UsernameInput.setEnabled(true); MessageToInput.setEnabled(false); MessageInput.setEnabled(false); } void QuitButton_actionPerformed(ActionEvent e) { PacketType = 2; GetUserInput(); FinalBytePacket = MakePacket(PacketType, Blank, Blank); SendPacket(FinalBytePacket); //Exit Interface System.exit(0); } public void GetUserInput(){ //method which retrieves the input from the user MachinePort = MachinePortInput.getText(); ParseMachinePort(MachinePort); Username = UsernameInput.getText(); MessageTo = MessageToInput.getText(); Message = MessageInput.getText(); UsernameLength = Username.length(); MessageToLength = MessageTo.length(); MessageLength = Message.length(); } public void ParseMachinePort(String MachinePort){ //Method which parses the Machine:Port input from the user //Would have been much easier to make 1 input for each, but I had already done it this //way when I found out this was allowed so I left it char [] temp = new char[MachinePort.length()]; temp = MachinePort.toCharArray(); boolean check = false; MachineLength=0; PortLength=0; for(int j=0; j