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

VxWorks

开发平台:

C/C++

  1. /* RpcIfServer */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01l,17dec01,nel  Add include symbol for diab.
  7. 01k,13jul01,dbs  fix up includes
  8. 01j,24feb00,dbs  call close() from dtor
  9. 01i,20sep99,aim  added ThreadName parameter
  10. 01h,19aug99,aim  change assert to VXDCOM_ASSERT
  11. 01g,13aug99,aim  added threadPriority to ThreadPool ctor
  12. 01f,12aug99,aim  ThreadPool API changes
  13. 01e,30jul99,aim  added thread pooling
  14. 01d,15jul99,aim  added serverAddress
  15. 01c,09jul99,dbs  use final filenames
  16. 01b,08jun99,aim  rework
  17. 01a,27may99,aim  created
  18. */
  19. #include "RpcIfServer.h"
  20. #include "RpcEventHandler.h"
  21. #include "Reactor.h"
  22. #include "RpcDispatcher.h"
  23. #include "Syslog.h"
  24. #include "TraceCall.h"
  25. #include "private/comMisc.h"
  26. /* Include symbol for diab */
  27. extern "C" int include_vxdcom_RpcIfServer (void)
  28.     {
  29.     return 0;
  30.     }
  31. RpcIfServer::RpcIfServer
  32.     (
  33.     Reactor* reactor,
  34.     RpcDispatcher* dispatcher,
  35.     concurrency_t concurrency
  36.     )
  37.   : RpcServer (reactor),
  38.     m_dispatcher (dispatcher),
  39.     m_addressBinding (),
  40.     m_concurrency (concurrency),
  41.     m_threadPool (g_vxdcomDefaultStackSize, g_vxdcomThreadPoolPriority)
  42.     {
  43.     COM_ASSERT (m_dispatcher);
  44.     TRACE_CALL;
  45.     };
  46. RpcIfServer::~RpcIfServer ()
  47.     {
  48.     TRACE_CALL;
  49.     // Call our own close() in case someone has over-ridden close()
  50.     // and doesn't defer to this class's close() as they should...
  51.     RpcIfServer::close ();
  52.     }
  53. int RpcIfServer::open
  54.     (
  55.     const INETSockAddr& addr,
  56.     Reactor* reactor,
  57.     int reuseAddr,
  58.     int minThreads,
  59.     int maxThreads
  60.     )
  61.     {
  62.     if (m_concurrency == ThreadPooled)
  63. m_threadPool.open (reactor, minThreads, maxThreads, "tComTask");
  64.     
  65.     // delegate everything else
  66.     return super::open (addr, reactor, reuseAddr);
  67.     }
  68. int RpcIfServer::close ()
  69.     {
  70.     if (m_concurrency == ThreadPooled)
  71. m_threadPool.close ();
  72.     // delegate everything else
  73.     return super::close ();
  74.     }
  75. RpcIfServer::concurrency_t RpcIfServer::concurrency () const
  76.     {
  77.     return m_concurrency;
  78.     }
  79. ThreadPool* RpcIfServer::threadPool ()
  80.     {
  81.     return &m_threadPool;
  82.     }
  83.     
  84. const RpcStringBinding& RpcIfServer::addressBinding ()
  85.     {
  86.     if (!m_addressBinding.isValid ())
  87. {
  88. INETSockAddr addr;
  89. if (hostAddrGet (addr) != -1)
  90.     m_addressBinding = RpcStringBinding (addr);
  91. }
  92.     return m_addressBinding;
  93.     }
  94. int RpcIfServer::rpcAddressFormat
  95.     (
  96.     BSTR* bstr,
  97.     bool includePortNumber
  98.     )
  99.     {
  100.     const RpcStringBinding& sb = addressBinding ();
  101.     if (sb.isValid () && sb.format (bstr, includePortNumber) != -1)
  102. return 0;
  103.     else
  104. return -1;
  105.     }
  106. int RpcIfServer::newSvcHandler
  107.     (
  108.     RpcEventHandler*& eventHandler
  109.     )
  110.     {
  111.     TRACE_CALL;
  112.     eventHandler = new RpcEventHandler (reactorGet (), m_dispatcher);
  113.     return eventHandler ? 0 : -1;
  114.     }