update Parser

This commit is contained in:
nkzawa
2017-07-13 22:59:50 +09:00
parent f6bb7678b6
commit 29b0f36542

View File

@@ -1,6 +1,7 @@
package io.socket.parser; package io.socket.parser;
import io.socket.emitter.Emitter; import io.socket.emitter.Emitter;
import io.socket.hasbinary.HasBinary;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONTokener; import org.json.JSONTokener;
@@ -77,6 +78,10 @@ public class Parser {
public Encoder() {} public Encoder() {}
public void encode(Packet obj, Callback callback) { public void encode(Packet obj, Callback callback) {
if ((obj.type == EVENT || obj.type == ACK) && HasBinary.hasBinary(obj.data)) {
obj.type = obj.type == EVENT ? BINARY_EVENT : BINARY_ACK;
}
logger.fine(String.format("encoding packet %s", obj)); logger.fine(String.format("encoding packet %s", obj));
if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) { if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) {
@@ -88,10 +93,7 @@ public class Parser {
} }
private String encodeAsString(Packet obj) { private String encodeAsString(Packet obj) {
StringBuilder str = new StringBuilder(); StringBuilder str = new StringBuilder("" + obj.type);
boolean nsp = false;
str.append(obj.type);
if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) { if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) {
str.append(obj.attachments); str.append(obj.attachments);
@@ -99,20 +101,15 @@ public class Parser {
} }
if (obj.nsp != null && obj.nsp.length() != 0 && !"/".equals(obj.nsp)) { if (obj.nsp != null && obj.nsp.length() != 0 && !"/".equals(obj.nsp)) {
nsp = true;
str.append(obj.nsp); str.append(obj.nsp);
str.append(",");
} }
if (obj.id >= 0) { if (obj.id >= 0) {
if (nsp) {
str.append(",");
nsp = false;
}
str.append(obj.id); str.append(obj.id);
} }
if (obj.data != null) { if (obj.data != null) {
if (nsp) str.append(",");
str.append(obj.data); str.append(obj.data);
} }
@@ -171,11 +168,11 @@ public class Parser {
} }
private static Packet decodeString(String str) { private static Packet decodeString(String str) {
Packet<Object> p = new Packet<Object>();
int i = 0; int i = 0;
int length = str.length(); int length = str.length();
p.type = Character.getNumericValue(str.charAt(0)); Packet<Object> p = new Packet<Object>(Character.getNumericValue(str.charAt(0)));
if (p.type < 0 || p.type > types.length - 1) return error(); if (p.type < 0 || p.type > types.length - 1) return error();
if (BINARY_EVENT == p.type || BINARY_ACK == p.type) { if (BINARY_EVENT == p.type || BINARY_ACK == p.type) {