1 7 8 package com.sun.corba.se.impl.transport; 9 10 import java.io.IOException ; 11 12 import com.sun.corba.se.pept.transport.Acceptor; 13 import com.sun.corba.se.pept.transport.ListenerThread; 14 import com.sun.corba.se.pept.transport.Selector; 15 16 import com.sun.corba.se.spi.orb.ORB; 17 import com.sun.corba.se.spi.orbutil.threadpool.Work; 18 19 import com.sun.corba.se.impl.orbutil.ORBUtility; 20 21 22 public class ListenerThreadImpl 23 implements 24 ListenerThread, 25 Work 26 { 27 private ORB orb; 28 private Acceptor acceptor; 29 private Selector selector; 30 private boolean keepRunning; 31 private long enqueueTime; 32 33 public ListenerThreadImpl(ORB orb, Acceptor acceptor, Selector selector) 34 { 35 this.orb = orb; 36 this.acceptor = acceptor; 37 this.selector = selector; 38 keepRunning = true; 39 } 40 41 46 public Acceptor getAcceptor() 47 { 48 return acceptor; 49 } 50 51 public void close() 52 { 53 if (orb.transportDebugFlag) { 54 dprint(".close: " + acceptor); 55 } 56 57 keepRunning = false; 58 } 59 60 65 67 public void doWork() 68 { 69 try { 70 if (orb.transportDebugFlag) { 71 dprint(".doWork: Start ListenerThread: " + acceptor); 72 } 73 while (keepRunning) { 74 try { 75 if (orb.transportDebugFlag) { 76 dprint(".doWork: BEFORE ACCEPT CYCLE: " + acceptor); 77 } 78 79 acceptor.accept(); 80 81 if (orb.transportDebugFlag) { 82 dprint(".doWork: AFTER ACCEPT CYCLE: " + acceptor); 83 } 84 } catch (Throwable t) { 85 if (orb.transportDebugFlag) { 86 dprint(".doWork: Exception in accept: " + acceptor,t); 87 } 88 orb.getTransportManager().getSelector(0) 89 .unregisterForEvent(getAcceptor().getEventHandler()); 90 getAcceptor().close(); 91 } 92 } 93 } finally { 94 if (orb.transportDebugFlag) { 95 dprint(".doWork: Terminated ListenerThread: " + acceptor); 96 } 97 } 98 } 99 100 public void setEnqueueTime(long timeInMillis) 101 { 102 enqueueTime = timeInMillis; 103 } 104 105 public long getEnqueueTime() 106 { 107 return enqueueTime; 108 } 109 110 public String getName() { return "ListenerThread"; } 111 112 117 private void dprint(String msg) 118 { 119 ORBUtility.dprint("ListenerThreadImpl", msg); 120 } 121 122 private void dprint(String msg, Throwable t) 123 { 124 dprint(msg); 125 t.printStackTrace(System.out); 126 } 127 } 128 129 | Popular Tags |