1.1 --- a/ko4j/src/main/java/org/netbeans/html/ko4j/LoadWS.java Thu Jan 09 15:03:34 2014 +0100
1.2 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/LoadWS.java Thu Jan 09 20:39:23 2014 +0100
1.3 @@ -44,12 +44,8 @@
1.4
1.5 import net.java.html.js.JavaScriptBody;
1.6 import org.apidesign.html.json.spi.JSONCall;
1.7 -import org.json.JSONArray;
1.8 -import org.json.JSONException;
1.9 -import org.json.JSONObject;
1.10 -import org.json.JSONTokener;
1.11
1.12 -/** Communication with WebSockets for WebView 1.8.
1.13 +/** Communication with WebSockets via browser's WebSocket object.
1.14 *
1.15 * @author Jaroslav Tulach <jtulach@netbeans.org>
1.16 */
1.17 @@ -57,7 +53,6 @@
1.18 private static final boolean SUPPORTED = isWebSocket();
1.19 private final Object ws;
1.20 private final JSONCall call;
1.21 -
1.22 LoadWS(JSONCall first, String url) {
1.23 call = first;
1.24 ws = initWebSocket(this, url);
1.25 @@ -84,18 +79,17 @@
1.26 }
1.27 }
1.28
1.29 +
1.30 + @JavaScriptBody(args = { "data" }, body = "try {\n"
1.31 + + " return eval('(' + data + ')');\n"
1.32 + + " } catch (error) {;\n"
1.33 + + " return data;\n"
1.34 + + " }\n"
1.35 + )
1.36 + private static native Object toJSON(String data);
1.37 +
1.38 void onMessage(Object ev, String data) {
1.39 - Object json;
1.40 - try {
1.41 - data = data.trim();
1.42 -
1.43 - JSONTokener tok = new JSONTokener(data);
1.44 - Object obj;
1.45 - obj = data.startsWith("[") ? new JSONArray(tok) : new JSONObject(tok);
1.46 - json = LoadJSON.convertToArray(obj);
1.47 - } catch (JSONException ex) {
1.48 - json = data;
1.49 - }
1.50 + Object json = toJSON(data);
1.51 call.notifySuccess(json);
1.52 }
1.53
1.54 @@ -113,20 +107,28 @@
1.55 }
1.56
1.57 @JavaScriptBody(args = { "back", "url" }, javacall = true, body = ""
1.58 - + "if (window.WebSocket) {"
1.59 - + " try {"
1.60 - + " var ws = new window.WebSocket(url);"
1.61 - + " ws.onopen = function(ev) { back.@org.netbeans.html.ko4j.LoadWS::onOpen(Ljava/lang/Object;)(ev); };"
1.62 - + " ws.onmessage = function(ev) { back.@org.netbeans.html.ko4j.LoadWS::onMessage(Ljava/lang/Object;Ljava/lang/String;)(ev, ev.data); };"
1.63 - + " ws.onerror = function(ev) { back.@org.netbeans.html.ko4j.LoadWS::onError(Ljava/lang/Object;)(ev); };"
1.64 - + " ws.onclose = function(ev) { back.@org.netbeans.html.ko4j.LoadWS::onClose(ZILjava/lang/String;)(ev.wasClean, ev.code, ev.reason); };"
1.65 - + " return ws;"
1.66 - + " } catch (ex) {"
1.67 - + " return null;"
1.68 - + " }"
1.69 - + "} else {"
1.70 - + " return null;"
1.71 - + "}"
1.72 + + "if (window.WebSocket) {\n"
1.73 + + " try {\n"
1.74 + + " var ws = new window.WebSocket(url);\n"
1.75 + + " ws.onopen = function(ev) {\n"
1.76 + + " back.@org.netbeans.html.ko4j.LoadWS::onOpen(Ljava/lang/Object;)(ev);\n"
1.77 + + " };\n"
1.78 + + " ws.onmessage = function(ev) {\n"
1.79 + + " back.@org.netbeans.html.ko4j.LoadWS::onMessage(Ljava/lang/Object;Ljava/lang/String;)(ev, ev.data);\n"
1.80 + + " };\n"
1.81 + + " ws.onerror = function(ev) {\n"
1.82 + + " back.@org.netbeans.html.ko4j.LoadWS::onError(Ljava/lang/Object;)(ev);\n"
1.83 + + " };\n"
1.84 + + " ws.onclose = function(ev) {\n"
1.85 + + " back.@org.netbeans.html.ko4j.LoadWS::onClose(ZILjava/lang/String;)(ev.wasClean, ev.code, ev.reason);\n"
1.86 + + " };\n"
1.87 + + " return ws;\n"
1.88 + + " } catch (ex) {\n"
1.89 + + " return null;\n"
1.90 + + " }\n"
1.91 + + "} else {\n"
1.92 + + " return null;\n"
1.93 + + "}\n"
1.94 )
1.95 private static Object initWebSocket(Object back, String url) {
1.96 return null;