diff options
author | Phillip <pacardon@u.washington.edu> | 2011-03-05 05:34:51 +0000 |
---|---|---|
committer | Phillip <pacardon@u.washington.edu> | 2011-03-05 05:34:51 +0000 |
commit | 693cb18e45051b4a3784915000b3297623e82240 (patch) | |
tree | c6d77c86e71b50f40f5703aaa9fecc6fb914bc44 /src | |
parent | de74be60dcce6b06adead2bb4483d71758a7f7c5 (diff) |
Changes from email:
1: I had to pass Peer to Chatbox as a parameter to allow it to transmit messages (working!)
2: Added Chatbox option in networking menu.
3: Hitting <enter> or submit with Chatbox having focus transmits message in the Textfield
4: Made a getter in Peer to get the PeerInformation.toString()
Diffstat (limited to 'src')
-rw-r--r-- | src/common/Peer.java | 6 | ||||
-rw-r--r-- | src/tesseract/TesseractUI.java | 27 | ||||
-rw-r--r-- | src/tesseract/chatbox/Chatbox.java | 153 |
3 files changed, 155 insertions, 31 deletions
diff --git a/src/common/Peer.java b/src/common/Peer.java index 732043b..91c2f2c 100644 --- a/src/common/Peer.java +++ b/src/common/Peer.java @@ -514,7 +514,7 @@ public class Peer extends Observable { if (mesg.id != null && mesg.id.equals(PeerMessage.DEFAULT_ID)) {
setChanged();
- notifyObservers(mesg.extra);
+ notifyObservers(mesg);
}
break;
@@ -585,4 +585,8 @@ public class Peer extends Observable { if (logEnabled)
System.out.println(new Date() + " -- " + text);
}
+
+ public String getMyName() {
+ return myInfo.toString();
+ }
}
diff --git a/src/tesseract/TesseractUI.java b/src/tesseract/TesseractUI.java index 113b32a..5060e08 100644 --- a/src/tesseract/TesseractUI.java +++ b/src/tesseract/TesseractUI.java @@ -36,6 +36,7 @@ import javax.vecmath.Point3d; import javax.vecmath.Point3f; import javax.vecmath.Vector3f; +import tesseract.chatbox.Chatbox; import tesseract.forces.AirDrag; import tesseract.forces.CircularXY; import tesseract.forces.CircularXZ; @@ -52,7 +53,6 @@ import tesseract.newmenu.NewPlanarPolygonMenuItem; import tesseract.newmenu.NewSurfBoardMenuItem; import tesseract.newmenu.NewToroidMenuItem; import tesseract.objects.PhysicalObject; -import tesseract.objects.Sphere; import com.sun.j3d.utils.picking.PickCanvas; import com.sun.j3d.utils.picking.PickResult; @@ -97,6 +97,11 @@ public class TesseractUI extends JFrame { private Peer myPeer; /** + * The Chatbox. + */ + private Chatbox myChatbox; + + /** * The Canvas. */ private Canvas3D myCanvas; @@ -135,7 +140,8 @@ public class TesseractUI extends JFrame { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myPeer = new Peer(true); - + myChatbox = new Chatbox(myPeer); + myPeer.addObserver(myChatbox); myWorld = new World( new BoundingBox(new Point3d(-UNIT / 2, -UNIT / 2, -UNIT / 2), new Point3d(UNIT / 2, UNIT / 2, UNIT / 2)), @@ -220,6 +226,7 @@ public class TesseractUI extends JFrame { String ip = JOptionPane.showInputDialog("Enter the IP to connect to: "); myPeer.connectToNetwork(ip); } + myChatbox.setMyName(); //sets myName Field of Chatbox to Peer ID. } }); networkMenu.add(join); @@ -363,12 +370,28 @@ public class TesseractUI extends JFrame { exit.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { // TODO: I feel this is the wrong way of exiting... + // TODO: Properly shutdown network connection here! System.exit(0); } }); simulationMenu.add(exit); + //* + //JMenu networkMenu = new JMenu("Communication"); + JMenuItem chat = new JMenuItem("Chat"); + chat.addActionListener(new ActionListener(){ + + @Override + public void actionPerformed(ActionEvent arg0) { + myChatbox.setVisible(true); + } + }); + networkMenu.add(chat); + //menuBar.add(networkMenu);//*/ setJMenuBar(menuBar); + + + } /** diff --git a/src/tesseract/chatbox/Chatbox.java b/src/tesseract/chatbox/Chatbox.java index 7fa9fd6..50e2b95 100644 --- a/src/tesseract/chatbox/Chatbox.java +++ b/src/tesseract/chatbox/Chatbox.java @@ -1,6 +1,7 @@ package tesseract.chatbox;
import java.awt.BorderLayout;
+import java.awt.FlowLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -18,64 +19,133 @@ import javax.swing.JScrollPane; import javax.swing.JTextArea;
import javax.swing.JTextField;
+import common.Peer;
+import common.PeerMessage;
+
+/**
+ * Chat box.
+ * @author Phillip Cardon
+ * @version 0.1 untested
+ */
public class Chatbox extends JFrame implements Observer {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Panel for construction.
+ */
private final JPanel textPanel;
+
+ /**
+ * Scroller for text area.
+ */
private final JScrollPane scroller;
- private final JTextArea textArea;
+
+ /**
+ * Text area for chat.
+ */
+ private final JTextArea chatRoomDisplay;
+
+ /**
+ * Submit button for message.
+ */
private final JButton submitButton;
+
+ /**
+ * Text field to send chat messages.
+ */
private final JTextField chatField;
+
+ /**
+ * my Peer name.
+ */
private String myName;
+
+ /**
+ * String to send to peers.
+ */
private String toSend;
+
+ /**
+ * All chats sent/received.
+ */
private StringBuilder chats;
- public Chatbox() {
+ /**
+ * Peer object.
+ */
+ private Peer myPeer;
+
+ /**
+ * Constructor.
+ * @param thePeer object.
+ */
+ public Chatbox(final Peer thePeer) {
+ myPeer = thePeer;
textPanel = new JPanel(new BorderLayout());
- textArea = new JTextArea(10, 80);
- textArea.setEditable(false);
- scroller = new JScrollPane(textArea);
+ chatRoomDisplay = new JTextArea(10, 80);
+ chatRoomDisplay.setEditable(false);
+ scroller = new JScrollPane(chatRoomDisplay);
submitButton = new JButton("Submit");
- chatField = new JTextField();
+ chatField = new JTextField(70);
this.setName("Chat");
chats = new StringBuilder();
buildFrame();
attachListeners();
+ myName = "OFFLINE";
+ this.setName("Chatbox");
}
+ /**
+ * Attaches Listeners to button and text field.
+ */
private void attachListeners() {
submitButton.addActionListener(new ActionListener() {
@Override
- public void actionPerformed(ActionEvent arg0) {
+ public void actionPerformed(final ActionEvent arg0) {
//TODO: SEND MESSAGE IN chatField.
if (arg0.getSource().equals(submitButton)) {
toSend = chatField.getText();
chatField.setText("");
- // PeerMessage message = new PeerMessage(Message, null, toSend);
- // Send(message);
+ chats.append("\n");
+ chats.append(myName + ": " + toSend);
+ chatRoomDisplay.setText(chats.toString());
+ chatField.setText("");
+ myPeer.sendExtraToAllPeers(toSend);
}
}
});
-
-
- //chatField.addKeyListener()
-
+ chatField.addKeyListener(new ChatFieldListener());
}
-
- public boolean setMyName(final String theName) {
- myName = theName;
- return myName.equals(theName);
+
+ /**
+ * Sets name of this client (local use only).
+ * @param theName of this client
+ * @return name set.
+ */
+ public void setMyName() {
+ myName = myPeer.getMyName();
}
+ /**
+ * Builds Chat frame.
+ */
private void buildFrame() {
textPanel.add(scroller, BorderLayout.CENTER);
- JPanel southPanel = new JPanel();
- GroupLayout layout = new GroupLayout(southPanel);
- layout.setHorizontalGroup(
+ JPanel southPanel = new JPanel(new FlowLayout());
+ //FlowLayout layout =
+
+ /*layout.setHorizontalGroup(
layout.createSequentialGroup()
.addComponent(chatField)
.addComponent(submitButton)
- );
+ );*/
+ southPanel.add(chatField);
+ southPanel.add(submitButton);
textPanel.add(southPanel, BorderLayout.SOUTH);
this.add(textPanel);
this.pack();
@@ -83,13 +153,27 @@ public class Chatbox extends JFrame implements Observer { }
@Override
- public void update(Observable arg0, Object arg1) {
- String inc = " ";
- String source = " ";
+ public void update(final Observable arg0, final Object arg1) {
+ if (arg1.getClass().equals(PeerMessage.class)) {
+ PeerMessage msg = (PeerMessage) arg1;
+ if (msg.extra.getClass().equals(String.class)) {
+ String incMsg = (String) msg.extra;
+ String source = msg.sender.toString();
+ chats.append("\n");
+ chats.append(source + ": " + incMsg);
+ chatRoomDisplay.setText(chats.toString());
+ } else {
+ System.err.println("Message Extra Field is"
+ + " of unsupported type.");
+ }
+ }
+ //Object extra =
+ //String inc = " ";
+ //String source = " ";
// TODO Listen for PeerMessage with string in it.
/*
- if (((PeerMessage) arg0).getExtra().getClass == inc.getClass()) {
- inc = (PeerMessage) arg0).getExtra();
+ if (arg1.getClass() == inc.getClass()) {
+ inc = arg1;
source = ((PeerMessage) arg0).getPeer.getName();
chats.append("\n");
chats.append(source + ": " + inc);
@@ -99,12 +183,25 @@ public class Chatbox extends JFrame implements Observer { }
+ /**
+ * KeyAdapter inner class for textfield.
+ * @author Phillip Cardon
+ * @verson 1.0
+ */
private class ChatFieldListener extends KeyAdapter {
-
- public void keyReleased(KeyEvent e) {
+
+ /**
+ * keyReleased, activates on enter key released.
+ * @param e key event.
+ */
+ public void keyReleased(final KeyEvent e) {
if (e.getKeyCode() == 10) {
toSend = chatField.getText();
+ chats.append("\n");
+ chats.append(myName + ": " + toSend);
+ chatRoomDisplay.setText(chats.toString());
chatField.setText("");
+ myPeer.sendExtraToAllPeers(toSend);
}
}
}
|