diff --git a/src/main/java/com/corundumstudio/socketio/parser/Encoder.java b/src/main/java/com/corundumstudio/socketio/parser/Encoder.java index 0341cca..2a80466 100644 --- a/src/main/java/com/corundumstudio/socketio/parser/Encoder.java +++ b/src/main/java/com/corundumstudio/socketio/parser/Encoder.java @@ -25,7 +25,7 @@ public class Encoder { this.objectMapper = objectMapper; } - public String encodePayload(List packets) { + public CharSequence encodePayload(List packets) { if (packets.size() == 1) { return packets.get(0); } @@ -33,7 +33,7 @@ public class Encoder { for (String packet : packets) { result.append('\ufffd').append(packet.length()).append('\ufffd').append(packet); } - return result.toString(); + return result; } public String encodePacket(Packet packet) throws IOException { @@ -91,12 +91,12 @@ public class Encoder { errorData.append("+").append(adviceCode); } } - data = errorData.toString(); + data = errorData; break; } - List params = new ArrayList(); + List params = new ArrayList(4); params.add(type); if ("data".equals(ack)) { params.add(id + "+"); @@ -114,7 +114,7 @@ public class Encoder { private String join(String delimiter, List args) { StringBuilder result = new StringBuilder(); for (Object arg : args) { - result.append(arg).append(":"); + result.append(arg).append(delimiter); } return result.substring(0, result.length()-1); } diff --git a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java index be3ebf0..32bbc85 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java +++ b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java @@ -76,12 +76,12 @@ public class XHRPollingClient implements SocketIOClient { if(!connected || messages.isEmpty()) { return NullChannelFuture.INSTANCE; } - String data = encoder.encodePayload(messages); + CharSequence data = encoder.encodePayload(messages); messages.clear(); return write(data); } - private ChannelFuture write(String message) { + private ChannelFuture write(CharSequence message) { HttpResponse res = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.OK); res.addHeader(CONTENT_TYPE, "text/plain; charset=UTF-8"); @@ -125,15 +125,14 @@ public class XHRPollingClient implements SocketIOClient { } } - public ChannelFuture sendUnencoded(String message) { + public synchronized ChannelFuture sendUnencoded(String message) { messages.add(message); return sendPayload(); } public ChannelFuture sendJsonp(String message) { jsonp = true; - messages.add(message); - return sendPayload(); + return sendUnencoded(message); } public void disconnect() {