SvcHandler.tcc
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:2k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* SvcHandler - does stuff */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01d,13jul01,dbs  fix up includes
  7. 01c,19aug99,aim  changed assert to vxdcomAssert
  8. 01b,07jun99,aim  changed peer to stream
  9. 01a,12May99,aim  created
  10. */
  11. #include "SvcHandler.h"
  12. #include "private/comMisc.h"
  13. template <class PEER_STREAM> void
  14. SvcHandler<PEER_STREAM>::destroy ()
  15.     {
  16.     TRACE_CALL;
  17.     if (m_closing == 0)
  18. {
  19. // Will call the destructor, which automatically calls
  20. // <shutdown>.  Note that if we are *not* allocated dynamically
  21. // then the destructor will call <shutdown> automatically when
  22. // it gets run during cleanup.
  23. delete this;
  24. }
  25.     }
  26. template <class PEER_STREAM>
  27. SvcHandler<PEER_STREAM>::SvcHandler (Reactor *reactor)
  28.   : m_closing (0),
  29.     m_stream ()
  30.     {
  31.     TRACE_CALL;
  32.     reactorSet (reactor);
  33.     }
  34. template <class PEER_STREAM> int
  35. SvcHandler<PEER_STREAM>::open (void*)
  36.     {
  37.     TRACE_CALL;
  38.     COM_ASSERT (reactorGet ());
  39.     return reactorGet()->handlerAdd (this, EventHandler::READ_MASK);
  40.     }
  41. template <class PEER_STREAM> int
  42. SvcHandler<PEER_STREAM>::close (u_long)
  43.     {
  44.     TRACE_CALL;
  45.     return handleClose ();
  46.     }
  47. template <class PEER_STREAM> void
  48. SvcHandler<PEER_STREAM>::shutdown ()
  49.     {
  50.     TRACE_CALL;
  51.     COM_ASSERT (reactorGet ());
  52.     reactorGet()->handlerRemove (this,
  53.  EventHandler::ALL_EVENTS_MASK |
  54.  EventHandler::DONT_CALL);
  55.     m_stream.close();
  56.     }
  57. template <class PEER_STREAM> REACTOR_HANDLE
  58. SvcHandler<PEER_STREAM>::handleGet () const
  59.     {
  60.     TRACE_CALL;
  61.     return m_stream.handleGet ();
  62.     }
  63. template <class PEER_STREAM> REACTOR_HANDLE
  64. SvcHandler<PEER_STREAM>::handleSet (REACTOR_HANDLE h)
  65.     {
  66.     TRACE_CALL;
  67.     return m_stream.handleSet (h);
  68.     }
  69. template <class PEER_STREAM>
  70. SvcHandler<PEER_STREAM>::~SvcHandler ()
  71.     {
  72.     TRACE_CALL;
  73.     if (m_closing == 0)
  74. {
  75. m_closing = 1;
  76. shutdown ();
  77. }
  78.     }
  79. template <class PEER_STREAM> int
  80. SvcHandler<PEER_STREAM>::handleClose (REACTOR_HANDLE, REACTOR_EVENT_MASK)
  81.     {
  82.     TRACE_CALL;
  83.     destroy ();
  84.     return 0;
  85.     }
  86. template <class PEER_STREAM> PEER_STREAM&
  87. SvcHandler<PEER_STREAM>::stream ()
  88.     {
  89.     TRACE_CALL;
  90.     return m_stream;
  91.     }