1.1 --- a/json/src/main/java/org/apidesign/html/json/spi/Proto.java Fri Jan 03 08:16:39 2014 +0100
1.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/Proto.java Fri Jan 03 10:03:04 2014 +0100
1.3 @@ -169,6 +169,35 @@
1.4 JSON.loadJSON(context, new Rcvr(), urlBefore, urlAfter, method, data);
1.5 }
1.6
1.7 + public Object wsOpen(final int index, String url, Object data) {
1.8 + class WSrcvr extends RcvrJSON {
1.9 + @Override
1.10 + protected void onError(MsgEvnt msg) {
1.11 + type.onMessage(obj, index, 2, msg.getException());
1.12 + }
1.13 +
1.14 + @Override
1.15 + protected void onMessage(MsgEvnt msg) {
1.16 + type.onMessage(obj, index, 1, msg.getValues());
1.17 + }
1.18 +
1.19 + @Override
1.20 + protected void onClose(MsgEvnt msg) {
1.21 + type.onMessage(obj, index, 3, null);
1.22 + }
1.23 +
1.24 + @Override
1.25 + protected void onOpen(MsgEvnt msg) {
1.26 + type.onMessage(obj, index, 0, null);
1.27 + }
1.28 + }
1.29 + return JSON.openWS(context, new WSrcvr(), url, data);
1.30 + }
1.31 +
1.32 + public void wsSend(Object webSocket, String url, Object data) {
1.33 + ((JSON.WS)webSocket).send(context, url, data);
1.34 + }
1.35 +
1.36 public String toString(Object data, String propName) {
1.37 return JSON.toString(context, data, propName);
1.38 }
2.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Fri Jan 03 08:16:39 2014 +0100
2.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Fri Jan 03 10:03:04 2014 +0100
2.3 @@ -1047,11 +1047,11 @@
2.4 body.append(") {\n");
2.5 boolean webSocket = onR.method().equals("WebSocket");
2.6 if (webSocket) {
2.7 -// if (generateWSReceiveBody(body, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
2.8 -// return false;
2.9 -// }
2.10 + if (generateWSReceiveBody(index++, body, inType, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
2.11 + return false;
2.12 + }
2.13 body.append(" }\n");
2.14 - body.append(" private org.netbeans.html.json.impl.JSON.WS ws_" + e.getSimpleName() + ";\n");
2.15 + body.append(" private Object ws_" + e.getSimpleName() + ";\n");
2.16 } else {
2.17 if (generateJSONReceiveBody(index++, body, inType, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
2.18 return false;
2.19 @@ -1135,13 +1135,11 @@
2.20 return false;
2.21 }
2.22
2.23 - private boolean generateWSReceiveBody(StringWriter body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror) {
2.24 + private boolean generateWSReceiveBody(int index, StringWriter method, StringBuilder body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror) {
2.25 body.append(
2.26 - " class ProcessResult extends org.netbeans.html.json.impl.RcvrJSON {\n" +
2.27 - " @Override\n" +
2.28 - " public void onOpen(org.netbeans.html.json.impl.RcvrJSON.MsgEvnt ev) {\n"
2.29 - );
2.30 - body.append(" ").append(clazz.getSimpleName()).append(".").append(n).append("(");
2.31 + " case " + index + ": {\n" +
2.32 + " if (type == 0) { /* on open */\n" +
2.33 + " ").append(clazz.getSimpleName()).append(".").append(n).append("(");
2.34 {
2.35 String sep = "";
2.36 for (String arg : args) {
2.37 @@ -1156,10 +1154,9 @@
2.38 }
2.39 body.append(");\n");
2.40 body.append(
2.41 - " }\n" +
2.42 - " @Override\n" +
2.43 - " public void onError(org.netbeans.html.json.impl.RcvrJSON.MsgEvnt ev) {\n" +
2.44 - " Exception value = ev.getException();\n"
2.45 + " return;\n" +
2.46 + " } else if (type == 2) { /* on error */\n" +
2.47 + " Exception value = (Exception)data;\n"
2.48 );
2.49 if (onR.onError().isEmpty()) {
2.50 body.append(
2.51 @@ -1170,16 +1167,16 @@
2.52 return true;
2.53 }
2.54 body.append(" ").append(clazz.getSimpleName()).append(".").append(onR.onError()).append("(");
2.55 - body.append(className).append(".this, value);\n");
2.56 + body.append("model, value);\n");
2.57 }
2.58 body.append(
2.59 - " }\n" +
2.60 - " @Override\n" +
2.61 - " public void onMessage(org.netbeans.html.json.impl.RcvrJSON.MsgEvnt ev) {\n"
2.62 + " return;\n" +
2.63 + " } else if (type == 1) {\n" +
2.64 + " Object[] ev = (Object[])data;\n"
2.65 );
2.66 if (expectsList) {
2.67 body.append(
2.68 - " " + modelClass + "[] arr = new " + modelClass + "[ev.dataSize()];\n"
2.69 + " " + modelClass + "[] arr = new " + modelClass + "[ev.length];\n"
2.70 );
2.71 } else {
2.72 body.append(
2.73 @@ -1187,8 +1184,8 @@
2.74 );
2.75 }
2.76 body.append(
2.77 - " ev.dataRead(proto.getContext(), " + modelClass + ".class, arr);\n"
2.78 - );
2.79 + " TYPE.copyJSON(model.proto.getContext(), ev, " + modelClass + ".class, arr);\n"
2.80 + );
2.81 {
2.82 body.append(" ").append(clazz.getSimpleName()).append(".").append(n).append("(");
2.83 String sep = "";
2.84 @@ -1200,28 +1197,26 @@
2.85 body.append(");\n");
2.86 }
2.87 body.append(
2.88 - " }\n"
2.89 + " return;\n" +
2.90 + " }"
2.91 );
2.92 if (!onR.onError().isEmpty()) {
2.93 + body.append(" else if (type == 3) { /* on close */\n");
2.94 + body.append(" ").append(clazz.getSimpleName()).append(".").append(onR.onError()).append("(");
2.95 + body.append("model, null);\n");
2.96 body.append(
2.97 - " @Override\n"
2.98 - + " public void onClose(org.netbeans.html.json.impl.RcvrJSON.MsgEvnt ev) {\n"
2.99 - );
2.100 - body.append(" ").append(clazz.getSimpleName()).append(".").append(onR.onError()).append("(");
2.101 - body.append(className).append(".this, null);\n");
2.102 - body.append(
2.103 - " }\n"
2.104 + " }"
2.105 );
2.106 }
2.107 + body.append("\n");
2.108 body.append(" }\n");
2.109 - body.append(" if (this.ws_").append(e.getSimpleName()).append(" == null) {\n");
2.110 - body.append(" ProcessResult pr = new ProcessResult();\n");
2.111 - body.append(" this.ws_").append(e.getSimpleName());
2.112 - body.append("= org.netbeans.html.json.impl.JSON.openWS(proto.getContext(), pr,\n ");
2.113 - body.append(urlBefore).append(", data);\n");
2.114 - body.append(" } else {\n");
2.115 - body.append(" this.ws_").append(e.getSimpleName()).append(".send(proto.getContext(), ").append(urlBefore).append(", data);\n");
2.116 - body.append(" }\n");
2.117 + method.append(" if (this.ws_").append(e.getSimpleName()).append(" == null) {\n");
2.118 + method.append(" this.ws_").append(e.getSimpleName());
2.119 + method.append("= proto.wsOpen(" + index + ", ");
2.120 + method.append(urlBefore).append(", data);\n");
2.121 + method.append(" } else {\n");
2.122 + method.append(" proto.wsSend(this.ws_").append(e.getSimpleName()).append(", ").append(urlBefore).append(", data);\n");
2.123 + method.append(" }\n");
2.124 return false;
2.125 }
2.126