View Javadoc
1 /************************************************************ 2 * Copyright * 3 * Portions of this software are Copyright (c) 1993 - 2002, * 4 * Chad Z. Hower (Kudzu) and the Indy Pit Crew * 5 * - http://www.nevrona.com/Indy/ * 6 ************************************************************/ 7 package org.indy; 8 9 import java.util.Collection; 10 import java.util.HashSet; 11 import java.util.Iterator; 12 13 import org.indy.util.IndyUtilities; 14 15 16 /*** 17 * Base class for Indy connection interceptos. 18 * 19 *@author OTG 20 *@version 0.1 21 */ 22 public class ConnectionIntercept { 23 // static ResourceBundle res = ResourceBundle.getBundle("org.indy.tcp.Res"); 24 private IndyComponent connection; 25 private ConnectionIntercept intercept; 26 private boolean client = true; 27 private Collection listeners = new HashSet(); 28 29 /*** 30 * Constructs a new IdConnectionIntercept instance 31 */ 32 public ConnectionIntercept() { 33 super(); 34 } 35 36 /*** 37 * Sets the intercept attribute of the IdConnectionIntercept object 38 * 39 *@param i The new intercept value 40 *@throws IdInterceptCircularLinkException Description of the Exception 41 */ 42 protected void setIntercept(ConnectionIntercept i) 43 throws InterceptCircularLinkException { 44 ConnectionIntercept incpt = i; 45 46 while (incpt != null) { 47 //recurse through intercepts 48 if (incpt == this) { 49 //comparing refs here NOT equivalence (hence ==, not .equals()) 50 throw new InterceptCircularLinkException(IndyUtilities.getResourceString( 51 "RSInterceptCircularLink")); 52 } 53 54 incpt = incpt.getIntercept(); 55 } 56 57 intercept = i; 58 } 59 60 /*** 61 * Sets the isClient attribute of the IdConnectionIntercept object 62 * 63 *@param isClient The new isClient value 64 */ 65 public void setIsClient(boolean isClient) { 66 client = isClient; 67 } 68 69 /*** 70 * Gets the intercept attribute of the IdConnectionIntercept object 71 * 72 *@return The intercept value 73 */ 74 protected ConnectionIntercept getIntercept() { 75 return intercept; 76 } 77 78 /*** 79 * Gets the client attribute of the IdConnectionIntercept object 80 * 81 *@return The client value 82 */ 83 public boolean isClient() { 84 return client; 85 } 86 87 private void doOnConnect() { 88 Iterator i = listeners.iterator(); 89 90 while (i.hasNext()) { 91 ((ConnectionInterceptListener) i.next()).onConnect(this); 92 } 93 } 94 95 private void doOnDisconnect() { 96 Iterator i = listeners.iterator(); 97 98 while (i.hasNext()) { 99 ((ConnectionInterceptListener) i.next()).onDisconnect(this); 100 } 101 } 102 103 private void doOnRead(byte[] b) { 104 Iterator i = listeners.iterator(); 105 106 while (i.hasNext()) { 107 ((ConnectionInterceptListener) i.next()).onRead(this, b); 108 } 109 } 110 111 private void doOnWrite(byte[] b) { 112 Iterator i = listeners.iterator(); 113 114 while (i.hasNext()) { 115 ((ConnectionInterceptListener) i.next()).onWrite(this, b); 116 } 117 } 118 119 /*** 120 * Description of the Method 121 * 122 *@param connection Description of the Parameter 123 */ 124 protected void nestedConnect(IndyComponent connection) { 125 if (intercept != null) { 126 intercept.connect(connection); 127 } 128 } 129 130 /*** 131 * Description of the Method 132 */ 133 protected void nestedDisconnect() { 134 if (intercept != null) { 135 intercept.disconnect(); 136 } 137 } 138 139 /*** 140 * Description of the Method 141 * 142 *@param b Description of the Parameter 143 */ 144 protected void nestedRead(byte[] b) { 145 if (intercept != null) { 146 intercept.read(b); 147 } 148 } 149 150 /*** 151 * Description of the Method 152 * 153 *@param b Description of the Parameter 154 */ 155 protected void nestedWrite(byte[] b) { 156 if (intercept != null) { 157 intercept.write(b); 158 } 159 } 160 161 /*** 162 * Adds a feature to the ConnectionInterceptListener attribute of the 163 * IdConnectionIntercept object 164 * 165 *@param l The feature to be added to the ConnectionInterceptListener 166 * attribute 167 */ 168 public void addConnectionInterceptListener(ConnectionInterceptListener l) { 169 listeners.add(l); 170 } 171 172 /*** 173 * Description of the Method 174 * 175 *@param l Description of the Parameter 176 */ 177 public void removeConnectionInterceptListener(ConnectionInterceptListener l) { 178 listeners.remove(l); 179 } 180 181 /*** 182 * Description of the Method 183 * 184 *@param b Description of the Parameter 185 */ 186 public void read(byte[] b) { 187 nestedRead(b); 188 doOnRead(b); 189 } 190 191 /*** 192 * Description of the Method 193 * 194 *@param b Description of the Parameter 195 */ 196 public void write(byte[] b) { 197 nestedWrite(b); 198 doOnWrite(b); 199 } 200 201 /*** 202 * Description of the Method 203 * 204 *@param comp Description of the Parameter 205 */ 206 public void connect(IndyComponent comp) { 207 connection = comp; 208 doOnConnect(); 209 nestedConnect(comp); 210 } 211 212 /*** 213 * Description of the Method 214 */ 215 public void disconnect() { 216 nestedDisconnect(); 217 doOnDisconnect(); 218 connection = null; 219 } 220 }

This page was automatically generated by Maven