Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ** EPITECH PROJECT, 2018
- ** Rtype
- ** File description:
- ** Rtype
- */
- #include <iostream>
- #include "UDPServer.h"
- Rtype::UDPServer::UDPServer(boost::asio::io_service& io_service, int port)
- : socket_(io_service, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), port))
- {
- this->_isConnected = false;
- start_receive();
- }
- Rtype::UDPServer::~UDPServer(){
- }
- void Rtype::UDPServer::start_receive(){
- socket_.async_receive_from(
- boost::asio::buffer(buffer), remote_endpoint_,
- boost::bind(&UDPServer::handle_receive, this,
- boost::asio::placeholders::error,
- boost::asio::placeholders::bytes_transferred));
- }
- void Rtype::UDPServer::handle_receive(const boost::system::error_code& error, std::size_t bytes_transferred) {
- if (!error || error == boost::asio::error::message_size) {
- std::vector<char> data;
- for (int i = 0; i < bytes_transferred; i++) {
- data.push_back(this->buffer[i]);
- }
- std::unique_ptr<IMessageUDP> msg = std::make_unique<MessageUDP>();
- msg.get()->deserialize(data);
- if (msg->getMessageType() == UDPMessageType::UDP_CONNECT) {
- this->_isConnected = true;
- }
- std::cout << "udpmsg" << msg.get()->getMessageType() << std::endl;
- this->_receivedMessages.push(std::move(msg));
- }
- start_receive();
- }
- std::unique_ptr<Rtype::IMessageUDP> Rtype::UDPServer::popMessage(){
- if (this->_receivedMessages.size() > 0) {
- std::unique_ptr<Rtype::IMessageUDP> m = std::move(this->_receivedMessages.front());
- this->_receivedMessages.pop();
- return (m);
- }
- throw std::runtime_error("No messages");
- }
- void Rtype::UDPServer::sendMessage(std::unique_ptr<IMessageUDP> message) {
- socket_.async_send_to(boost::asio::buffer(message.get()->serialize()), remote_endpoint_,
- boost::bind(&UDPServer::handle_send, this,
- boost::asio::placeholders::error,
- boost::asio::placeholders::bytes_transferred));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement