summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/LWFT/AppSideMonitor_Thread.cpp
blob: 4b6ba6a7912d684b265928d8bd56d8ca1a7e0185 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// -*- C++ -*-
// $Id$

/**
 *  @file  C++ Implementation: AppSideMonitor_Thread
 *
 *  @brief Defines implementation of AppSideMonitor_Thread.
 *
 */

#include "ace/TP_Reactor.h"

#include "Barrier_Guard.h"

#include "AppSideMonitor_Thread.h"
#include "AppOptions.h"

AppSideMonitor_Thread::AppSideMonitor_Thread (
  ACE_Barrier &thread_barrier)
  : port_ (AppOptions::instance ()->port ()),
    reactor_ (new ACE_TP_Reactor),
    acceptor_ (serv_addr_, &reactor_),
    synchronizer_ (thread_barrier)
{
}

AppSideMonitor_Thread::AppSideMonitor_Thread (
  ACE_Barrier &thread_barrier,
  u_short port)
  : port_ (port),
    reactor_ (new ACE_TP_Reactor),
    acceptor_ (serv_addr_, &reactor_),
    synchronizer_ (thread_barrier)
{
}

int
AppSideMonitor_Thread::svc (void)
{
  {
    Barrier_Guard barrier_guard (synchronizer_);

    if (serv_addr_.set (this->port_) == -1)
      {
        ACE_DEBUG ((LM_ERROR,
                    "AppSideMonitor_Thread::svc: can't set port.\n"));
//      this->synchronizer_->wait ();
        return EXIT_FAILURE;
      }
    
    if (acceptor_.open (serv_addr_) == -1)
      {
        ACE_DEBUG ((LM_ERROR,
                    "AppSideMonitor_Thread::svc: can't open the socket.\n"));
//      this->synchronizer_->wait ();
        return EXIT_FAILURE;
      }

  } // release synchronizer here

//  this->synchronizer_->wait ();
//  this->synchronizer_ = 0;

  //ACE_DEBUG ((LM_DEBUG, "Entering reactor event loop.\n"));
  if (reactor_.run_reactor_event_loop() == -1)
    {
      ACE_ERROR_RETURN ((LM_ERROR,
                         "run_reactor_event_loop failed\n"),
                        -1);
    }
  
  return 0;
}

void
AppSideMonitor_Thread::stop (void)
{
  if (reactor_.end_reactor_event_loop() == -1)
    {
      ACE_DEBUG ((LM_ERROR,
                  "end_reactor_event_loop failed\n"));
    }
}