/* Just wait for ok to connect on context 0 */ void DopeApp::ConnectionThread() { DummyDispatcher dispatcher; Safir::Dob::Connection tmpConnection; try { tmpConnection.Open(L"DOPE_TMP",L"0",0,NULL,&dispatcher); m_ioService.post(boost::bind(&DopeApp::SignalOkToConnect,this, true)); } catch (Safir::Dob::NotOpenException e) { Safir::Logging::SendSystemLog(Safir::Logging::Critical, L"NotOpenException in ConnectionThread!!!"); } catch (const std::exception & e) { Safir::Logging::SendSystemLog(Safir::Logging::Critical, L"Unhandled exception in ConnectionThread: " + Safir::Dob::Typesystem::Utilities::ToWstring(e.what())); } catch (...) { Safir::Logging::SendSystemLog(Safir::Logging::Critical, L"Unhandled '...' exception in ConnectionThread"); } m_ioService.post(boost::bind(&DopeApp::SignalOkToConnect,this, false)); }
int main(int argc, char* argv[]) { if(!CommandLine::Instance().Parse(argc,argv)) { return -1; } try { Safir::Dob::Connection connection; SimpleDispatcher dispatcher (connection); std::wstring name = L"Request"; if (CommandLine::Instance().Requestor()) { name += L"Requestor"; } else { name += L"Receiver"; } for(int instance = 0;;++instance) { try { connection.Open(name, boost::lexical_cast<std::wstring>(instance), 0, // Context &dispatcher, &dispatcher); break; } catch(const Safir::Dob::NotOpenException &) { } } std::wcout << "Started as " << Safir::Dob::ConnectionAspectMisc(connection).GetConnectionName() << std::endl; bool done = false; if(CommandLine::Instance().Requestor()) //We are a requestor { Requestor requestor; while (!done) { requestor.SendSome(); dispatcher.Wait(1); connection.Dispatch(); } } else //no, a receiver { Provider provider; while(!done) { const bool dispatch = dispatcher.Wait(10); if (dispatch) { connection.Dispatch(); } } } } catch(std::exception & e) { std::wcout << "Caught std::exception! Contents of exception is:" << std::endl << e.what()<<std::endl; std::cin.get(); } catch (...) { std::wcout << "Caught ... exception!" << std::endl; std::cin.get(); } return 0; }
int main(int argc, char* argv[]) { if(!CommandLine::Instance().Parse(argc,argv)) { return -1; } try { Safir::Dob::Connection connection; SimpleDispatcher dispatcher(connection); std::wstring name = L"Entity"; if (CommandLine::Instance().Owner()) { name += L"Owner"; } else if (CommandLine::Instance().Subscriber()) { name += L"Subscriber"; } for(int instance = 0;;++instance) { try { connection.Open(name, boost::lexical_cast<std::wstring>(instance), 0, // Context &dispatcher, &dispatcher); break; } catch(const Safir::Dob::NotOpenException &) { } } std::wcout << "Started as " << Safir::Dob::ConnectionAspectMisc(connection).GetConnectionName() << std::endl; bool done = false; if (CommandLine::Instance().Owner()) { Owner owner; while (!done) { if (!CommandLine::Instance().NoSleep()) { const bool dispatch = dispatcher.Wait(CommandLine::Instance().SleepTime()); if (dispatch) { connection.Dispatch(); } } for (int i = 0; i < CommandLine::Instance().BatchSize(); ++i) { owner.Set(); } } } else if (CommandLine::Instance().Subscriber()) { Subscriber subscriber; bool started = false; while (!done) { const bool dispatch = dispatcher.Wait(10000); if(dispatch) { started = true; connection.Dispatch(); } else if (started) { std::wcout << "No dispatch event in 10s, printing statistics and exiting" << std::endl; subscriber.PrintStatistics(); if (CommandLine::Instance().ExtraDispatch()) { std::wcout << "Performing an extra dispatch, and then printing statistics again:" << std::endl; connection.Dispatch(); subscriber.PrintStatistics(); } break; } } } } catch(std::exception & e) { std::wcout << "Caught std::exception! Contents of exception is:" << std::endl << e.what()<<std::endl; std::cin.get(); } catch (...) { std::wcout << "Caught ... exception!" << std::endl; std::cin.get(); } return 0; }