diff --git a/pom.xml b/pom.xml index 06e20eb..fa1a57c 100644 --- a/pom.xml +++ b/pom.xml @@ -19,11 +19,6 @@ - - org.apache.httpcomponents - httpclient - 4.2.3 - com.google.code.gson gson diff --git a/src/main/java/com/github/nkzawa/engineio/client/EngineIO.java b/src/main/java/com/github/nkzawa/engineio/client/EngineIO.java deleted file mode 100644 index c589863..0000000 --- a/src/main/java/com/github/nkzawa/engineio/client/EngineIO.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.nkzawa.engineio.client; - - -public class EngineIO { - - public EngineIO() {} - -} diff --git a/src/main/java/com/github/nkzawa/engineio/client/Socket.java b/src/main/java/com/github/nkzawa/engineio/client/Socket.java index c1b3616..e8689bb 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/Socket.java +++ b/src/main/java/com/github/nkzawa/engineio/client/Socket.java @@ -9,17 +9,10 @@ import com.github.nkzawa.engineio.parser.Parser; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.apache.http.Consts; -import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; -import org.apache.http.message.BasicNameValuePair; import java.net.URI; import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; +import java.util.*; import java.util.concurrent.*; import java.util.logging.Logger; @@ -52,7 +45,7 @@ public abstract class Socket extends Emitter { private String readyState = ""; private List transports; private List upgrades; - private List query; + private Map query; private ConcurrentLinkedQueue writeBuffer = new ConcurrentLinkedQueue(); private ConcurrentLinkedQueue callbackBuffer = new ConcurrentLinkedQueue(); private Transport transport; @@ -90,7 +83,8 @@ public abstract class Socket extends Emitter { this.secure = opts.secure; this.hostname = opts.hostname != null ? opts.hostname : "localhost"; this.port = opts.port != 0 ? opts.port : (this.secure ? 443 : 80); - this.query = URLEncodedUtils.parse(opts.query, Consts.UTF_8); + this.query = opts.query != null ? + Util.qsParse(opts.query) : new HashMap(); this.upgrade = opts.upgrade; this.path = (opts.path != null ? opts.path : "/engine.io").replaceAll("/$", "") + "/"; this.timestampParam = opts.timestampParam != null ? opts.timestampParam : "t"; @@ -112,12 +106,12 @@ public abstract class Socket extends Emitter { private Transport createTransport(String name) { logger.info(String.format("creating transport '%s'", name)); - List query = new ArrayList(this.query); + Map query = new HashMap(this.query); - query.add(new BasicNameValuePair("EIO", String.valueOf(Parser.protocol))); - query.add(new BasicNameValuePair("transport", name)); + query.put("EIO", String.valueOf(Parser.protocol)); + query.put("transport", name); if (this.id != null) { - query.add(new BasicNameValuePair("sid", this.id)); + query.put("sid", this.id); } Transport.Options opts = new Transport.Options(); @@ -320,17 +314,9 @@ public abstract class Socket extends Emitter { private void onHandshake(JsonObject data) { this.emit("handshake", data); this.id = data.get("sid").getAsString(); + this.transport.query.put("sid", data.get("sid").getAsString()); - Iterator i = this.transport.query.iterator(); - while (i.hasNext()) { - NameValuePair pair = i.next(); - if ("sid".equals(pair.getName())) { - i.remove(); - } - } - this.transport.query.add(new BasicNameValuePair("sid", data.get("sid").getAsString())); - - List upgrades = new ArrayList(); + List upgrades = new ArrayList(); for (JsonElement upgrade : data.get("upgrades").getAsJsonArray()) { upgrades.add(upgrade.getAsString()); } diff --git a/src/main/java/com/github/nkzawa/engineio/client/Transport.java b/src/main/java/com/github/nkzawa/engineio/client/Transport.java index 4ef7d7c..5cc33a5 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/Transport.java +++ b/src/main/java/com/github/nkzawa/engineio/client/Transport.java @@ -4,15 +4,14 @@ package com.github.nkzawa.engineio.client; import com.github.nkzawa.emitter.Emitter; import com.github.nkzawa.engineio.parser.Packet; import com.github.nkzawa.engineio.parser.Parser; -import org.apache.http.NameValuePair; -import java.util.List; +import java.util.Map; public abstract class Transport extends Emitter { public boolean writable; public String name; - public List query; + public Map query; protected boolean secure; protected boolean timestampRequests; @@ -99,7 +98,7 @@ public abstract class Transport extends Emitter { public boolean timestampRequests; public int port; public int policyPort; - public List query; + public Map query; } } diff --git a/src/main/java/com/github/nkzawa/engineio/client/Util.java b/src/main/java/com/github/nkzawa/engineio/client/Util.java new file mode 100644 index 0000000..da036c0 --- /dev/null +++ b/src/main/java/com/github/nkzawa/engineio/client/Util.java @@ -0,0 +1,43 @@ +package com.github.nkzawa.engineio.client; + + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +public class Util { + + private Util() {} + + public static String qs(Map obj) { + StringBuilder str = new StringBuilder(); + for (Map.Entry entry : obj.entrySet()) { + if (str.length() > 0) str.append("&"); + try { + str.append(URLEncoder.encode(entry.getKey(), "UTF-8")).append("=") + .append(URLEncoder.encode(entry.getValue(), "UTF-8")); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + return str.toString(); + } + + public static Map qsParse(String qs) { + Map qry = new HashMap(); + String[] pairs = qs.split("&"); + for (String _pair : pairs) { + String[] pair = _pair.split("="); + try { + qry.put(URLDecoder.decode(pair[0], "UTF-8"), + pair.length > 0 ? URLDecoder.decode(pair[1], "UTF-8") : ""); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + + } + return qry; + } +} diff --git a/src/main/java/com/github/nkzawa/engineio/client/transports/Polling.java b/src/main/java/com/github/nkzawa/engineio/client/transports/Polling.java index 192788c..63f77b1 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/transports/Polling.java +++ b/src/main/java/com/github/nkzawa/engineio/client/transports/Polling.java @@ -2,17 +2,13 @@ package com.github.nkzawa.engineio.client.transports; import com.github.nkzawa.engineio.client.Transport; +import com.github.nkzawa.engineio.client.Util; import com.github.nkzawa.engineio.parser.Packet; import com.github.nkzawa.engineio.parser.Parser; -import org.apache.http.Consts; -import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; -import org.apache.http.message.BasicNameValuePair; -import java.util.ArrayList; import java.util.Date; -import java.util.Iterator; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Logger; abstract public class Polling extends Transport { @@ -139,26 +135,18 @@ abstract public class Polling extends Transport { } protected String uri() { - List query = this.query; + Map query = this.query; if (query == null) { - query = new ArrayList(); + query = new HashMap(); } String schema = this.secure ? "https" : "http"; String port = ""; if (this.timestampRequests) { - Iterator i = query.iterator(); - while (i.hasNext()) { - NameValuePair pair = i.next(); - if (this.timestampParam.equals(pair.getName())) { - i.remove(); - } - } - query.add(new BasicNameValuePair(this.timestampParam, - String.valueOf(new Date().getTime()))); + query.put(this.timestampParam, String.valueOf(new Date().getTime())); } - String _query = URLEncodedUtils.format(query, Consts.UTF_8); + String _query = Util.qs(query); if (this.port > 0 && (("https".equals(schema) && this.port != 443) || ("http".equals(schema) && this.port != 80))) { diff --git a/src/main/java/com/github/nkzawa/engineio/client/transports/WebSocket.java b/src/main/java/com/github/nkzawa/engineio/client/transports/WebSocket.java index 95be13a..19fb724 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/transports/WebSocket.java +++ b/src/main/java/com/github/nkzawa/engineio/client/transports/WebSocket.java @@ -2,22 +2,18 @@ package com.github.nkzawa.engineio.client.transports; import com.github.nkzawa.engineio.client.Transport; +import com.github.nkzawa.engineio.client.Util; import com.github.nkzawa.engineio.parser.Packet; import com.github.nkzawa.engineio.parser.Parser; -import org.apache.http.Consts; -import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; -import org.apache.http.message.BasicNameValuePair; import org.java_websocket.client.WebSocketClient; import org.java_websocket.drafts.Draft_17; import org.java_websocket.handshake.ServerHandshake; import java.net.URI; import java.net.URISyntaxException; -import java.util.ArrayList; import java.util.Date; -import java.util.Iterator; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; @@ -112,9 +108,9 @@ public class WebSocket extends Transport { } private String uri() { - List query = this.query; + Map query = this.query; if (query == null) { - query = new ArrayList(); + query = new HashMap(); } String schema = this.secure ? "wss" : "ws"; String port = ""; @@ -125,18 +121,10 @@ public class WebSocket extends Transport { } if (this.timestampRequests) { - Iterator i = query.iterator(); - while (i.hasNext()) { - NameValuePair pair = i.next(); - if (this.timestampParam.equals(pair.getName())) { - i.remove(); - } - } - query.add(new BasicNameValuePair(this.timestampParam, - String.valueOf(new Date().getTime()))); + query.put(this.timestampParam, String.valueOf(new Date().getTime())); } - String _query = URLEncodedUtils.format(query, Consts.UTF_8); + String _query = Util.qs(query); if (_query.length() > 0) { _query = "?" + _query; }