1 #include <iostream>
2 #include <boost/asio.hpp>
3 #include <boost/config/compiler/visualc.hpp>
4 #include <boost/property_tree/ptree.hpp>
5 #include <boost/property_tree/json_parser.hpp>
6 #include <boost/foreach.hpp>
7 #include <boost/filesystem.hpp>
8 #include <boost/filesystem/fstream.hpp>
9 #include <boost/iostreams/device/mapped_file.hpp>
10 #include <cassert>
11 #include <exception>
12 #include <sstream>
13 #include <string>
14 #include <boost/thread.hpp>
15
16
17
18 void test_http()
19 {
20 using namespace boost::asio;
21 ip::tcp::iostream stream;
22
23 stream.expires_from_now(boost::posix_time::seconds(60));
24 stream.connect("www.boost.org", "http");
25 stream << "GET /LICENSE_1_0.txt HTTP/1.0\r\n";
26 stream << "Host: www.boost.org\r\n";
27 stream << "Accept: */*\r\n";
28 stream << "Connection: close\r\n\r\n";
29
30 stream.flush();
31 std::cout << stream.rdbuf();
32 }
33
34 void udp_echo_client()
35 {
36
37 using boost::asio::ip::udp;
38 boost::asio::io_service my_io_service;
39 udp::socket s(my_io_service, udp::endpoint(udp::v4(), 0));
40
41 udp::resolver resolver(my_io_service);
42 }
43
44 int read_file_content(std::string fileName, std::stringstream& ss)
45 {
46 namespace fs = boost::filesystem;
47 fs::path file(fileName);
48 if (!fs::exists(file))
49 {
50 std::cerr << "file does not exist." << std::endl;
51 return EXIT_FAILURE;
52 }
53
54 //std::ifstream t(file) >> ss;
55 fs::ifstream t(file);
56 ss << t.rdbuf();
57 // boost::iostreams::mapped_file mf(file);
58 // mf.data() >> ss;
59
60 return EXIT_SUCCESS;
61 }
62
63 void print_json_data(boost::property_tree::ptree const& pt)
64 {
65 using boost::property_tree::ptree;
66 ptree::const_iterator end = pt.end();
67 for (ptree::const_iterator it = pt.begin(); it != end; it++)
68 {
69 std::cout << it->first << ": " << it->second.get_value<std::string>() << std::endl;
70 print_json_data(it->second);
71 }
72 }
73
74 int parse_json_data()
75 {
76 try
77 {
78 std::stringstream ss;
79
80 read_file_content("data.json",ss);
81 //ss << "{ \"root\": { \"values\": [1, 2, 3, 4, 5 ] } }";
82
83 std::cout << ss.str() << std::endl;
84
85 boost::property_tree::ptree pt;
86 boost::property_tree::read_json(ss, pt);
87
88 BOOST_FOREACH(boost::property_tree::ptree::value_type& v, pt.get_child("editorialMarket"))
89 {
90 assert(v.first.empty());
91 std::cout << v.second.data() << std::endl;
92 }
93
94 print_json_data(pt);
95 }
96 catch (std::exception& e)
97 {
98 std::cerr << "error: " << e.what() << std::endl;
99 }
100
101 return EXIT_SUCCESS;
102 }
103
104 /*
105 函数 main() 首先定义了一个 I/O 服务 io_service,用于初始化 I/O 对象 timer。
106 就象 boost::asio::deadline_timer 那样,所有 I/O 对象通常都需要一个 I/O 服务作为它们的构造函数的第一个参数。
107 由于 timer 的作用类似于一个闹钟,所以 boost::asio::deadline_timer 的构造函数可以传入第二个参数,
108 用于表示在某个时间点或是在某段时长之后闹钟停止。 以上例子指定了五秒的时长,该闹钟在 timer 被定义之后立即开始计时
109 */
110
111 void handler1(const boost::system::error_code& ec)
112 {
113 std::cout << "5 s" << std::endl;
114 for (int i = 0; i < 10; i++)
115 {
116 printf("%s: %d\n",__FUNCTION__, i);
117 boost::this_thread::sleep(boost::posix_time::seconds(1));
118 }
119 }
120
121 void handler2(const boost::system::error_code& ec)
122 {
123 std::cout << "5 s" << std::endl;
124 for (int i = 0; i < 10;i++)
125 {
126 printf("%s: %d\n", __FUNCTION__, i);
127 boost::this_thread::sleep(boost::posix_time::seconds(1));
128 }
129 }
130
131 boost::asio::io_service io_service1;
132 boost::asio::io_service io_service2;
133 void run1()
134 {
135 printf("in %s\n", __FUNCTION__);
136 io_service1.run();
137 }
138
139 void run2()
140 {
141 printf("in %s\n", __FUNCTION__);
142 io_service2.run();
143 }
144
145 void test_io_srv()
146 {
147 //boost::asio::io_service io_service;
148 //创建5s定时器
149 boost::asio::deadline_timer timer1(io_service1, boost::posix_time::seconds(5));
150 timer1.async_wait(handler1);
151
152 //创建5s定时器
153 boost::asio::deadline_timer timer2(io_service2, boost::posix_time::seconds(5));
154 timer2.async_wait(handler2);
155
156 //io_service.run();
157 boost::thread thread1(run1);
158 boost::thread thread2(run2);
159
160 thread1.join();
161 thread2.join();
162 }
163
164
165 int main()
166 {
167 //parse_json_data();
168 test_io_srv();
169 std::cout << "test_io_srv..." << std::endl;
170 }