1. /*
  2. * @(#)ListenerThreadImpl.java 1.14 03/12/19
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.corba.se.impl.transport;
  8. import java.io.IOException;
  9. import com.sun.corba.se.pept.transport.Acceptor;
  10. import com.sun.corba.se.pept.transport.ListenerThread;
  11. import com.sun.corba.se.pept.transport.Selector;
  12. import com.sun.corba.se.spi.orb.ORB;
  13. import com.sun.corba.se.spi.orbutil.threadpool.Work;
  14. import com.sun.corba.se.impl.orbutil.ORBUtility;
  15. public class ListenerThreadImpl
  16. implements
  17. ListenerThread,
  18. Work
  19. {
  20. private ORB orb;
  21. private Acceptor acceptor;
  22. private Selector selector;
  23. private boolean keepRunning;
  24. private long enqueueTime;
  25. public ListenerThreadImpl(ORB orb, Acceptor acceptor, Selector selector)
  26. {
  27. this.orb = orb;
  28. this.acceptor = acceptor;
  29. this.selector = selector;
  30. keepRunning = true;
  31. }
  32. ////////////////////////////////////////////////////
  33. //
  34. // ListenerThread methods.
  35. //
  36. public Acceptor getAcceptor()
  37. {
  38. return acceptor;
  39. }
  40. public void close()
  41. {
  42. if (orb.transportDebugFlag) {
  43. dprint(".close: " + acceptor);
  44. }
  45. keepRunning = false;
  46. }
  47. ////////////////////////////////////////////////////
  48. //
  49. // Work methods.
  50. //
  51. // REVISIT - this needs alot more from previous ListenerThread
  52. public void doWork()
  53. {
  54. try {
  55. if (orb.transportDebugFlag) {
  56. dprint(".doWork: Start ListenerThread: " + acceptor);
  57. }
  58. while (keepRunning) {
  59. try {
  60. if (orb.transportDebugFlag) {
  61. dprint(".doWork: BEFORE ACCEPT CYCLE: " + acceptor);
  62. }
  63. acceptor.accept();
  64. if (orb.transportDebugFlag) {
  65. dprint(".doWork: AFTER ACCEPT CYCLE: " + acceptor);
  66. }
  67. } catch (Throwable t) {
  68. if (orb.transportDebugFlag) {
  69. dprint(".doWork: Exception in accept: " + acceptor,t);
  70. }
  71. orb.getTransportManager().getSelector(0)
  72. .unregisterForEvent(getAcceptor().getEventHandler());
  73. getAcceptor().close();
  74. }
  75. }
  76. } finally {
  77. if (orb.transportDebugFlag) {
  78. dprint(".doWork: Terminated ListenerThread: " + acceptor);
  79. }
  80. }
  81. }
  82. public void setEnqueueTime(long timeInMillis)
  83. {
  84. enqueueTime = timeInMillis;
  85. }
  86. public long getEnqueueTime()
  87. {
  88. return enqueueTime;
  89. }
  90. public String getName() { return "ListenerThread"; }
  91. ////////////////////////////////////////////////////
  92. //
  93. // Implementation.
  94. //
  95. private void dprint(String msg)
  96. {
  97. ORBUtility.dprint("ListenerThreadImpl", msg);
  98. }
  99. private void dprint(String msg, Throwable t)
  100. {
  101. dprint(msg);
  102. t.printStackTrace(System.out);
  103. }
  104. }
  105. // End of file.