Author: bdonlan
Date: 2005-01-05 22:27:23 -0500 (Wed, 05 Jan 2005)
New Revision: 526
Added:
trunk/misc/javer/src/javer/JaverUI.form
trunk/misc/javer/src/javer/JaverUI.java
trunk/misc/javer/src/javer/JaverUIPanel.form
trunk/misc/javer/src/javer/JaverUIPanel.java
Removed:
trunk/misc/javer/build/
trunk/misc/javer/dist/
trunk/misc/javer/src/javer/Main.java
Modified:
/
trunk/misc/javer/nbproject/project.properties
trunk/misc/javer/src/javer/HaverClient.java
Log:
Simple UI; basic messaging support
Property changes on:
___________________________________________________________________
Name: svk:merge
- 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local:11190
+ 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local:11195
Modified: trunk/misc/javer/nbproject/project.properties
===================================================================
--- trunk/misc/javer/nbproject/project.properties 2005-01-06 02:28:20 UTC
(rev 525)
+++ trunk/misc/javer/nbproject/project.properties 2005-01-06 03:27:23 UTC
(rev 526)
@@ -37,7 +37,7 @@
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
-main.class=javer.Main
+main.class=javer.JaverUI
manifest.file=manifest.mf
platform.active=default_platform
run.classpath=\
Modified: trunk/misc/javer/src/javer/HaverClient.java
===================================================================
--- trunk/misc/javer/src/javer/HaverClient.java 2005-01-06 02:28:20 UTC (rev
525)
+++ trunk/misc/javer/src/javer/HaverClient.java 2005-01-06 03:27:23 UTC (rev
526)
@@ -5,12 +5,14 @@
*/
package javer;
+import java.util.*;
+import java.io.*;
/**
*
* @author bdonlan
*/
-public class HaverClient implements Runnable {
+public class HaverClient extends Thread {
private java.lang.String versionString = "Javer/0.1";
private java.net.Socket sock = null;
@@ -18,24 +20,29 @@
private java.io.BufferedReader reader = null;
private java.util.Map wants = null;
private java.util.Map serverevents = null;
+ private java.util.Map notifies = null;
private String uid = null;
+ private Integer lock = new Integer(0);
private void send(String s) throws java.io.IOException {
- if (sock == null) {
- throw new IllegalStateException("Not connected to server");
+ synchronized (lock) {
+ if (sock == null) {
+ throw new IllegalStateException("Not connected to server");
+ }
+ writer.print(s + "\r\n");
+ writer.flush();
+ eventDebugMessage(">>> " + s);
}
- writer.print(s + "\r\n");
- writer.flush();
- System.err.println(">>> " + s);
}
/** Creates a new instance of HaverClient */
public HaverClient() {
initWants();
initServerEvents();
+ notifies = new HashMap();
}
- public void connect(String uid, java.net.Socket socket) throws
java.io.IOException, HaverException {
+ public void connect(String uid, java.net.Socket socket) throws
java.io.IOException {
this.sock = socket;
this.uid = uid;
writer = new java.io.PrintWriter(
@@ -48,13 +55,14 @@
sock.getInputStream()
));
send("HAVER\t" + versionString);
+ start();
}
- public void connect(String uid, String hostname) throws
java.io.IOException, HaverException {
+ public void connect(String uid, String hostname) throws
java.io.IOException {
connect(uid, hostname, 7070);
}
- public void connect(String uid, String hostname, int port) throws
java.io.IOException, HaverException {
+ public void connect(String uid, String hostname, int port) throws
java.io.IOException {
java.net.Socket sock = new java.net.Socket(hostname, port);
connect(uid, sock);
}
@@ -63,34 +71,37 @@
while (sock.isConnected()) {
try {
String s = reader.readLine();
- System.err.println("<<< " + s);
- dispatchCommand(s);
+ eventDebugMessage("<<< " + s);
+ synchronized (lock) {
+ dispatchCommand(s);
+ }
} catch (java.io.IOException e) {
return; /* XXX */
}
}
}
- public abstract class ServerHandler {
+ private abstract class ServerHandler {
public ServerHandler() {}
public abstract void trigger(String[] line) throws java.io.IOException;
}
- public abstract class WantHandler {
+ private abstract class WantHandler {
public WantHandler() {}
public abstract void trigger(String[] args) throws java.io.IOException;
}
- public void initWants() {
+ private void initWants() {
wants = new java.util.HashMap();
wants.put("IDENT", new WantHandler() {
public void trigger(String[] args) throws java.io.IOException {
+ eventIdenting();
send("IDENT\t" + uid);
}
});
}
- public void initServerEvents() {
+ private void initServerEvents() {
serverevents = new java.util.HashMap();
serverevents.put("WANT", new ServerHandler() {
public void trigger(String[] args) throws java.io.IOException {
@@ -102,13 +113,103 @@
h.trigger(args);
}
});
+ serverevents.put("ACCEPT", new ServerHandler() {
+ public void trigger(String[] args) {
+ eventIdentAccepted();
+ }
+ });
+ serverevents.put("MSG", new ServerHandler() {
+ public void trigger(String[] args) {
+ String[] msgArgs = subStringArray(args, 4, args.length - 1);
+ eventMessage(args[1], args[2], args[3], msgArgs);
+ }
+ });
+ serverevents.put("JOIN", new ServerHandler() {
+ public void trigger(String[] args) {
+ if (args.length == 2) {
+ eventChannelJoined(args[1]);
+ } else if (args.length == 3) {
+ eventChannelJoin(args[1], args[2]);
+ }
+ }
+ });
}
- public void dispatchCommand(String s) throws java.io.IOException {
+ private void dispatchCommand(String s) throws java.io.IOException {
String[] parts = s.split("\t");
ServerHandler h = (ServerHandler) serverevents.get(parts[0]);
if (h != null) {
h.trigger(parts);
}
}
+
+ public void join(String channel) throws java.io.IOException {
+ send("JOIN\t" + channel);
+ }
+
+ public void eventIdentAccepted() {
+ /* STUB */
+ }
+
+ public void eventDebugMessage(String s) {
+ /* STUB */
+ }
+
+ public void eventChannelJoined(String where) {
+ /* STUB */
+ }
+
+ public void eventChannelJoin(String where, String who) {
+ /* STUB */
+ }
+
+ public void eventMessage(String where, String who, String type, String[]
args) {
+ if (type.equals("\"")) {
+ eventNormalMessage(where, who, args[0]);
+ } else if (type.equals(":")) {
+ eventAction(where, who, args[0]);
+ }
+ }
+
+ public void eventNormalMessage(String where, String who, String arg) {
+ /* STUB */
+ }
+ public void eventAction(String where, String who, String arg) {
+ /* STUB */
+ }
+
+ public final String[] subStringArray(String[] array, int start, int end) {
+ if (start > end) {
+ return new String[0];
+ }
+ String[] newarray = new String[end - start + 1];
+ for (int i = 0; i <= end - start; i++) {
+ newarray[i] = array[start + i];
+ }
+ return newarray;
+ }
+
+ public void sendMessage(String where, String type, String message) throws
IOException {
+ send("MSG\t" + where + "\t" + type + "\t" + message);
+ }
+
+ public void sendMessage(String where, String type, String[] message)
throws IOException {
+ String s = "MSG\t" + where + "\t" + type + "\t";
+ for (int i = 0; i < message.length; i++) {
+ s = s + message[i];
+ }
+ send(s);
+ }
+
+ public void sendNormalMessage(String where, String message) throws
IOException {
+ sendMessage(where, "\"", message);
+ }
+
+ public void sendAction(String where, String message) throws IOException {
+ sendMessage(where, ":", message);
+ }
+
+ public void eventIdenting() {
+ /* STUB */
+ }
}
Added: trunk/misc/javer/src/javer/JaverUI.form
===================================================================
--- trunk/misc/javer/src/javer/JaverUI.form 2005-01-06 02:28:20 UTC (rev
525)
+++ trunk/misc/javer/src/javer/JaverUI.form 2005-01-06 03:27:23 UTC (rev
526)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.0" type="org.netbeans.modules.form.forminfo.FrameFormInfo">
+ <SyntheticProperties>
+ <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+ </SyntheticProperties>
+ <Events>
+ <EventHandler event="windowClosing"
listener="java.awt.event.WindowListener"
parameters="java.awt.event.WindowEvent" handler="exitForm"/>
+ </Events>
+
+ <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/>
+</Form>
Added: trunk/misc/javer/src/javer/JaverUI.java
===================================================================
--- trunk/misc/javer/src/javer/JaverUI.java 2005-01-06 02:28:20 UTC (rev
525)
+++ trunk/misc/javer/src/javer/JaverUI.java 2005-01-06 03:27:23 UTC (rev
526)
@@ -0,0 +1,59 @@
+/*
+ * JaverUI.java
+ *
+ * Created on January 5, 2005, 9:27 PM
+ */
+
+package javer;
+
+/**
+ *
+ * @author bdonlan
+ */
+public class JaverUI extends java.awt.Frame {
+
+ /** Creates new form JaverUI */
+ public JaverUI() {
+ add(new JaverUIPanel());
+ pack();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {//GEN-BEGIN:initComponents
+
+ setLayout(new javax.swing.BoxLayout(this,
javax.swing.BoxLayout.X_AXIS));
+
+ addWindowListener(new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent evt) {
+ exitForm(evt);
+ }
+ });
+
+ pack();
+ }//GEN-END:initComponents
+
+ /** Exit the Application */
+ private void exitForm(java.awt.event.WindowEvent evt)
{//GEN-FIRST:event_exitForm
+ System.exit(0);
+ }//GEN-LAST:event_exitForm
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String args[]) {
+ java.awt.EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ new JaverUI().setVisible(true);
+ }
+ });
+ }
+
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ // End of variables declaration//GEN-END:variables
+
+}
Property changes on: trunk/misc/javer/src/javer/JaverUI.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/misc/javer/src/javer/JaverUIPanel.form
===================================================================
--- trunk/misc/javer/src/javer/JaverUIPanel.form 2005-01-06 02:28:20 UTC
(rev 525)
+++ trunk/misc/javer/src/javer/JaverUIPanel.form 2005-01-06 03:27:23 UTC
(rev 526)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.0" type="org.netbeans.modules.form.forminfo.PanelFormInfo">
+
+ <Layout
class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+ <SubComponents>
+ <Component class="javax.swing.JTextField" name="input">
+ <Properties>
+ <Property name="text" type="java.lang.String" value="jTextField1"/>
+ </Properties>
+ <Events>
+ <EventHandler event="actionPerformed"
listener="java.awt.event.ActionListener"
parameters="java.awt.event.ActionEvent" handler="inputActionPerformed"/>
+ <EventHandler event="keyTyped" listener="java.awt.event.KeyListener"
parameters="java.awt.event.KeyEvent" handler="inputKeyTyped"/>
+ </Events>
+ <Constraints>
+ <Constraint
layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"
value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+ <BorderConstraints direction="South"/>
+ </Constraint>
+ </Constraints>
+ </Component>
+ <Container class="javax.swing.JSplitPane" name="jSplitPane1">
+ <Constraints>
+ <Constraint
layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"
value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+ <BorderConstraints direction="Center"/>
+ </Constraint>
+ </Constraints>
+
+ <Layout
class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
+ <SubComponents>
+ <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+ <Constraints>
+ <Constraint
layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"
value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
+ <JSplitPaneConstraints position="left"/>
+ </Constraint>
+ </Constraints>
+
+ <Layout
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+ <SubComponents>
+ <Component class="javax.swing.JTextArea" name="chatWindow">
+ </Component>
+ </SubComponents>
+ </Container>
+ <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+ <Constraints>
+ <Constraint
layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"
value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
+ <JSplitPaneConstraints position="right"/>
+ </Constraint>
+ </Constraints>
+
+ <Layout
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+ <SubComponents>
+ <Component class="javax.swing.JList" name="userList">
+ </Component>
+ </SubComponents>
+ </Container>
+ </SubComponents>
+ </Container>
+ </SubComponents>
+</Form>
Added: trunk/misc/javer/src/javer/JaverUIPanel.java
===================================================================
--- trunk/misc/javer/src/javer/JaverUIPanel.java 2005-01-06 02:28:20 UTC
(rev 525)
+++ trunk/misc/javer/src/javer/JaverUIPanel.java 2005-01-06 03:27:23 UTC
(rev 526)
@@ -0,0 +1,148 @@
+/*
+ * JaverUIPanel.java
+ *
+ * Created on January 5, 2005, 9:31 PM
+ */
+
+package javer;
+import java.io.*;
+
+/**
+ *
+ * @author bdonlan
+ */
+public class JaverUIPanel extends java.awt.Panel {
+
+ Client cli;
+
+ /** Creates new form JaverUIPanel */
+ public JaverUIPanel() {
+ initComponents();
+ jSplitPane1.setDividerLocation(.8);
+ cli = new Client();
+ try {
+ cli.connect("bd_javer", "odin.haverdev.org", 7070);
+ } catch (IOException e) {
+ putLine(e.getStackTrace().toString());
+ }
+ }
+
+ public final class Client extends HaverClient {
+ public void eventDebugMessage(String s) {
+ putLine(s);
+ super.eventDebugMessage(s);
+ }
+
+ public void eventIdentAccepted() {
+ putLine("Ident accepted.");
+ try {
+ cli.join("lobby");
+ } catch (IOException e) {
+ putLine(e.getStackTrace().toString());
+ }
+ super.eventIdentAccepted();
+ }
+
+ public void eventChannelJoined(String where) {
+ putLine("Joined " + where);
+ super.eventChannelJoined(where);
+ }
+
+ public void eventMessage(String where, String who, String type,
String[] args) {
+ super.eventMessage(where, who, type, args);
+ }
+
+ public void eventNormalMessage(String where, String who, String arg) {
+ putLine(where + ": <" + who + "> " + arg);
+ super.eventNormalMessage(where, who, arg);
+ }
+
+ public void eventAction(String where, String who, String arg) {
+ putLine(where + ": * " + who + " " + arg);
+ super.eventAction(where, who, arg);
+ }
+
+ public void eventChannelJoin(String where, String who) {
+ putLine(where + ": Joined: " + who);
+ super.eventChannelJoin(where, who);
+ }
+
+ public void eventIdenting() {
+ putLine("Identing to server...");
+ super.eventIdenting();
+ }
+
+ }
+
+ public void putLine(String s) {
+ chatWindow.append(s + "\n");
+ }
+
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ private void initComponents() {//GEN-BEGIN:initComponents
+ input = new javax.swing.JTextField();
+ jSplitPane1 = new javax.swing.JSplitPane();
+ jScrollPane1 = new javax.swing.JScrollPane();
+ chatWindow = new javax.swing.JTextArea();
+ jScrollPane2 = new javax.swing.JScrollPane();
+ userList = new javax.swing.JList();
+
+ setLayout(new java.awt.BorderLayout());
+
+ input.setText("jTextField1");
+ input.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ inputActionPerformed(evt);
+ }
+ });
+ input.addKeyListener(new java.awt.event.KeyAdapter() {
+ public void keyTyped(java.awt.event.KeyEvent evt) {
+ inputKeyTyped(evt);
+ }
+ });
+
+ add(input, java.awt.BorderLayout.SOUTH);
+
+ jScrollPane1.setViewportView(chatWindow);
+
+ jSplitPane1.setLeftComponent(jScrollPane1);
+
+ jScrollPane2.setViewportView(userList);
+
+ jSplitPane1.setRightComponent(jScrollPane2);
+
+ add(jSplitPane1, java.awt.BorderLayout.CENTER);
+
+ }//GEN-END:initComponents
+
+ private void inputKeyTyped(java.awt.event.KeyEvent evt)
{//GEN-FIRST:event_inputKeyTyped
+ // TODO add your handling code here:
+ if (evt.getKeyChar() == '\n') {
+ String line = input.getText();
+ input.setText("");
+ try {
+ cli.sendNormalMessage("lobby", line);
+ } catch (Exception e) { /* XXX */ }
+ }
+ }//GEN-LAST:event_inputKeyTyped
+
+ private void inputActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_inputActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_inputActionPerformed
+
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JTextArea chatWindow;
+ private javax.swing.JTextField input;
+ private javax.swing.JScrollPane jScrollPane1;
+ private javax.swing.JScrollPane jScrollPane2;
+ private javax.swing.JSplitPane jSplitPane1;
+ private javax.swing.JList userList;
+ // End of variables declaration//GEN-END:variables
+
+}
Property changes on: trunk/misc/javer/src/javer/JaverUIPanel.java
___________________________________________________________________
Name: svn:eol-style
+ native
Deleted: trunk/misc/javer/src/javer/Main.java
===================================================================
--- trunk/misc/javer/src/javer/Main.java 2005-01-06 02:28:20 UTC (rev
525)
+++ trunk/misc/javer/src/javer/Main.java 2005-01-06 03:27:23 UTC (rev
526)
@@ -1,29 +0,0 @@
-/*
- * Main.java
- *
- * Created on January 5, 2005, 8:13 PM
- */
-
-package javer;
-
-/**
- *
- * @author bdonlan
- */
-public class Main {
-
- /** Creates a new instance of Main */
- public Main() {
- }
-
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) throws java.io.IOException,
javer.HaverException {
- // TODO code application logic here
- HaverClient c = new HaverClient();
- c.connect("bd_javer", "odin.haverdev.org");
- c.run();
- }
-
-}