| /* |
| * Copyright 1999,2006 The Apache Software Foundation. |
| * |
| * Licensed 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.catalina.tribes.transport; |
| |
| import java.io.IOException; |
| import java.net.InetAddress; |
| import java.net.UnknownHostException; |
| |
| import org.apache.catalina.tribes.Member; |
| |
| /** |
| * <p>Title: </p> |
| * |
| * <p>Description: </p> |
| * |
| * <p>Copyright: Copyright (c) 2005</p> |
| * |
| * <p>Company: </p> |
| * |
| * @author not attributable |
| * @version 1.0 |
| */ |
| public abstract class AbstractSender implements DataSender { |
| |
| private boolean connected = false; |
| private int rxBufSize = 25188; |
| private int txBufSize = 43800; |
| private boolean directBuffer = false; |
| private int keepAliveCount = -1; |
| private int requestCount = 0; |
| private long connectTime; |
| private long keepAliveTime = -1; |
| private long timeout = 3000; |
| private Member destination; |
| private InetAddress address; |
| private int port; |
| private int maxRetryAttempts = 1;//1 resends |
| private int attempt; |
| private boolean tcpNoDelay = true; |
| private boolean soKeepAlive = false; |
| private boolean ooBInline = true; |
| private boolean soReuseAddress = true; |
| private boolean soLingerOn = false; |
| private int soLingerTime = 3; |
| private int soTrafficClass = 0x04 | 0x08 | 0x010; |
| private boolean throwOnFailedAck = false; |
| |
| /** |
| * transfers sender properties from one sender to another |
| * @param from AbstractSender |
| * @param to AbstractSender |
| */ |
| public static void transferProperties(AbstractSender from, AbstractSender to) { |
| to.rxBufSize = from.rxBufSize; |
| to.txBufSize = from.txBufSize; |
| to.directBuffer = from.directBuffer; |
| to.keepAliveCount = from.keepAliveCount; |
| to.keepAliveTime = from.keepAliveTime; |
| to.timeout = from.timeout; |
| to.destination = from.destination; |
| to.address = from.address; |
| to.port = from.port; |
| to.maxRetryAttempts = from.maxRetryAttempts; |
| to.tcpNoDelay = from.tcpNoDelay; |
| to.soKeepAlive = from.soKeepAlive; |
| to.ooBInline = from.ooBInline; |
| to.soReuseAddress = from.soReuseAddress; |
| to.soLingerOn = from.soLingerOn; |
| to.soLingerTime = from.soLingerTime; |
| to.soTrafficClass = from.soTrafficClass; |
| to.throwOnFailedAck = from.throwOnFailedAck; |
| } |
| |
| |
| public AbstractSender() { |
| |
| } |
| |
| /** |
| * connect |
| * |
| * @throws IOException |
| * @todo Implement this org.apache.catalina.tribes.transport.DataSender method |
| */ |
| public abstract void connect() throws IOException; |
| |
| /** |
| * disconnect |
| * |
| * @todo Implement this org.apache.catalina.tribes.transport.DataSender method |
| */ |
| public abstract void disconnect(); |
| |
| /** |
| * keepalive |
| * |
| * @return boolean |
| * @todo Implement this org.apache.catalina.tribes.transport.DataSender method |
| */ |
| public boolean keepalive() { |
| boolean disconnect = false; |
| if ( keepAliveCount >= 0 && requestCount>keepAliveCount ) disconnect = true; |
| else if ( keepAliveTime >= 0 && keepAliveTime> (System.currentTimeMillis()-connectTime) ) disconnect = true; |
| if ( disconnect ) disconnect(); |
| return disconnect; |
| } |
| |
| protected void setConnected(boolean connected){ |
| this.connected = connected; |
| } |
| |
| public boolean isConnected() { |
| return connected; |
| } |
| |
| public long getConnectTime() { |
| return connectTime; |
| } |
| |
| public Member getDestination() { |
| return destination; |
| } |
| |
| |
| public int getKeepAliveCount() { |
| return keepAliveCount; |
| } |
| |
| public long getKeepAliveTime() { |
| return keepAliveTime; |
| } |
| |
| public int getRequestCount() { |
| return requestCount; |
| } |
| |
| public int getRxBufSize() { |
| return rxBufSize; |
| } |
| |
| public long getTimeout() { |
| return timeout; |
| } |
| |
| public int getTxBufSize() { |
| return txBufSize; |
| } |
| |
| public InetAddress getAddress() { |
| return address; |
| } |
| |
| public int getPort() { |
| return port; |
| } |
| |
| public int getMaxRetryAttempts() { |
| return maxRetryAttempts; |
| } |
| |
| public void setDirectBuffer(boolean directBuffer) { |
| this.directBuffer = directBuffer; |
| } |
| |
| public boolean getDirectBuffer() { |
| return this.directBuffer; |
| } |
| |
| public int getAttempt() { |
| return attempt; |
| } |
| |
| public boolean getTcpNoDelay() { |
| return tcpNoDelay; |
| } |
| |
| public boolean getSoKeepAlive() { |
| return soKeepAlive; |
| } |
| |
| public boolean getOoBInline() { |
| return ooBInline; |
| } |
| |
| public boolean getSoReuseAddress() { |
| return soReuseAddress; |
| } |
| |
| public boolean getSoLingerOn() { |
| return soLingerOn; |
| } |
| |
| public int getSoLingerTime() { |
| return soLingerTime; |
| } |
| |
| public int getSoTrafficClass() { |
| return soTrafficClass; |
| } |
| |
| public boolean getThrowOnFailedAck() { |
| return throwOnFailedAck; |
| } |
| |
| public void setKeepAliveCount(int keepAliveCount) { |
| this.keepAliveCount = keepAliveCount; |
| } |
| |
| public void setKeepAliveTime(long keepAliveTime) { |
| this.keepAliveTime = keepAliveTime; |
| } |
| |
| public void setRequestCount(int requestCount) { |
| this.requestCount = requestCount; |
| } |
| |
| public void setRxBufSize(int rxBufSize) { |
| this.rxBufSize = rxBufSize; |
| } |
| |
| public void setTimeout(long timeout) { |
| this.timeout = timeout; |
| } |
| |
| public void setTxBufSize(int txBufSize) { |
| this.txBufSize = txBufSize; |
| } |
| |
| public void setConnectTime(long connectTime) { |
| this.connectTime = connectTime; |
| } |
| |
| public void setMaxRetryAttempts(int maxRetryAttempts) { |
| this.maxRetryAttempts = maxRetryAttempts; |
| } |
| |
| public void setAttempt(int attempt) { |
| this.attempt = attempt; |
| } |
| |
| public void setTcpNoDelay(boolean tcpNoDelay) { |
| this.tcpNoDelay = tcpNoDelay; |
| } |
| |
| public void setSoKeepAlive(boolean soKeepAlive) { |
| this.soKeepAlive = soKeepAlive; |
| } |
| |
| public void setOoBInline(boolean ooBInline) { |
| this.ooBInline = ooBInline; |
| } |
| |
| public void setSoReuseAddress(boolean soReuseAddress) { |
| this.soReuseAddress = soReuseAddress; |
| } |
| |
| public void setSoLingerOn(boolean soLingerOn) { |
| this.soLingerOn = soLingerOn; |
| } |
| |
| public void setSoLingerTime(int soLingerTime) { |
| this.soLingerTime = soLingerTime; |
| } |
| |
| public void setSoTrafficClass(int soTrafficClass) { |
| this.soTrafficClass = soTrafficClass; |
| } |
| |
| public void setThrowOnFailedAck(boolean throwOnFailedAck) { |
| this.throwOnFailedAck = throwOnFailedAck; |
| } |
| |
| public void setDestination(Member destination) throws UnknownHostException { |
| this.destination = destination; |
| this.address = InetAddress.getByAddress(destination.getHost()); |
| this.port = destination.getPort(); |
| |
| } |
| |
| public void setPort(int port) { |
| this.port = port; |
| } |
| |
| public void setAddress(InetAddress address) { |
| this.address = address; |
| } |
| |
| } |