]> SALOME platform Git repositories - modules/kernel.git/blob - src/Logger/SALOME_Logger_Server.cxx
Salome HOME
This commit was generated by cvs2git to track changes on a CVS vendor
[modules/kernel.git] / src / Logger / SALOME_Logger_Server.cxx
1 //  SALOME Logger : CORBA server managing trace output
2 //
3 //  Copyright (C) 2003  CEA/DEN, EDF R&D
4 //
5 //
6 //
7 //  File   : SALOME_Logger_Server.cxx
8 //  Author : Vasily Rusyaev
9 //  Module : SALOME
10
11 using namespace std;
12 #include <iostream>
13 #include "SALOME_Logger_Server.hxx"
14
15 omni_mutex Logger::myLock;
16
17 /////////////////////////////////////////////////////////////////////
18 // Construction/Destruction
19 //////////////////////////////////////////////////////////////////////
20
21 Logger::Logger()
22 {
23   m_putIntoFile = false;
24 }
25
26 Logger::Logger(const char *filename)
27 {
28   //  m_outputFile.open( filename, ios::out | ios::trunc , filebuf::openprot);
29   m_outputFile.open( filename, ios::out | ios::trunc);
30   if (m_outputFile.is_open())
31     m_putIntoFile = true;
32   else
33     m_putIntoFile = false;
34 }
35
36 Logger::~Logger()
37 {
38   if (m_putIntoFile)
39     m_outputFile.close();
40 }
41
42 void Logger::putMessage(const char* message)
43 {
44   myLock.lock();
45   if (m_putIntoFile)
46     m_outputFile << message << flush;
47   else
48     cout << message;
49   myLock.unlock();
50 }
51
52 int main(int argc, char **argv)
53 {
54   if (argc > 2)
55     {
56       cout << "usage: SALOME_Logger_Server [output_file]" << endl;
57       exit(1);
58     }
59   try
60     {
61       //Initialize the ORB
62       CORBA::ORB_var orb = CORBA::ORB_init(argc,argv) ;
63
64       CORBA::Object_var obj = orb->resolve_initial_references("RootPOA") ;
65       PortableServer::POA_var poa = PortableServer::POA::_narrow(obj) ;
66
67       // NB. You can activate the POA before or after
68       // activating objects in that POA.
69       PortableServer::POAManager_var pman = poa->the_POAManager();
70       pman->activate();
71
72       Logger* myLogger;
73       if (argc == 1)
74         myLogger = new Logger();
75       else
76         myLogger = new Logger(argv[1]);
77
78
79       // This activates the object in the root POA (by default), and
80       // returns a reference to it.
81       SALOME_Logger::Logger_var myLoggerRef = myLogger->_this();
82
83        //NB. You can't use SALOME_NamingService class because it uses MESSAGE macro
84       //Otherwise, you will get segmentation fault.   
85
86       //Get initial naming context
87       CORBA::Object_var theObj = orb->resolve_initial_references("NameService");
88       //Narrow to NamingContext
89       CosNaming::NamingContext_var inc = CosNaming::NamingContext::_narrow(theObj);
90
91       CosNaming::Name name;
92       name.length(1);
93       name[0].id = CORBA::string_dup("Logger");
94       
95       inc->bind(name,myLoggerRef);
96
97       myLogger->_remove_ref();
98
99       orb->run() ;
100
101       orb->destroy() ;
102     }
103   catch(CORBA::COMM_FAILURE& ex) 
104     {
105       cerr << "Caught system exception COMM_FAILURE -- unable to contact the "
106         << "object." << endl;
107     }
108   catch(CORBA::SystemException&) 
109     {
110       cerr << "Caught CORBA::SystemException." << endl;
111     }
112   catch(CORBA::Exception&) 
113     {
114       cerr << "Caught CORBA::Exception." << endl;
115     }
116   catch(omniORB::fatalException& fe) 
117     {
118       cerr << "Caught omniORB::fatalException:" << endl;
119       cerr << "  file: " << fe.file() << endl;
120       cerr << "  line: " << fe.line() << endl;
121       cerr << "  mesg: " << fe.errmsg() << endl;
122     }
123   catch(...) 
124     {
125       cerr << "Caught unknown exception." << endl;
126     }
127 }