src/main/java/js/net/EventStream.java
public void push(Event event) {
		if (!active.get()) {
			throw new BugError("Event stream |%s| is closed.", this);
		}
		// BlockingQueue is thread safe so we do not need to synchronize this method
		try {
			if (!eventsQueue.offer(event, EVENTS_QUEUE_PUSH_TIMEOUT, TimeUnit.MILLISECONDS)) {
				log.warn("Timeout trying to push event on events queue. Event |%s| not processed.", event);
			}
		} catch (InterruptedException unused) {
			log.warn("Thread interruption on event stream |%s| while trying to push event to queue. Event |%s| not processed.", this, event);
			Thread.currentThread().interrupt();
		}
	}
public void push(Event event) {
		if (!active.get()) {
			throw new BugError("Event stream |%s| is closed.", this);
		}
		// BlockingQueue is thread safe so we do not need to synchronize this method
		try {
			if (!eventsQueue.offer(event, EVENTS_QUEUE_PUSH_TIMEOUT, TimeUnit.MILLISECONDS)) {
				log.warn("Timeout trying to push event on events queue. Event |%s| not processed.", event);
			}
		} catch (InterruptedException unused) {
			log.warn("Thread interruption on event stream |%s| while trying to push event to queue. Event |%s| not processed.", this, event);
			Thread.currentThread().interrupt();
		}
	}
Push event to this events stream client. This method just stores the event on {@link #eventsQueue events queue} being
executed into invoker thread. This events stream thread is blocked on the events queue; after this method execution it
will unblock and process the event, see {@link #loop()} method.
<p>
Queue offer operation is guarded by {@link #EVENTS_QUEUE_PUSH_TIMEOUT}. This timeout can occur only in a very improbable
condition of events flood combined with system resources starvation. For this reason there is no attempt to recover;
event is simple lost with warning on application logger.

@param event event instance to push on event stream.
@throws BugError if trying to use this method after stream close.