39 #include <boost/bind.hpp>
40 #include <boost/shared_ptr.hpp>
41 #include <boost/asio.hpp>
42 #include <boost/thread/thread.hpp>
50 template<
typename Distance>
54 typedef typename Distance::ElementType ElementType;
55 typedef typename Distance::ResultType DistanceType;
56 typedef boost::shared_ptr<tcp::socket> socket_ptr;
59 void session(socket_ptr sock)
61 boost::mpi::communicator world;
64 if (world.rank()==0) {
66 std::cout <<
"Received query\n";
69 boost::mpi::broadcast(world, req, 0);
72 if (world.rank()==0) {
79 std::cout <<
"Searching in process " << world.rank() <<
"\n";
82 if (world.rank()==0) {
83 std::cout <<
"Sending result\n";
88 if (world.rank()==0) {
90 delete[] resp.
dists.ptr();
94 catch (std::exception& e) {
95 std::cerr <<
"Exception in thread: " << e.what() <<
"\n";
105 boost::mpi::communicator world;
106 if (world.rank()==0) {
107 std::cout <<
"Reading dataset and building index...";
108 std::flush(std::cout);
113 if (world.rank()==0) {
114 std::cout <<
"done.\n";
121 boost::mpi::communicator world;
122 boost::shared_ptr<boost::asio::io_service> io_service;
123 boost::shared_ptr<tcp::acceptor> acceptor;
125 if (world.rank()==0) {
126 io_service.reset(
new boost::asio::io_service());
127 acceptor.reset(
new tcp::acceptor(*io_service, tcp::endpoint(tcp::v4(), port_)));
128 std::cout <<
"Start listening for queries...\n";
132 if (world.rank()==0) {
133 sock.reset(
new tcp::socket(*io_service));
134 acceptor->accept(*sock);
135 std::cout <<
"Accepted connection\n";
138 boost::thread t(boost::bind(&Server::session,
this, sock));
cmdLineReadable * params[]
void knnSearch(const flann::Matrix< ElementType > &queries, flann::Matrix< int > &indices, flann::Matrix< DistanceType > &dists, int knn, const SearchParams ¶ms)
Server(const std::string &filename, const std::string &dataset, short port, const IndexParams ¶ms)
void write_object(tcp::socket &sock, const T &val)
void read_object(tcp::socket &sock, T &val)
std::map< std::string, any > IndexParams
flann::Matrix< T > queries
flann::Matrix< int > indices