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; }