main.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "PjsuaCommunicator.hpp"
  2. #include "MumbleCommunicator.hpp"
  3. #include "IncomingConnectionValidator.hpp"
  4. #include "MumbleChannelJoiner.hpp"
  5. #include "Configuration.hpp"
  6. #include <log4cpp/FileAppender.hh>
  7. #include <log4cpp/OstreamAppender.hh>
  8. #include <log4cpp/PatternLayout.hh>
  9. int main(int argc, char *argv[]) {
  10. log4cpp::Appender *appender1 = new log4cpp::OstreamAppender("console", &std::cout);
  11. log4cpp::PatternLayout layout;
  12. layout.setConversionPattern("%d [%p] %c: %m%n");
  13. appender1->setLayout(&layout);
  14. log4cpp::Category &logger = log4cpp::Category::getRoot();
  15. logger.setPriority(log4cpp::Priority::NOTICE);
  16. logger.addAppender(appender1);
  17. if (argc == 1) {
  18. logger.crit("No configuration file provided. Use %s {config file}", argv[0]);
  19. return 1;
  20. }
  21. config::Configuration conf(argv[1]);
  22. sip::IncomingConnectionValidator connectionValidator(conf.getString("sip.validUriExpression"));
  23. boost::asio::io_service ioService;
  24. sip::PjsuaCommunicator pjsuaCommunicator(connectionValidator);
  25. mumble::MumbleCommunicator mumbleCommunicator(ioService);
  26. mumble::MumbleChannelJoiner mumbleChannelJoiner(conf.getString("mumble.channelNameExpression"));
  27. using namespace std::placeholders;
  28. pjsuaCommunicator.onIncomingPcmSamples = std::bind(
  29. &mumble::MumbleCommunicator::sendPcmSamples,
  30. &mumbleCommunicator,
  31. _1, _2);
  32. pjsuaCommunicator.onStateChange = std::bind(
  33. &mumble::MumbleCommunicator::sendTextMessage,
  34. &mumbleCommunicator, _1);
  35. mumbleCommunicator.onIncomingPcmSamples = std::bind(
  36. &sip::PjsuaCommunicator::sendPcmSamples,
  37. &pjsuaCommunicator,
  38. _1, _2, _3, _4);
  39. mumbleCommunicator.onIncomingChannelState = std::bind(
  40. &mumble::MumbleChannelJoiner::checkChannel,
  41. &mumbleChannelJoiner,
  42. _1, _2);
  43. mumbleCommunicator.onServerSync = std::bind(
  44. &mumble::MumbleChannelJoiner::maybeJoinChannel,
  45. &mumbleChannelJoiner,
  46. &mumbleCommunicator);
  47. mumbleCommunicator.connect(
  48. conf.getString("mumble.user"),
  49. conf.getString("mumble.password"),
  50. conf.getString("mumble.host"),
  51. conf.getInt("mumble.port"));
  52. pjsuaCommunicator.connect(
  53. conf.getString("sip.host"),
  54. conf.getString("sip.user"),
  55. conf.getString("sip.password"),
  56. conf.getInt("sip.port"));
  57. logger.info("Application started.");
  58. ioService.run();
  59. return 0;
  60. }