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

VxWorks

开发平台:

C/C++

  1. /* Connector - Encapsulates a Socket connection */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01a,05jun99,aim  created
  7. */
  8. #include "Connector.h"
  9. #ifndef __INCConnector_tcc_
  10. #define __INCConnector_tcc_
  11. template <class SVC_HANDLER, PEER_CONNECTOR_1>
  12. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::Connector (Reactor* r)
  13.   : m_connector (),
  14.     m_closing (false)
  15.     {
  16.     TRACE_CALL;
  17.     reactorSet (r);
  18.     }
  19. template <class SVC_HANDLER, PEER_CONNECTOR_1>
  20. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::~Connector ()
  21.     {
  22.     handleClose ();
  23.     TRACE_CALL;
  24.     }
  25. template <class SVC_HANDLER, PEER_CONNECTOR_1> int
  26. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::handleClose
  27.     (
  28.     REACTOR_HANDLE,
  29.     REACTOR_EVENT_MASK mask
  30.     )
  31.     {
  32.     TRACE_CALL;
  33.     m_closing = true;
  34.     return 0;
  35.     }
  36. template <class SVC_HANDLER, PEER_CONNECTOR_1> int
  37. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::connectSvcHandler
  38.     (
  39.     const PEER_CONNECTOR_ADDR& remoteAddr,
  40.     SVC_HANDLER*& svcHandler
  41.     )
  42.     {
  43.     TRACE_CALL;
  44.     if (newSvcHandler (svcHandler) < 0)
  45. return -1;
  46.     if (m_connector.connect (svcHandler->stream (), remoteAddr) < 0)
  47. return -1;
  48.     return activateSvcHandler (svcHandler);
  49.     }
  50. template <class SVC_HANDLER, PEER_CONNECTOR_1> int
  51. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::newSvcHandler
  52.     (
  53.     SVC_HANDLER*& svcHandler
  54.     )
  55.     {
  56.     TRACE_CALL;
  57.     if (svcHandler == 0)
  58. svcHandler = new SVC_HANDLER(reactorGet ());
  59.     return svcHandler ? 0 : -1;
  60. }
  61. template <class SVC_HANDLER, PEER_CONNECTOR_1> int
  62. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::activateSvcHandler
  63.     (
  64.     SVC_HANDLER* svcHandler
  65.     )
  66.     {
  67.     TRACE_CALL;
  68.     if (svcHandler->open (this) < 0)
  69. svcHandler->close (); // avoid fd leaks
  70.     return svcHandler->stream().handleInvalid () ? -1 : 0;
  71.     }
  72. template <class SVC_HANDLER, PEER_CONNECTOR_1> int
  73. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::open (Reactor *r)
  74.     {
  75.     TRACE_CALL;
  76.     reactorSet (r);
  77.     m_closing = false;
  78.     return 0;
  79.     }
  80. template <class SVC_HANDLER, PEER_CONNECTOR_1> int
  81. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::connect
  82.     (
  83.     const PEER_CONNECTOR_ADDR& remoteAddr,
  84.     SVC_HANDLER*& svcHandler
  85.     )
  86.     {
  87.     TRACE_CALL;
  88.     return connectSvcHandler (remoteAddr, svcHandler);
  89.     }
  90. template <class SVC_HANDLER, PEER_CONNECTOR_1> int
  91. Connector<SVC_HANDLER, PEER_CONNECTOR_2>::close ()
  92.     {
  93.     TRACE_CALL;
  94.     return handleClose ();
  95.     }
  96. #endif __INCConnector_tcc_