6 changed files with 131 additions and 78 deletions
-
60src/main/java/com/corundumstudio/socketio/AuthorizeHandler.java
-
48src/main/java/com/corundumstudio/socketio/CancelableScheduler.java
-
39src/main/java/com/corundumstudio/socketio/HeartbeatHandler.java
-
24src/main/java/com/corundumstudio/socketio/SocketIOPipelineFactory.java
-
5src/main/java/com/corundumstudio/socketio/parser/Decoder.java
-
33src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java
@ -0,0 +1,48 @@ |
|||
package com.corundumstudio.socketio; |
|||
|
|||
import java.util.Map; |
|||
import java.util.concurrent.ConcurrentHashMap; |
|||
import java.util.concurrent.Executors; |
|||
import java.util.concurrent.Future; |
|||
import java.util.concurrent.ScheduledExecutorService; |
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
public class CancelableScheduler<T> { |
|||
|
|||
private final Map<T, Future<?>> scheduledFutures = new ConcurrentHashMap<T, Future<?>>(); |
|||
private final ScheduledExecutorService executorService; |
|||
|
|||
public CancelableScheduler(int threadPoolSize) { |
|||
executorService = Executors.newScheduledThreadPool(threadPoolSize); |
|||
} |
|||
|
|||
public void cancel(T key) { |
|||
Future<?> future = scheduledFutures.remove(key); |
|||
if (future != null) { |
|||
future.cancel(false); |
|||
} |
|||
} |
|||
|
|||
public void schedule(Runnable runnable, long delay, TimeUnit unit) { |
|||
executorService.schedule(runnable, delay, unit); |
|||
} |
|||
|
|||
public void schedule(final T key, final Runnable runnable, long delay, TimeUnit unit) { |
|||
Future<?> future = executorService.schedule(new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
try { |
|||
runnable.run(); |
|||
} finally { |
|||
scheduledFutures.remove(key); |
|||
} |
|||
} |
|||
}, delay, unit); |
|||
scheduledFutures.put(key, future); |
|||
} |
|||
|
|||
public void shutdown() { |
|||
executorService.shutdownNow(); |
|||
} |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue