From 2ac4a1f101b575af4b9d21b8338cbf95bf88336c Mon Sep 17 00:00:00 2001 From: Radu Cirstoiu Date: Sun, 9 Sep 2012 23:31:58 +0300 Subject: [PATCH 1/4] changed java version, should use jdk5 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index eed927b..cb9dab5 100644 --- a/pom.xml +++ b/pom.xml @@ -127,8 +127,8 @@ maven-compiler-plugin 2.5.1 - 1.6 - 1.6 + 1.5 + 1.5 true true From 1f0af6e6821a83e3f15467abcd3befeab94431d6 Mon Sep 17 00:00:00 2001 From: Radu Cirstoiu Date: Fri, 14 Sep 2012 22:38:07 +0300 Subject: [PATCH 2/4] removed reference to JDK 1.6+ Collections.newSetFromMap --- src/main/java/com/corundumstudio/socketio/AckManager.java | 4 ++-- .../java/com/corundumstudio/socketio/AuthorizeHandler.java | 4 ++-- .../java/com/corundumstudio/socketio/namespace/Namespace.java | 4 ++-- .../corundumstudio/socketio/parser/JacksonJsonSupport.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/corundumstudio/socketio/AckManager.java b/src/main/java/com/corundumstudio/socketio/AckManager.java index 1693f55..cd49f12 100644 --- a/src/main/java/com/corundumstudio/socketio/AckManager.java +++ b/src/main/java/com/corundumstudio/socketio/AckManager.java @@ -15,7 +15,6 @@ */ package com.corundumstudio.socketio; -import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -29,6 +28,7 @@ import com.corundumstudio.socketio.scheduler.CancelableScheduler; import com.corundumstudio.socketio.scheduler.SchedulerKey; import com.corundumstudio.socketio.scheduler.SchedulerKey.Type; import com.corundumstudio.socketio.transport.BaseClient; +import com.corundumstudio.socketio.utils.ConcurrentHashSet; public class AckManager implements Disconnectable { @@ -66,7 +66,7 @@ public class AckManager implements Disconnectable { public long registerAck(UUID sessionId, final AckCallback callback) { Set callbackIds = clientCallbackIds.get(sessionId); if (callbackIds == null) { - callbackIds = Collections.newSetFromMap(new ConcurrentHashMap()); + callbackIds = new ConcurrentHashSet(); Set oldCallbackIds = clientCallbackIds.putIfAbsent(sessionId, callbackIds); if (oldCallbackIds != null) { callbackIds = oldCallbackIds; diff --git a/src/main/java/com/corundumstudio/socketio/AuthorizeHandler.java b/src/main/java/com/corundumstudio/socketio/AuthorizeHandler.java index 6ac0503..3762724 100644 --- a/src/main/java/com/corundumstudio/socketio/AuthorizeHandler.java +++ b/src/main/java/com/corundumstudio/socketio/AuthorizeHandler.java @@ -51,6 +51,7 @@ import com.corundumstudio.socketio.scheduler.CancelableScheduler; import com.corundumstudio.socketio.scheduler.SchedulerKey; import com.corundumstudio.socketio.scheduler.SchedulerKey.Type; import com.corundumstudio.socketio.transport.BaseClient; +import com.corundumstudio.socketio.utils.ConcurrentHashSet; @Sharable public class AuthorizeHandler extends SimpleChannelUpstreamHandler implements Disconnectable { @@ -58,8 +59,7 @@ public class AuthorizeHandler extends SimpleChannelUpstreamHandler implements Di private final Logger log = LoggerFactory.getLogger(getClass()); private final CancelableScheduler disconnectScheduler; - private final Set authorizedSessionIds = - Collections.newSetFromMap(new ConcurrentHashMap()); + private final Set authorizedSessionIds = new ConcurrentHashSet(); private final String connectPath; private final Configuration configuration; diff --git a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java index 44c4512..ea8e438 100644 --- a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java +++ b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java @@ -15,7 +15,6 @@ */ package com.corundumstudio.socketio.namespace; -import java.util.Collections; import java.util.Queue; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -31,12 +30,13 @@ import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.listener.DisconnectListener; import com.corundumstudio.socketio.parser.JsonSupport; import com.corundumstudio.socketio.transport.NamespaceClient; +import com.corundumstudio.socketio.utils.ConcurrentHashSet; public class Namespace implements SocketIONamespace { public static final String DEFAULT_NAME = ""; - private final Set clients = Collections.newSetFromMap(new ConcurrentHashMap()); + private final Set clients = new ConcurrentHashSet(); private final ConcurrentMap> eventListeners = new ConcurrentHashMap>(); private final ConcurrentMap, Queue>> jsonObjectListeners = diff --git a/src/main/java/com/corundumstudio/socketio/parser/JacksonJsonSupport.java b/src/main/java/com/corundumstudio/socketio/parser/JacksonJsonSupport.java index 8651cbc..afa4a00 100644 --- a/src/main/java/com/corundumstudio/socketio/parser/JacksonJsonSupport.java +++ b/src/main/java/com/corundumstudio/socketio/parser/JacksonJsonSupport.java @@ -19,7 +19,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; -import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -43,12 +42,13 @@ import org.codehaus.jackson.map.module.SimpleModule; import org.codehaus.jackson.node.ObjectNode; import com.corundumstudio.socketio.Configuration; +import com.corundumstudio.socketio.utils.ConcurrentHashSet; public class JacksonJsonSupport implements JsonSupport { private class JsonObjectDeserializer extends StdDeserializer { - final Set> classes = Collections.newSetFromMap(new ConcurrentHashMap, Boolean>()); + final Set> classes = new ConcurrentHashSet>(); protected JsonObjectDeserializer() { super(JsonObject.class); From 724f4ab43092239834a0be97037868dfbef39b34 Mon Sep 17 00:00:00 2001 From: Radu Cirstoiu Date: Fri, 14 Sep 2012 22:47:18 +0300 Subject: [PATCH 3/4] fallen back to jdk 1.5 .getBytes(String charset) --- .../com/corundumstudio/socketio/parser/Packet.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/corundumstudio/socketio/parser/Packet.java b/src/main/java/com/corundumstudio/socketio/parser/Packet.java index b77d91a..db8e69a 100644 --- a/src/main/java/com/corundumstudio/socketio/parser/Packet.java +++ b/src/main/java/com/corundumstudio/socketio/parser/Packet.java @@ -15,6 +15,7 @@ */ package com.corundumstudio.socketio.parser; +import java.io.UnsupportedEncodingException; import java.util.Collections; import java.util.List; @@ -23,7 +24,14 @@ import org.jboss.netty.util.CharsetUtil; public class Packet { public static final char DELIMITER = '\ufffd'; - public static final byte[] DELIMITER_BYTES = new String(new char[] {DELIMITER}).getBytes(CharsetUtil.UTF_8); + public static final byte[] DELIMITER_BYTES;// = new String(new char[] {DELIMITER}).getBytes("UTF-8"); + static { + try { + DELIMITER_BYTES = new String(new char[] {DELIMITER}).getBytes("UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new IllegalStateException(e); + } + } public static final byte SEPARATOR = ':'; public static final Packet NULL_INSTANCE = new Packet(null); From 8f8b2dfc2d2918d0f05a5c96d76ff8a147c519bb Mon Sep 17 00:00:00 2001 From: Radu Cirstoiu Date: Fri, 14 Sep 2012 22:48:20 +0300 Subject: [PATCH 4/4] forgot to add the actual ConcurrentHashSet --- .../socketio/utils/ConcurrentHashSet.java | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/main/java/com/corundumstudio/socketio/utils/ConcurrentHashSet.java diff --git a/src/main/java/com/corundumstudio/socketio/utils/ConcurrentHashSet.java b/src/main/java/com/corundumstudio/socketio/utils/ConcurrentHashSet.java new file mode 100644 index 0000000..b9cb0f0 --- /dev/null +++ b/src/main/java/com/corundumstudio/socketio/utils/ConcurrentHashSet.java @@ -0,0 +1,98 @@ +/** + * Copyright 2012 Nikita Koksharov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.corundumstudio.socketio.utils; + +import java.util.AbstractSet; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Adapter for ConcurrentHashMap, a-la jdk 1.6+ Collections.newSetFromMap(new ConcurrentHashMap....) idiom + * @author radu.cirstoiu@gmail.com + */ +public class ConcurrentHashSet extends AbstractSet implements Set { + private final Map backingMap; + private final Set backingMapSet; + + public ConcurrentHashSet() { + backingMap = (new ConcurrentHashMap()); + backingMapSet = backingMap.keySet(); + } + + public int size() { + return backingMap.size(); + } + + public boolean isEmpty() { + return backingMap.isEmpty(); + } + + public boolean contains(Object o) { + return backingMap.containsKey(o); + } + + public Iterator iterator() { + return backingMapSet.iterator(); + } + + public void clear() { + backingMap.clear(); + } + + public Object[] toArray() { + return backingMapSet.toArray(); + } + + public T[] toArray(T[] a) { + return backingMapSet.toArray(a); + } + + public boolean add(E e) { + return backingMap.put(e, Boolean.TRUE) == null; + } + + public boolean remove(Object o) { + return backingMap.remove(o) != null; + } + + public boolean containsAll(Collection c) { + return backingMapSet.containsAll(c); + } + + public boolean removeAll(Collection c) { + return backingMapSet.removeAll(c); + } + + public boolean retainAll(Collection c) { + return backingMapSet.retainAll(c); + } + + public String toString() { + return backingMapSet.toString(); + } + + public int hashCode() { + return backingMapSet.hashCode(); + } + + public boolean equals(Object o) { + return o == this || backingMapSet.equals(o); + } + +} \ No newline at end of file