diff --git a/.externalToolBuilders/Update Handlers [Builder].launch b/.externalToolBuilders/Update Handlers [Builder].launch
new file mode 100644
index 0000000..3a3ddab
--- /dev/null
+++ b/.externalToolBuilders/Update Handlers [Builder].launch
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.externalToolBuilders/Update JS Constants [Builder].launch b/.externalToolBuilders/Update JS Constants [Builder].launch
new file mode 100644
index 0000000..d6c5f98
--- /dev/null
+++ b/.externalToolBuilders/Update JS Constants [Builder].launch
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
index a541a3c..fa06ee8 100644
--- a/.project
+++ b/.project
@@ -5,6 +5,34 @@
+
+ org.eclipse.ui.externaltools.ExternalToolBuilder
+ auto,full,incremental,
+
+
+ LaunchConfigHandle
+ <project>/.externalToolBuilders/Update Handlers [Builder].launch
+
+
+ incclean
+ true
+
+
+
+
+ org.eclipse.ui.externaltools.ExternalToolBuilder
+ auto,full,incremental,
+
+
+ LaunchConfigHandle
+ <project>/.externalToolBuilders/Update JS Constants [Builder].launch
+
+
+ incclean
+ true
+
+
+
org.eclipse.wst.jsdt.core.javascriptValidator
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index c9744bc..4bacbc9 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,12 @@
-#Fri Dec 09 20:46:02 PST 2011
+#Thu Jan 12 19:45:21 PST 2012
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
diff --git a/WebContent/index.jsp b/WebContent/index.jsp
index c5bd08f..4a26cfd 100644
--- a/WebContent/index.jsp
+++ b/WebContent/index.jsp
@@ -10,6 +10,7 @@
<%-- cah must be first, ajax must be before app. app probably has to be last. --%>
<%-- TODO make this be dynamic with looking at the filesystem and using jquery --%>
+
diff --git a/WebContent/js/cah.ajax.handlers.js b/WebContent/js/cah.ajax.handlers.js
index 8f78a2c..f733916 100644
--- a/WebContent/js/cah.ajax.handlers.js
+++ b/WebContent/js/cah.ajax.handlers.js
@@ -43,7 +43,7 @@ cah.ajax.ErrorHandlers.firstload = function(data) {
cah.ajax.after_registered = function() {
cah.log.debug("done registering");
// TODO once there are channels, this needs to specify the global channel
- cah.Ajax.build("names").run();
+ cah.Ajax.build(cah.$.AjaxOperation.NAMES).run();
cah.longpoll.longPoll();
};
diff --git a/WebContent/js/cah.ajax.js b/WebContent/js/cah.ajax.js
index aaa04a0..c5c97cf 100644
--- a/WebContent/js/cah.ajax.js
+++ b/WebContent/js/cah.ajax.js
@@ -26,7 +26,7 @@ $(document).ready(function() {
/**
* Singleton instance for ajax utility.
*
- * @type {cah.ajax.lib}
+ * @type {cah.Ajax}
*/
cah.Ajax.instance = new cah.Ajax();
$.ajaxSetup({
diff --git a/WebContent/js/cah.app.js b/WebContent/js/cah.app.js
index 6b25247..ece0152 100644
--- a/WebContent/js/cah.app.js
+++ b/WebContent/js/cah.app.js
@@ -6,7 +6,7 @@
$(document).ready(function() {
// see if we already exist on the server so we can resume
- cah.Ajax.build("firstload").run();
+ cah.Ajax.build(cah.$.AjaxOperation.FIRST_LOAD).run();
// TODO see if we have a stored nickname somewhere
$("#nicknameconfirm").click(nicknameconfirm_click);
@@ -31,7 +31,7 @@ function nickbox_keyup(e) {
function nicknameconfirm_click(e) {
var nickname = $.trim($("#nickname").val());
- cah.Ajax.build("register").withNickname(nickname).run();
+ cah.Ajax.build(cah.$.AjaxOperation.REGISTER).withNickname(nickname).run();
}
function chat_keyup(e) {
@@ -44,12 +44,12 @@ function chat_keyup(e) {
function chatsubmit_click(e) {
var text = $.trim($("#chat").val());
// TODO when I get multiple channels working, this needs to know active and pass it
- cah.Ajax.build("chat").withMessage(text).run();
+ cah.Ajax.build(cah.$.AjaxOperation.CHAT).withMessage(text).run();
cah.log.status("<" + cah.nickname + "> " + text);
$("#chat").val("");
$("#chat").focus();
}
function logout_click(e) {
- cah.Ajax.build("logout").run();
+ cah.Ajax.build(cah.$.AjaxOperation.LOG_OUT).run();
}
diff --git a/WebContent/js/cah.constants.js b/WebContent/js/cah.constants.js
new file mode 100644
index 0000000..3ed7df7
--- /dev/null
+++ b/WebContent/js/cah.constants.js
@@ -0,0 +1,22 @@
+// This file is automatically generated. Do not edit.
+
+cah.$ = {};
+
+cah.$.AjaxOperation = function() {
+ // pass
+};
+cah.$.AjaxOperation.prototype.dummy = undefined;
+cah.$.AjaxOperation.FIRST_LOAD = "firstload";
+cah.$.AjaxOperation.LOG_OUT = "logout";
+cah.$.AjaxOperation.REGISTER = "register";
+cah.$.AjaxOperation.CHAT = "chat";
+cah.$.AjaxOperation.NAMES = "names";
+
+cah.$.DisconnectReason = function() {
+ // pass
+};
+cah.$.DisconnectReason.prototype.dummy = undefined;
+cah.$.DisconnectReason.PING_TIMEOUT = "ping_timeout";
+cah.$.DisconnectReason.KICKED = "kicked";
+cah.$.DisconnectReason.MANUAL = "manual";
+
diff --git a/WebContent/js/cah.longpoll.handlers.js b/WebContent/js/cah.longpoll.handlers.js
index 6a4121e..3c2e2e8 100644
--- a/WebContent/js/cah.longpoll.handlers.js
+++ b/WebContent/js/cah.longpoll.handlers.js
@@ -22,15 +22,15 @@ cah.longpoll.EventHandlers.player_leave = function(data) {
var friendly_reason = "Leaving";
// see net.socialgamer.cah.data.User.DisconnectReason
switch (data.reason) {
- case "MANUAL":
+ case cah.$.DisconnectReason.KICKED:
+ friendly_reason = "Kicked by server";
+ break;
+ case cah.$.DisconnectReason.MANUAL:
friendly_reason = "Leaving";
break;
- case "PING_TIMEOUT":
+ case cah.$.DisconnectReason.PING_TIMEOUT:
friendly_reason = "Ping timeout";
break;
- case "KICKED":
- friendly_reason = "Kicked by server";
- break;
}
cah.log.status(data.nickname + " has disconnected (" + friendly_reason + ").");
};
diff --git a/src/net/socialgamer/cah/Constants.java b/src/net/socialgamer/cah/Constants.java
index c03b21c..86da315 100644
--- a/src/net/socialgamer/cah/Constants.java
+++ b/src/net/socialgamer/cah/Constants.java
@@ -2,26 +2,32 @@ package net.socialgamer.cah;
public class Constants {
public enum DisconnectReason {
- MANUAL, PING_TIMEOUT, KICKED
- }
+ KICKED("kicked"), MANUAL("manual"), PING_TIMEOUT("ping_timeout");
- /**
- * Types of messages that can be queued. The numerical value is the priority that this message
- * should be delivered (lower = more important) compared to other queued messages.
- *
- * @author ajanata
- */
- public enum MessageType {
- PLAYER_EVENT(3), GAME_PLAYER_EVENT(4), CHAT(5);
+ private final String reason;
- private final int weight;
-
- MessageType(final int weight) {
- this.weight = weight;
+ DisconnectReason(final String reason) {
+ this.reason = reason;
}
- public int getWeight() {
- return weight;
+ @Override
+ public String toString() {
+ return reason;
+ }
+ }
+
+ public enum AjaxOperation {
+ CHAT("chat"), FIRST_LOAD("firstload"), LOG_OUT("logout"), NAMES("names"), REGISTER("register");
+
+ private final String op;
+
+ AjaxOperation(final String op) {
+ this.op = op;
+ }
+
+ @Override
+ public String toString() {
+ return op;
}
}
}
diff --git a/src/net/socialgamer/cah/UpdateHandlerList.cmd b/src/net/socialgamer/cah/UpdateHandlerList.cmd
new file mode 100644
index 0000000..982569b
--- /dev/null
+++ b/src/net/socialgamer/cah/UpdateHandlerList.cmd
@@ -0,0 +1 @@
+java -cp build\classes net.socialgamer.cah.UpdateHandlerList
\ No newline at end of file
diff --git a/src/net/socialgamer/cah/handlers/UpdateHandlerList.java b/src/net/socialgamer/cah/UpdateHandlerList.java
similarity index 98%
rename from src/net/socialgamer/cah/handlers/UpdateHandlerList.java
rename to src/net/socialgamer/cah/UpdateHandlerList.java
index 593d118..f232cf3 100644
--- a/src/net/socialgamer/cah/handlers/UpdateHandlerList.java
+++ b/src/net/socialgamer/cah/UpdateHandlerList.java
@@ -1,4 +1,4 @@
-package net.socialgamer.cah.handlers;
+package net.socialgamer.cah;
import java.io.File;
import java.io.PrintWriter;
diff --git a/src/net/socialgamer/cah/UpdateJsConstants.cmd b/src/net/socialgamer/cah/UpdateJsConstants.cmd
new file mode 100644
index 0000000..77678bc
--- /dev/null
+++ b/src/net/socialgamer/cah/UpdateJsConstants.cmd
@@ -0,0 +1 @@
+java -cp build\classes net.socialgamer.cah.UpdateJsConstants
\ No newline at end of file
diff --git a/src/net/socialgamer/cah/UpdateJsConstants.java b/src/net/socialgamer/cah/UpdateJsConstants.java
new file mode 100644
index 0000000..2c4a7dc
--- /dev/null
+++ b/src/net/socialgamer/cah/UpdateJsConstants.java
@@ -0,0 +1,76 @@
+package net.socialgamer.cah;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class UpdateJsConstants {
+
+ private static final String enumHeaderFmt = "cah.$.%s = function() {\r\n // pass\r\n};\r\n";
+ private static final String enumDummyFmt = "cah.$.%s.prototype.dummy = undefined;\r\n";
+ private static final String enumValueFmt = "cah.$.%s.%s = \"%s\";\r\n";
+
+ /**
+ * @param args
+ */
+ @SuppressWarnings("rawtypes")
+ public static void main(final String[] args) throws Exception {
+ final String dir = "WebContent/js/";
+ final File outFile = new File(dir + "cah.constants.js");
+ assert outFile.canWrite();
+ assert outFile.delete();
+ assert outFile.createNewFile();
+ final PrintWriter writer = new PrintWriter(outFile);
+
+ writer.println("// This file is automatically generated. Do not edit.");
+ writer.println();
+ writer.println("cah.$ = {};");
+ writer.println();
+
+ final Class[] classes = Constants.class.getClasses();
+ for (final Class c : classes) {
+ final String cName = c.getName().split("\\$")[1];
+ System.out.println(cName);
+ writer.format(enumHeaderFmt, cName);
+ writer.format(enumDummyFmt, cName);
+ final Map values = getEnumValues(c);
+ for (final String key : values.keySet()) {
+ final String value = values.get(key);
+ writer.format(enumValueFmt, cName, key, value);
+ }
+ writer.println();
+ }
+ writer.flush();
+ writer.close();
+ }
+
+ @SuppressWarnings("rawtypes")
+ private static Map getEnumValues(final Class enumClass)
+ throws IllegalArgumentException, IllegalAccessException {
+ if (!enumClass.isEnum()) {
+ throw new IllegalArgumentException(enumClass.getName() + " is not an enum");
+ }
+
+ final Field[] flds = enumClass.getDeclaredFields();
+ final HashMap enumMap = new HashMap();
+ for (final Field f : flds) {
+ if (f.isEnumConstant()) {
+ enumMap.put(f.getName(), f.get(null).toString());
+ }
+ }
+ return enumMap;
+ }
+}
+
+////Automatically generated file. Do not edit!
+//
+//cah.$ = {};
+//
+//cah.$.DisconnectReason = {};
+//cah.$.DisconnectReason.prototype.dummy = undefined;
+//cah.$.DisconnectReason.KICKED = "kicked";
+//cah.$.DisconnectReason.MANUAL = "manual";
+//cah.$.DisconnectReason.PING_TIMEOUT = "ping_timeout";
diff --git a/src/net/socialgamer/cah/data/ConnectedUsers.java b/src/net/socialgamer/cah/data/ConnectedUsers.java
index e405c04..673a5ae 100644
--- a/src/net/socialgamer/cah/data/ConnectedUsers.java
+++ b/src/net/socialgamer/cah/data/ConnectedUsers.java
@@ -7,7 +7,7 @@ import java.util.Iterator;
import java.util.Map;
import net.socialgamer.cah.Constants.DisconnectReason;
-import net.socialgamer.cah.Constants.MessageType;
+import net.socialgamer.cah.data.QueuedMessage.MessageType;
/**
diff --git a/src/net/socialgamer/cah/data/Game.java b/src/net/socialgamer/cah/data/Game.java
index 430e479..8b1e5e2 100644
--- a/src/net/socialgamer/cah/data/Game.java
+++ b/src/net/socialgamer/cah/data/Game.java
@@ -5,7 +5,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import net.socialgamer.cah.Constants.MessageType;
+import net.socialgamer.cah.data.QueuedMessage.MessageType;
public class Game {
diff --git a/src/net/socialgamer/cah/data/QueuedMessage.java b/src/net/socialgamer/cah/data/QueuedMessage.java
index b9d9def..d9a12db 100644
--- a/src/net/socialgamer/cah/data/QueuedMessage.java
+++ b/src/net/socialgamer/cah/data/QueuedMessage.java
@@ -2,8 +2,6 @@ package net.socialgamer.cah.data;
import java.util.Map;
-import net.socialgamer.cah.Constants.MessageType;
-
public class QueuedMessage implements Comparable {
@@ -31,4 +29,24 @@ public class QueuedMessage implements Comparable {
public int compareTo(final QueuedMessage qm) {
return this.messageType.getWeight() - qm.messageType.getWeight();
}
+
+ /**
+ * Types of messages that can be queued. The numerical value is the priority that this message
+ * should be delivered (lower = more important) compared to other queued messages.
+ *
+ * @author ajanata
+ */
+ public enum MessageType {
+ PLAYER_EVENT(3), GAME_PLAYER_EVENT(4), CHAT(5);
+
+ private final int weight;
+
+ MessageType(final int weight) {
+ this.weight = weight;
+ }
+
+ public int getWeight() {
+ return weight;
+ }
+ }
}
diff --git a/src/net/socialgamer/cah/handlers/ChatHandler.java b/src/net/socialgamer/cah/handlers/ChatHandler.java
index 54b31af..a192fba 100644
--- a/src/net/socialgamer/cah/handlers/ChatHandler.java
+++ b/src/net/socialgamer/cah/handlers/ChatHandler.java
@@ -5,9 +5,10 @@ import java.util.Map;
import javax.servlet.http.HttpSession;
-import net.socialgamer.cah.Constants.MessageType;
+import net.socialgamer.cah.Constants.AjaxOperation;
import net.socialgamer.cah.Server;
import net.socialgamer.cah.data.ConnectedUsers;
+import net.socialgamer.cah.data.QueuedMessage.MessageType;
import net.socialgamer.cah.data.User;
import com.google.inject.Inject;
@@ -15,7 +16,7 @@ import com.google.inject.Inject;
public class ChatHandler extends Handler {
- public static final String OP = "chat";
+ public static final String OP = AjaxOperation.CHAT.toString();
private final ConnectedUsers users;
diff --git a/src/net/socialgamer/cah/handlers/FirstLoadHandler.java b/src/net/socialgamer/cah/handlers/FirstLoadHandler.java
index 74851e4..cc3d60e 100644
--- a/src/net/socialgamer/cah/handlers/FirstLoadHandler.java
+++ b/src/net/socialgamer/cah/handlers/FirstLoadHandler.java
@@ -5,6 +5,7 @@ import java.util.Map;
import javax.servlet.http.HttpSession;
+import net.socialgamer.cah.Constants.AjaxOperation;
import net.socialgamer.cah.data.User;
@@ -17,7 +18,7 @@ import net.socialgamer.cah.data.User;
*/
public class FirstLoadHandler extends Handler {
- public static final String OP = "firstload";
+ public static final String OP = AjaxOperation.FIRST_LOAD.toString();
@Override
public Map handle(final Map parameters,
diff --git a/src/net/socialgamer/cah/handlers/Handlers.java b/src/net/socialgamer/cah/handlers/Handlers.java
index 85e33a8..36c0cce 100644
--- a/src/net/socialgamer/cah/handlers/Handlers.java
+++ b/src/net/socialgamer/cah/handlers/Handlers.java
@@ -15,6 +15,5 @@ public class Handlers {
LIST.put(LogoutHandler.OP, LogoutHandler.class);
LIST.put(NamesHandler.OP, NamesHandler.class);
LIST.put(RegisterHandler.OP, RegisterHandler.class);
- LIST.put(TestHandler.OP, TestHandler.class);
}
}
diff --git a/src/net/socialgamer/cah/handlers/LogoutHandler.java b/src/net/socialgamer/cah/handlers/LogoutHandler.java
index 5e6bbae..efcf542 100644
--- a/src/net/socialgamer/cah/handlers/LogoutHandler.java
+++ b/src/net/socialgamer/cah/handlers/LogoutHandler.java
@@ -5,6 +5,7 @@ import java.util.Map;
import javax.servlet.http.HttpSession;
+import net.socialgamer.cah.Constants.AjaxOperation;
import net.socialgamer.cah.Constants.DisconnectReason;
import net.socialgamer.cah.Server;
import net.socialgamer.cah.data.ConnectedUsers;
@@ -15,7 +16,7 @@ import com.google.inject.Inject;
public class LogoutHandler extends Handler {
- public final static String OP = "logout";
+ public final static String OP = AjaxOperation.LOG_OUT.toString();
private final ConnectedUsers users;
diff --git a/src/net/socialgamer/cah/handlers/NamesHandler.java b/src/net/socialgamer/cah/handlers/NamesHandler.java
index 4256b4c..cd0668b 100644
--- a/src/net/socialgamer/cah/handlers/NamesHandler.java
+++ b/src/net/socialgamer/cah/handlers/NamesHandler.java
@@ -8,6 +8,7 @@ import java.util.Map;
import javax.servlet.http.HttpSession;
+import net.socialgamer.cah.Constants.AjaxOperation;
import net.socialgamer.cah.Server;
import net.socialgamer.cah.data.ConnectedUsers;
import net.socialgamer.cah.data.User;
@@ -17,7 +18,7 @@ import com.google.inject.Inject;
public class NamesHandler extends Handler {
- public static final String OP = "names";
+ public static final String OP = AjaxOperation.NAMES.toString();
private final ConnectedUsers users;
diff --git a/src/net/socialgamer/cah/handlers/RegisterHandler.java b/src/net/socialgamer/cah/handlers/RegisterHandler.java
index f206a1d..e4378a7 100644
--- a/src/net/socialgamer/cah/handlers/RegisterHandler.java
+++ b/src/net/socialgamer/cah/handlers/RegisterHandler.java
@@ -6,6 +6,7 @@ import java.util.regex.Pattern;
import javax.servlet.http.HttpSession;
+import net.socialgamer.cah.Constants.AjaxOperation;
import net.socialgamer.cah.Server;
import net.socialgamer.cah.data.ConnectedUsers;
import net.socialgamer.cah.data.User;
@@ -15,7 +16,7 @@ import com.google.inject.Inject;
public class RegisterHandler extends Handler {
- public static final String OP = "register";
+ public static final String OP = AjaxOperation.REGISTER.toString();
private static final Pattern validName = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_]{2,29}");
diff --git a/src/net/socialgamer/cah/handlers/TestHandler.java b/src/net/socialgamer/cah/handlers/TestHandler.java
deleted file mode 100644
index 574310a..0000000
--- a/src/net/socialgamer/cah/handlers/TestHandler.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package net.socialgamer.cah.handlers;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpSession;
-
-
-public class TestHandler extends Handler {
-
- public static final String OP = "test";
-
- @Override
- public Map handle(final Map parameters,
- final HttpSession session) {
- // TODO Auto-generated method stub
- return null;
- }
-}
diff --git a/src/net/socialgamer/cah/handlers/UpdateHandlerList.cmd b/src/net/socialgamer/cah/handlers/UpdateHandlerList.cmd
deleted file mode 100644
index a07b825..0000000
--- a/src/net/socialgamer/cah/handlers/UpdateHandlerList.cmd
+++ /dev/null
@@ -1 +0,0 @@
-java -cp build\classes net.socialgamer.cah.handlers.UpdateHandlerList
\ No newline at end of file
diff --git a/test/net/socialgamer/cah/data/GameTest.java b/test/net/socialgamer/cah/data/GameTest.java
index 265d703..0396864 100644
--- a/test/net/socialgamer/cah/data/GameTest.java
+++ b/test/net/socialgamer/cah/data/GameTest.java
@@ -13,7 +13,7 @@ import static org.junit.Assert.assertTrue;
import java.util.Collection;
import java.util.HashMap;
-import net.socialgamer.cah.Constants.MessageType;
+import net.socialgamer.cah.data.QueuedMessage.MessageType;
import org.junit.Before;
import org.junit.Test;