blob: 31be6f70dfb8cf98611000f5aee28a6151b7d791 [file] [log] [blame]
/*
* 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.mina.core.service;
import java.util.Map;
import java.util.Set;
import org.apache.mina.core.IoUtil;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.filterchain.IoFilterChain;
import org.apache.mina.core.filterchain.IoFilterChainBuilder;
import org.apache.mina.core.future.WriteFuture;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.core.session.IoSessionConfig;
import org.apache.mina.core.session.IoSessionDataStructureFactory;
/**
* Base interface for all {@link IoAcceptor}s and {@link IoConnector}s
* that provide I/O service and manage {@link IoSession}s.
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public interface IoService {
/**
* @return the {@link TransportMetadata} that this service runs on.
*/
TransportMetadata getTransportMetadata();
/**
* Adds an {@link IoServiceListener} that listens any events related with
* this service.
*
* @param listener The listener to add
*/
void addListener(IoServiceListener listener);
/**
* Removed an existing {@link IoServiceListener} that listens any events
* related with this service.
*
* @param listener The listener to use
*/
void removeListener(IoServiceListener listener);
/**
* @return <tt>true</tt> if and if only {@link #dispose()} method has
* been called. Please note that this method will return <tt>true</tt>
* even after all the related resources are released.
*/
boolean isDisposing();
/**
* @return <tt>true</tt> if and if only all resources of this processor
* have been disposed.
*/
boolean isDisposed();
/**
* Releases any resources allocated by this service. Please note that
* this method might block as long as there are any sessions managed by
* this service.
*/
void dispose();
/**
* Releases any resources allocated by this service. Please note that
* this method might block as long as there are any sessions managed by this service.
*
* Warning : calling this method from a IoFutureListener with <code>awaitTermination</code> = true
* will probably lead to a deadlock.
*
* @param awaitTermination When true this method will block until the underlying ExecutorService is terminated
*/
void dispose(boolean awaitTermination);
/**
* @return the handler which will handle all connections managed by this service.
*/
IoHandler getHandler();
/**
* Sets the handler which will handle all connections managed by this service.
*
* @param handler The IoHandler to use
*/
void setHandler(IoHandler handler);
/**
* @return the map of all sessions which are currently managed by this
* service. The key of map is the {@link IoSession#getId() ID} of the
* session. An empty collection if there's no session.
*/
Map<Long, IoSession> getManagedSessions();
/**
* @return the number of all sessions which are currently managed by this
* service.
*/
int getManagedSessionCount();
/**
* @return the default configuration of the new {@link IoSession}s
* created by this service.
*/
IoSessionConfig getSessionConfig();
/**
* @return the {@link IoFilterChainBuilder} which will build the
* {@link IoFilterChain} of all {@link IoSession}s which is created
* by this service.
* The default value is an empty {@link DefaultIoFilterChainBuilder}.
*/
IoFilterChainBuilder getFilterChainBuilder();
/**
* Sets the {@link IoFilterChainBuilder} which will build the
* {@link IoFilterChain} of all {@link IoSession}s which is created
* by this service.
* If you specify <tt>null</tt> this property will be set to
* an empty {@link DefaultIoFilterChainBuilder}.
*
* @param builder The filter chain builder to use
*/
void setFilterChainBuilder(IoFilterChainBuilder builder);
/**
* A shortcut for <tt>( ( DefaultIoFilterChainBuilder ) </tt>{@link #getFilterChainBuilder()}<tt> )</tt>.
* Please note that the returned object is not a <b>real</b> {@link IoFilterChain}
* but a {@link DefaultIoFilterChainBuilder}. Modifying the returned builder
* won't affect the existing {@link IoSession}s at all, because
* {@link IoFilterChainBuilder}s affect only newly created {@link IoSession}s.
*
* @return The filter chain in use
* @throws IllegalStateException if the current {@link IoFilterChainBuilder} is
* not a {@link DefaultIoFilterChainBuilder}
*/
DefaultIoFilterChainBuilder getFilterChain();
/**
* @return a value of whether or not this service is active
*/
boolean isActive();
/**
* @return the time when this service was activated. It returns the last
* time when this service was activated if the service is not active now.
*/
long getActivationTime();
/**
* Writes the specified {@code message} to all the {@link IoSession}s
* managed by this service. This method is a convenience shortcut for
* {@link IoUtil#broadcast(Object, Collection)}.
*
* @param message the message to broadcast
* @return The set of WriteFuture associated to the message being broadcasted
*/
Set<WriteFuture> broadcast(Object message);
/**
* @return the {@link IoSessionDataStructureFactory} that provides
* related data structures for a new session created by this service.
*/
IoSessionDataStructureFactory getSessionDataStructureFactory();
/**
* Sets the {@link IoSessionDataStructureFactory} that provides
* related data structures for a new session created by this service.
*
* @param sessionDataStructureFactory The factory to use
*/
void setSessionDataStructureFactory(IoSessionDataStructureFactory sessionDataStructureFactory);
/**
* @return The number of bytes scheduled to be written
*/
int getScheduledWriteBytes();
/**
* @return The number of messages scheduled to be written
*/
int getScheduledWriteMessages();
/**
* @return The statistics object for this service.
*/
IoServiceStatistics getStatistics();
}