001/*
002 * Copyright 2009 Red Hat, Inc.
003 * Red Hat licenses this file to you under the Apache License, version
004 * 2.0 (the "License"); you may not use this file except in compliance
005 * with the License.  You may obtain a copy of the License at
006 *    http://www.apache.org/licenses/LICENSE-2.0
007 * Unless required by applicable law or agreed to in writing, software
008 * distributed under the License is distributed on an "AS IS" BASIS,
009 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
010 * implied.  See the License for the specific language governing
011 * permissions and limitations under the License.
012 */
013
014package org.hornetq.spi.core.remoting;
015
016import org.hornetq.api.core.HornetQBuffer;
017import org.hornetq.core.security.HornetQPrincipal;
018
019/**
020 * The connection used by a channel to write data to.
021 *
022 * @author <a href="mailto:tim.fox@jboss.com">Tim Fox</a>
023 * @version <tt>$Revision$</tt>
024 */
025public interface Connection
026{
027   /**
028    * Create a new HornetQBuffer of the given size.
029    *
030    * @param size the size of buffer to create
031    * @return the new buffer.
032    */
033   HornetQBuffer createBuffer(int size);
034
035   /**
036    * returns the unique id of this wire.
037    *
038    * @return the id
039    */
040   Object getID();
041
042   /**
043    * writes the buffer to the connection and if flush is true returns only when the buffer has been physically written to the connection.
044    *
045    * @param buffer the buffer to write
046    * @param flush  whether to flush the buffers onto the wire
047    * @param batched whether the packet is allowed to batched for better performance
048    */
049   void write(HornetQBuffer buffer, boolean flush, boolean batched);
050   
051   /**
052    * writes the buffer to the connection with no flushing or batching
053    *
054    * @param buffer the buffer to write
055    */
056   void write(HornetQBuffer buffer);
057
058   /**
059    * closes this connection.
060    */
061   void close();
062
063   /**
064    * returns a string representation of the remote address this connection is connected to.
065    *
066    * @return the remote address
067    */
068   String getRemoteAddress();
069   
070   /**
071    * Called periodically to flush any data in the batch buffer
072    */
073   void checkFlushBatchBuffer();
074   
075   void addReadyListener(ReadyListener listener);
076   
077   void removeReadyListener(ReadyListener listener);
078
079   HornetQPrincipal getDefaultHornetQPrincipal();
080}