blob: c4b745fbe2bbd4883463ec5ce7c74cf691c01970 [file] [log] [blame]
//
// udp_service_impl.cpp
//
// Author: Lutz Bichler
//
// This file is part of the BMW Some/IP implementation.
//
// Copyright © 2013, 2014 Bayerische Motoren Werke AG (BMW).
// All rights reserved.
//
#include <iomanip>
#include <iostream>
#include <boost/bind.hpp>
#include <vsomeip/enumeration_types.hpp>
#include <vsomeip/endpoint.hpp>
#include <vsomeip/impl/udp_service_impl.hpp>
namespace ip = boost::asio::ip;
namespace vsomeip {
udp_service_impl::udp_service_impl(const endpoint &_endpoint)
: io_(),
socket_(io_,
ip::udp::endpoint((_endpoint.get_version() == ip_version::V6 ?
ip::udp::v6() : ip::udp::v4()),
_endpoint.get_port())) {
}
udp_service_impl::~udp_service_impl() {
}
void udp_service_impl::start() {
socket_.async_receive_from(
boost::asio::buffer(buffer_), remote_,
boost::bind(&udp_service_impl::receive_callback, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void udp_service_impl::stop() {
}
std::size_t udp_service_impl::poll_one() {
return io_.poll_one();
}
std::size_t udp_service_impl::poll() {
return io_.poll();
}
std::size_t udp_service_impl::run() {
return io_.run();
}
void udp_service_impl::send_callback(boost::system::error_code const &error, std::size_t transferred_bytes) {
}
void udp_service_impl::receive_callback(boost::system::error_code const &error, std::size_t transferred_bytes) {
if (!error || error == boost::asio::error::message_size) {
std::cout << "Received(" << std::dec << (int)transferred_bytes << "): ";
//for (std::size_t i = 0; i < transferred_bytes; ++i)
// std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)buffer_[i] << " ";
std::cout << std::endl;
start();
}
}
} // namespace vsomeip