summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhillip <pacardon@u.washington.edu>2011-03-05 05:34:51 +0000
committerPhillip <pacardon@u.washington.edu>2011-03-05 05:34:51 +0000
commit693cb18e45051b4a3784915000b3297623e82240 (patch)
treec6d77c86e71b50f40f5703aaa9fecc6fb914bc44 /src
parentde74be60dcce6b06adead2bb4483d71758a7f7c5 (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.java6
-rw-r--r--src/tesseract/TesseractUI.java27
-rw-r--r--src/tesseract/chatbox/Chatbox.java153
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);
}
}
}