-
Notifications
You must be signed in to change notification settings - Fork 1
/
send_sms.cpp
109 lines (85 loc) · 3.35 KB
/
send_sms.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Complete example, showing how to list all sender-id types available.
// We want to set the log-level
#include "restc-cpp/logging.h"
// Include some boiler-plate boost headers
#include <boost/program_options.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/filesystem.hpp>
// Include the required SDK headers
#include "scgapi/Scg.h"
#include "scgapi/Message.h"
#include "scgapi/MessageRequest.h"
// Best practice is to not clobber the code with name spaces
using namespace std;
using namespace scg_api;
int main(int argc, char * argv[])
{
// Parse the command-line
namespace po = boost::program_options;
po::options_description opts("Options");
opts.add_options()
("help,h", "Show help")
("auth,a", po::value<string>()->default_value("auth.json"), "Json auth file")
("url,u", po::value<string>()->default_value("https://beta.api.syniverse.co"), "URL to api server")
("test,t", po::value<bool>()->default_value(true), "Test message flag")
("mdn,m", po::value<string>()->required(), "Mdn")
("senderid,s", po::value<string>()->required(), "Sender id")
;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, opts), vm);
if (vm.count("help")) {
cout << opts;
return -1;
}
try {
po::notify(vm);
} catch(const po::required_option& ex) {
cerr << "Error: " << ex.what() << endl;
return -1;
}
// Authentication file
const auto auth_path = vm["auth"].as<string>();
// URL to the API server
const auto url = vm["url"].as<string>();
// Test flag. If set, the message will be processed but not sent
const auto test_flag = vm["test"].as<bool>();
// GSM number
const auto mdn = vm["mdn"].as<string>();
// Sender ID to use
const auto senderid = vm["senderid"].as<string>();
// Set the log level
namespace logging = boost::log;
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
// Use the SDK's log macros to give some status information
RESTC_CPP_LOG_DEBUG << "Example starting in " << boost::filesystem::current_path();
RESTC_CPP_LOG_DEBUG << "Using auth-file: " << auth_path;
// Instatiate an object with the authentication info
auto auth = make_shared<scg_api::AuthInfo>(auth_path);
// Create an instance of Scg;
auto scg = Scg::Create();
// Create a co-routine that can use the SDK, connecting to 'url'
auto future = scg->Connect(url, auth, [&](Session& session) {
// This is a C++ lambda co-routine, running in a worker-thread.
MessageRequest::Resource res(session);
MessageRequest new_mrq;
new_mrq.from = "sender_id:"s + senderid;
new_mrq.to = {mdn};
new_mrq.body = "Hello World";
new_mrq.test_message_flag = test_flag;
const auto msgreq_id = res.Create(new_mrq);
cout << "Created Message Request: " << msgreq_id << endl;
});
// Use a try-block to catch exceptions that may be re-thrown from the
// lambda block when you call the future's get() method.
try {
// Wait for the lambda to finish it's execution.
future.get();
} catch(const exception& ex) {
cerr << "Execution failed with exception: " << ex.what() << endl;
}
}