Browse Source

Thread safety for XHRPollingClient

master
Nikita 14 years ago
parent
commit
8445e6b4a8
  1. 10
      src/main/java/com/corundumstudio/socketio/parser/Encoder.java
  2. 9
      src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java

10
src/main/java/com/corundumstudio/socketio/parser/Encoder.java

@ -25,7 +25,7 @@ public class Encoder {
this.objectMapper = objectMapper; this.objectMapper = objectMapper;
} }
public String encodePayload(List<String> packets) {
public CharSequence encodePayload(List<String> packets) {
if (packets.size() == 1) { if (packets.size() == 1) {
return packets.get(0); return packets.get(0);
} }
@ -33,7 +33,7 @@ public class Encoder {
for (String packet : packets) { for (String packet : packets) {
result.append('\ufffd').append(packet.length()).append('\ufffd').append(packet); result.append('\ufffd').append(packet.length()).append('\ufffd').append(packet);
} }
return result.toString();
return result;
} }
public String encodePacket(Packet packet) throws IOException { public String encodePacket(Packet packet) throws IOException {
@ -91,12 +91,12 @@ public class Encoder {
errorData.append("+").append(adviceCode); errorData.append("+").append(adviceCode);
} }
} }
data = errorData.toString();
data = errorData;
break; break;
} }
List<Object> params = new ArrayList<Object>();
List<Object> params = new ArrayList<Object>(4);
params.add(type); params.add(type);
if ("data".equals(ack)) { if ("data".equals(ack)) {
params.add(id + "+"); params.add(id + "+");
@ -114,7 +114,7 @@ public class Encoder {
private String join(String delimiter, List<Object> args) { private String join(String delimiter, List<Object> args) {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
for (Object arg : args) { for (Object arg : args) {
result.append(arg).append(":");
result.append(arg).append(delimiter);
} }
return result.substring(0, result.length()-1); return result.substring(0, result.length()-1);
} }

9
src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java

@ -76,12 +76,12 @@ public class XHRPollingClient implements SocketIOClient {
if(!connected || messages.isEmpty()) { if(!connected || messages.isEmpty()) {
return NullChannelFuture.INSTANCE; return NullChannelFuture.INSTANCE;
} }
String data = encoder.encodePayload(messages);
CharSequence data = encoder.encodePayload(messages);
messages.clear(); messages.clear();
return write(data); return write(data);
} }
private ChannelFuture write(String message) {
private ChannelFuture write(CharSequence message) {
HttpResponse res = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.OK); HttpResponse res = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.OK);
res.addHeader(CONTENT_TYPE, "text/plain; charset=UTF-8"); 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); messages.add(message);
return sendPayload(); return sendPayload();
} }
public ChannelFuture sendJsonp(String message) { public ChannelFuture sendJsonp(String message) {
jsonp = true; jsonp = true;
messages.add(message);
return sendPayload();
return sendUnencoded(message);
} }
public void disconnect() { public void disconnect() {

Loading…
Cancel
Save