/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.ignite.internal.util.nio;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.lang.IgniteInClosure;
/**
* This interface defines the general element in transformation chain between the nio server and
* application.
*/
public interface GridNioFilter {
/**
* Beginning of a filter lifecycle, invoked on server start. It is guaranteed that this method will be invoked
* prior to any of the event-related methods.
*/
public void start();
/**
* End of a filter lifecycle, invoked on server stop. It is guaranteed that this method will be invoked after all
* events are processed, no more event-related methods will be invoked after this method called.
*/
public void stop();
/**
* Gets next filter in filter chain.
*
* @return Next filter (in order from application to network layer).
*/
public GridNioFilter nextFilter();
/**
* Gets previous filter in filter chain.
*
* @return Previous filter (in order from application to network layer).
*/
public GridNioFilter previousFilter();
/**
* Sets next filter in filter chain. In filter chain next filter would be more close
* to the network layer.
*
* @param filter Next filter in filter chain.
*/
public void nextFilter(GridNioFilter filter);
/**
* Sets previous filter in filter chain. In filter chain previous filter would be more close
* to application layer.
*
* @param filter Previous filter in filter chain.
*/
public void previousFilter(GridNioFilter filter);
/**
* Forwards session opened event to the next logical filter in filter chain.
*
* @param ses Opened session.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public void proceedSessionOpened(GridNioSession ses) throws IgniteCheckedException;
/**
* Forwards session closed event to the next logical filter in filter chain.
*
* @param ses Closed session.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public void proceedSessionClosed(GridNioSession ses) throws IgniteCheckedException;
/**
* Forwards GridNioException event to the next logical filter in filter chain.
*
* @param ses Session instance.
* @param e GridNioException instance.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public void proceedExceptionCaught(GridNioSession ses, IgniteCheckedException e) throws IgniteCheckedException;
/**
* Forwards received message to the next logical filter in filter chain.
*
* @param ses Session instance.
* @param msg Received message.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public void proceedMessageReceived(GridNioSession ses, Object msg) throws IgniteCheckedException;
/**
* Forwards write request to the next logical filter in filter chain.
*
* @param ses Session instance.
* @param msg Message to send.
* @param fut {@code True} if write future should be created.
* @param ackC Closure invoked when message ACK is received.
* @return Write future or {@code null}.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public GridNioFuture<?> proceedSessionWrite(
GridNioSession ses,
Object msg,
boolean fut,
IgniteInClosure<IgniteException> ackC
) throws IgniteCheckedException;
/**
* Forwards session close request to the next logical filter in filter chain.
*
* @param ses Session instance.
* @return Close future.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public GridNioFuture<Boolean> proceedSessionClose(GridNioSession ses) throws IgniteCheckedException;
/**
* Invoked when a new session was created.
*
* @param ses Opened session.
* @throws IgniteCheckedException If GridNioException occurred while handling event.
*/
public void onSessionOpened(GridNioSession ses) throws IgniteCheckedException;
/**
* Invoked after session get closed.
*
* @param ses Closed session.
* @throws IgniteCheckedException If GridNioException occurred while handling event.
*/
public void onSessionClosed(GridNioSession ses) throws IgniteCheckedException;
/**
* Invoked when exception is caught in filter processing.
*
* @param ses Session that caused IgniteCheckedException.
* @param ex GridNioException instance.
* @throws IgniteCheckedException If IgniteCheckedException occurred while handling event.
*/
public void onExceptionCaught(GridNioSession ses, IgniteCheckedException ex) throws IgniteCheckedException;
/**
* Invoked when a write request is performed on a session.
*
* @param ses Session on which message should be written.
* @param msg Message being written.
* @param fut {@code True} if write future should be created.
* @param ackC Closure invoked when message ACK is received.
* @return Write future or {@code null}.
* @throws GridNioException If GridNioException occurred while handling event.
*/
public GridNioFuture<?> onSessionWrite(GridNioSession ses,
Object msg,
boolean fut,
IgniteInClosure<IgniteException> ackC) throws IgniteCheckedException;
/**
* Invoked when a new messages received.
*
* @param ses Session on which message was received.
* @param msg Received message.
* @throws IgniteCheckedException If IgniteCheckedException occurred while handling event.
*/
public void onMessageReceived(GridNioSession ses, Object msg) throws IgniteCheckedException;
/**
* Invoked when a session close request is performed on session.
*
* @param ses Session to close.
* @return Close future.
* @throws IgniteCheckedException If IgniteCheckedException occurred while handling event.
*/
public GridNioFuture<Boolean> onSessionClose(GridNioSession ses) throws IgniteCheckedException;
/**
* Called when session is idle for longer time that is
* allowed by NIO server.
*
* @param ses Session that is idle.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public void onSessionIdleTimeout(GridNioSession ses) throws IgniteCheckedException;
/**
* Forwards session idle notification to the next logical filter in filter chain.
*
* @param ses Session instance.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public void proceedSessionIdleTimeout(GridNioSession ses) throws IgniteCheckedException;
/**
* Called when session has not empty write buffer that has not been fully
* flushed during max timeout allowed by NIO server.
*
* @param ses Session that has timed out writes.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public void onSessionWriteTimeout(GridNioSession ses) throws IgniteCheckedException;
/**
* Forwards session write timeout notification to the next logical filter in filter chain.
*
* @param ses Session instance.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public void proceedSessionWriteTimeout(GridNioSession ses) throws IgniteCheckedException;
/**
* Pauses reads for session.
*
* @param ses Session.
* @return Future for operation.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public GridNioFuture<?> proceedPauseReads(GridNioSession ses) throws IgniteCheckedException;
/**
* Pauses reads for session.
*
* @param ses Session.
* @return Future for operation.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public GridNioFuture<?> onPauseReads(GridNioSession ses) throws IgniteCheckedException;
/**
* Resumes reads for session.
*
* @param ses Session.
* @return Future for operation.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public GridNioFuture<?> proceedResumeReads(GridNioSession ses) throws IgniteCheckedException;
/**
* Resumes reads for session.
*
* @param ses Session.
* @return Future for operation.
* @throws IgniteCheckedException If filter is not in chain or GridNioException occurred in the underlying filter.
*/
public GridNioFuture<?> onResumeReads(GridNioSession ses) throws IgniteCheckedException;
}