//==========================================================================
/**
 *  @file    Server.h
 *
 *  @author Baranidharan K.
 */
//==========================================================================                                                                                                                            
#ifndef _BPING_SERVER_H_
#define _BPING_SERVER_H_

                                                                               
#include<iostream>
#include "ace/Reactor.h"
#include "ace/TP_Reactor.h"
#include "ace/Task_T.h"
#include "ipmi_task.h"
#include "parser_task.h"
#include "ace/Trace.h"
#include "ace/Log_Msg.h"
                                                                                                                             
#define IGNORE_STATIC_SERVICES 1
#define IGNORE_DEFAULT_SVC_CONF_FILE 1
                                                                                                                             

using namespace std;


class BPing_Server
{
private :
    Parser_Task *pa_ta;     
    Ipmi_Task *ipmi_ta;
    /**
     * BPing_Server() constructor initilizes the all task pointers
     */
    BPing_Server(void);
   ~BPing_Server(void); 
    static BPing_Server *server;
public :
    static BPing_Server* instance(void);
    /// start_server() fuction calling the all task open functions
    void start_server(void);   
    Ipmi_Task *get_ipmi_task(void);   
};

#endif
#include "Server.h"
#include "ace/Service_Config.h"

BPing_Server* BPing_Server::server = 0;

Ipmi_Task * BPing_Server::get_ipmi_task(void)
{
  return ipmi_ta;    
}

BPing_Server::BPing_Server(void)
{
   pa_ta =  Parser_Task::instance();
   ipmi_ta = new Ipmi_Task();

}

BPing_Server::~BPing_Server(void) {}


void BPing_Server::start_server(void)
{
    ipmi_ta->open(); 
    ACE_Reactor *reactor_ = new ACE_Reactor();
    pa_ta->start(reactor_);
    ACE_Thread_Manager::instance ()->wait ();
}

BPing_Server* BPing_Server::instance(void)
{
   if (BPing_Server::server == 0)
      {
        ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon,
                                  *ACE_Static_Object_Lock::instance (), 0));
        if (BPing_Server::server == 0)
          ACE_NEW_RETURN (BPing_Server::server, BPing_Server, 0);
      }
   return BPing_Server::server;

}

int handle_signals ( int signum )
{
    ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("(%P|%t) received signal %S\n"),
                signum));
    switch ( signum )
        {
             case SIGPIPE:
                  ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%D|%t) handled SIGPIPE\n")));
                  return 0;
        }
    return 0;
}


static ACE_THR_FUNC_RETURN asynchronous_signal_handler (void *)
{  
     ACE_Sig_Set sigset;
     sigset.sig_add ( SIGPIPE );
     ACE_Sig_Action sa (sigset,(ACE_SignalHandler) handle_signals);
     ACE_UNUSED_ARG (sa);
     return 0;
                                                                                                                                                   
}


int main(int argc, char **argv)
{

    //ACE_Select_Reactor sr;
    ACE_TP_Reactor sr;
    ACE_Reactor new_reactor(&sr);
    ACE_Reactor::instance(&new_reactor);
    if(ACE_Service_Config :: open (1,
                                  argv,
                                  ACE_DEFAULT_LOGGER_KEY,1,0) < 0 )
      ACE_ERROR_RETURN ((LM_ERROR,
                        ACE_TEXT ("(%D) %p Service Config open error in Bping")),
                        -1);  

   asynchronous_signal_handler (0);
   BPing_Server::instance()->start_server();
   return 0;
}
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to