private int getConnectedCount() { int connected = 0; for (ISOChannel c : channels) { if (c != null && c.isConnected()) { connected++; } } return connected; } }
public boolean isConnected() { return channel.isConnected(); } public void setLogger (Logger logger, String realm) {
private void purgeChannels () { Iterator iter = channels.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); WeakReference ref = (WeakReference) entry.getValue(); ISOChannel c = (ISOChannel) ref.get (); if (c == null || !c.isConnected()) { iter.remove (); } } }
public synchronized boolean isConnected() { try { return getCurrent().isConnected (); } catch (IOException e) { return false; } } public ISOMsg receive() throws IOException, ISOException {
private ISOChannel getNextChannel() { ISOChannel c = null; for (int size = channels.length; size > 0; size--) { c = channels[roundRobinCounter++ % channels.length]; if (c != null && c.isConnected()) break; } if (c == null) SpaceUtil.wipe(sp, ready); return c; } private int getConnectedCount() {
public void dump (PrintStream p, String indent) { p.println (indent + "<mux-stats connected=\"" + channel.isConnected() + "\">"); showCounters (p); p.println (indent + "</mux-stats>"); } public ISOMsg request (ISOMsg m, long timeout) throws ISOException {
@Override public String getISOChannelNames () { StringBuilder sb = new StringBuilder (); Iterator iter = channels.entrySet().iterator(); for (int i=0; iter.hasNext(); i++) { Map.Entry entry = (Map.Entry) iter.next(); WeakReference ref = (WeakReference) entry.getValue(); ISOChannel c = (ISOChannel) ref.get (); if (c != null && !LAST.equals (entry.getKey()) && c.isConnected()) { if (i > 0) { sb.append (' '); } sb.append (entry.getKey()); } } return sb.toString(); } public String getCountersAsString () {
public int[] getCounters() { Iterator iter = channels.entrySet().iterator(); int[] cnt = new int[3]; cnt[2] = 0; for (int i=0; iter.hasNext(); i++) { Map.Entry entry = (Map.Entry) iter.next(); WeakReference ref = (WeakReference) entry.getValue(); ISOChannel c = (ISOChannel) ref.get (); if (c != null && !LAST.equals (entry.getKey()) && c.isConnected()) { cnt[2]++; if (c instanceof BaseChannel) { int[] cc = ((BaseChannel)c).getCounters(); cnt[0] += cc[ISOChannel.RX]; cnt[1] += cc[ISOChannel.TX]; } } } return cnt; }
@Override public void dump (PrintStream p, String indent) { p.println (indent + getCountersAsString()); Iterator iter = channels.entrySet().iterator(); String inner = indent + " "; for (int i=0; iter.hasNext(); i++) { Map.Entry entry = (Map.Entry) iter.next(); WeakReference ref = (WeakReference) entry.getValue(); ISOChannel c = (ISOChannel) ref.get (); if (c != null && !LAST.equals (entry.getKey()) && c.isConnected() && c instanceof BaseChannel) { StringBuilder sb = new StringBuilder (); int[] cc = ((BaseChannel)c).getCounters(); sb.append (inner); sb.append (entry.getKey()); sb.append (": rx="); sb.append (Integer.toString (cc[ISOChannel.RX])); sb.append (", tx="); sb.append (Integer.toString (cc[ISOChannel.TX])); sb.append (", last="); sb.append (Long.toString(lastTxn)); p.println (sb.toString()); } } } private void append (StringBuffer sb, String name, int value) {
private void connect (int slot) { ISOChannel c = channels[slot]; if (c != null && !c.isConnected()) { try { c.connect (); sp.put (ready, new Date()); } catch (IOException e) { getLog().warn ("check-connection(" + slot + ") " + c.toString(), e.getMessage ()); } } } private void disconnect (ISOChannel channel) {
public ISOChannelPanel (ISOChannel channel, String symbolicName) { super(); this.symbolicName = symbolicName; setLayout(new FlowLayout()); setBorder(BorderFactory.createRaisedBevelBorder()); log = new DefaultListModel(); add(createCountersPanel()); meter.setConnected(channel.isConnected()); if (channel instanceof Observable) ((Observable)channel).addObserver(this); } /**
public synchronized void connect () throws IOException { current = null; LogEvent evt = new LogEvent (this, "connect"); evt.addMessage ("pool-size=" + Integer.toString (pool.size())); for (int i=0; i<pool.size(); i++) { try { evt.addMessage ("pool-" + Integer.toString (i)); ISOChannel c = (ISOChannel) pool.get (i); c.connect (); if (c.isConnected()) { current = c; usable = true; break; } } catch (IOException e) { evt.addMessage (e); } } if (current == null) evt.addMessage ("connect failed"); Logger.log (evt); if (current == null) { throw new IOException ("unable to connect"); } } public synchronized void disconnect () throws IOException {
protected void checkConnection () { try { while (!channel.isConnected ()) { while (sp.inp (ready) != null) ; channel.connect (); if (!channel.isConnected ()) ISOUtil.sleep (10000); } sp.out (ready, new Object ()); } catch (IOException e) { Logger.log ( new LogEvent ( ISOChannelAdaptor.this, "check-connection", e ) ); ISOUtil.sleep (10000); } } protected void disconnect () {
protected void checkConnection () { while (running() && sp.rdp (reconnect) != null) { ISOUtil.sleep(1000); } while (running() && !channel.isConnected ()) { SpaceUtil.wipe(sp, ready); try { channel.connect (); } catch (IOException ignored) { // channel.connect already logs - no need for more warnings } if (!channel.isConnected ()) ISOUtil.sleep (delay); else connects++; } if (running() && sp.rdp (ready) == null) sp.out (ready, new Date()); } protected void disconnect () {
@Test public void stopCanWaitForWorkersEvenWhenOutgoingChannelNeverConnects() throws Exception { ISOChannel channel = mock(ISOChannel.class); when(channel.isConnected()).thenReturn(false); when(channel.receive()).thenThrow(new ISOException("unconnected ISOChannel")); // repeat test to ensure clean up occurs after stop for (int i = 0; i < 10; i++) { channelAdaptor = configureAndStart(new ChannelAdaptorWithoutQ2(channel)); waitForSenderAndReceiverToStart(); assertCallToStopCompletes(i); } }
if (handbackFields.length > 0) handBack = (ISOMsg) m.clone (handbackFields); for (int i=0; !channel.isConnected() && i<maxConnectAttempts; i++) if (!channel.isConnected()) ISOUtil.sleep (1000L); if (channel.isConnected()) { channel.send (m); m = channel.receive();
@Test public void stopCanWaitForWorkersEvenWhenSenderBlockedTryingToConnect() throws Exception { // Think a link where the other ends plays the client role. Eg a BaseChannel with a serverSocket. // So connect() calls socket.accept(). If no client connects accept() blocks forever. // Ensures disconnect() is called on stop() regardless of channel.isConnected() return value. ISOChannel channel = mock(ISOChannel.class); ThreadTrap trap = new ThreadTrap(SENDER_THREAD_NAME); when(channel.isConnected()).thenReturn(false); trap.catchVictim().when(channel).connect(); trap.release().when(channel).disconnect(); channelAdaptor = configureAndStart(new ChannelAdaptorWithoutQ2(channel)); waitForSenderAndReceiverToStart(); assertThat("Sender did not call connect()", trap.catchesVictim(), is(true)); assertCallToStopCompletes(1); }
while (running()) { try { if (!channel.isConnected()) { connect(slot); if (!channel.isConnected()) { ISOUtil.sleep(delay); continue;
if (channel != null && channel.isConnected())
tx++; else if (keepAlive && channel.isConnected() && channel instanceof BaseChannel) { ((BaseChannel)channel).sendKeepAlive();