@Override public void fireEvent(final Event event) { if (null != dispatcherLane && dispatcherLane.isOnSameLane(Thread.currentThread().getName())) { dispatchEventOnSameLane(event); } else { eventQueue.publish(event); } }
/** * Creates a batch subscription to the jetlang memory channel for the ANY * event handler. This method does not require synchronization since we are * using CopyOnWriteArrayList * * @param eventHandler */ protected void addANYHandler(final EventHandler eventHandler) { final int eventType = eventHandler.getEventType(); if (eventType != Events.ANY) { LOG.error("The incoming handler {} is not of type ANY", eventHandler); throw new IllegalArgumentException( "The incoming handler is not of type ANY"); } anyHandler.add(eventHandler); Callback<List<Event>> eventCallback = createEventCallbackForHandler(eventHandler); BatchSubscriber<Event> batchEventSubscriber = new BatchSubscriber<Event>( fiber, eventCallback, 0, TimeUnit.MILLISECONDS); Disposable disposable = eventQueue.subscribe(batchEventSubscriber); disposableHandlerMap.put(eventHandler, disposable); }
public JetlangActor() { this.inChannel = new MemoryChannel<T>(); this.outChannel = new MemoryChannel<T>(); this.callback = new Callback<T>(){ public void onMessage(T message) { act(message); }; }; this.fiber = Fibers.pooledFiber(); }
public Disposable subscribe(Subscribable<T> sub) { return subscribeOnProducerThread(sub.getQueue(), sub); }
@Override public synchronized void close() { if (!isCloseCalled) { fiber.dispose(); eventQueue.clearSubscribers(); // Iterate through the list of disposables and dispose each one. Collection<Disposable> disposables = disposableHandlerMap.values(); for (Disposable disposable : disposables) { disposable.dispose(); } handlersByEventType.clear(); handlersByEventType = null; anyHandler.clear(); anyHandler = null; isCloseCalled = true; } }
public Disposable subscribe(Subscribable<T> sub) { return subscribeOnProducerThread(sub.getQueue(), sub); }
Disposable disposable = eventQueue.subscribe(batchEventSubscriber); disposableHandlerMap.put(eventHandler, disposable);
public Disposable publish(DisposingExecutor target, final R request, Callback<V> reply) { final RequestImpl req = new RequestImpl(target, request, reply); channel.publish(req); return new Disposable() { public void dispose() { if (req.dispose()) { SessionClosed<R> end = new SessionClosedImpl<>(request, req.getSession()); endChannel.publish(end); } } }; }
public Agent() { this.channel = new MemoryChannel<Runnable>(); this.fiber = Fibers.pooledFiber(); channel.subscribe(fiber, callback); }
public Disposable subscribe(DisposingExecutor fiber, Callback<Request<R, V>> onRequest, Callback<SessionClosed<R>> onRequestEnd) { final Disposable sub = channel.subscribe(fiber, onRequest); final Disposable end = endChannel.subscribe(fiber, onRequestEnd); return new Disposable() { public void dispose() { sub.dispose(); end.dispose(); } }; }
public Disposable publish(DisposingExecutor target, final R request, Callback<V> reply) { final RequestImpl req = new RequestImpl(target, request, reply); channel.publish(req); return new Disposable() { public void dispose() { if (req.dispose()) { SessionClosed<R> end = new SessionClosedImpl<>(request, req.getSession()); endChannel.publish(end); } } }; }
public static EventDispatcher newJetlangEventDispatcher(GameRoom room, LaneStrategy<String, ExecutorService, GameRoom> strategy) { Fiber fiber = null; JetlangEventDispatcher dispatcher = null; if (null == room) { fiber = Fibers.pooledFiber(); dispatcher = new JetlangEventDispatcher(new MemoryChannel<Event>(), fiber, null); } else { Lane<String, ExecutorService> lane = strategy.chooseLane(room); fiber = Fibers.pooledFiber(lane); dispatcher = new JetlangEventDispatcher(new MemoryChannel<Event>(), fiber, lane); } dispatcher.initialize(); return dispatcher; } }
public Disposable subscribe(DisposingExecutor fiber, Callback<Request<R, V>> onRequest, Callback<SessionClosed<R>> onRequestEnd) { final Disposable sub = channel.subscribe(fiber, onRequest); final Disposable end = endChannel.subscribe(fiber, onRequestEnd); return new Disposable() { public void dispose() { sub.dispose(); end.dispose(); } }; }
public void dispose() { if (req.dispose()) { SessionClosed<R> end = new SessionClosedImpl<>(request, req.getSession()); endChannel.publish(end); } } };
public Disposable subscribe(DisposingExecutor fiber, Callback<Request<R, V>> onRequest) { return channel.subscribe(fiber, onRequest); }
public void dispose() { if (req.dispose()) { SessionClosed<R> end = new SessionClosedImpl<>(request, req.getSession()); endChannel.publish(end); } } };
public Disposable subscribe(DisposingExecutor fiber, Callback<Request<R, V>> onRequest) { return channel.subscribe(fiber, onRequest); }
public Disposable subscribe(DisposingExecutor queue, Callback<T> onReceive) { ChannelSubscription<T> subber = new ChannelSubscription<>(queue, onReceive); return subscribe(subber); }
public Disposable subscribe(DisposingExecutor queue, Callback<T> onReceive) { ChannelSubscription<T> subber = new ChannelSubscription<>(queue, onReceive); return subscribe(subber); }