Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. /*
  2. ** EPITECH PROJECT, 2018
  3. ** Rtype
  4. ** File description:
  5. ** Rtype
  6. */
  7.  
  8. #include <iostream>
  9. #include "UDPServer.h"
  10.  
  11. Rtype::UDPServer::UDPServer(boost::asio::io_service& io_service, int port)
  12. : socket_(io_service, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), port))
  13. {
  14. this->_isConnected = false;
  15. start_receive();
  16. }
  17.  
  18. Rtype::UDPServer::~UDPServer(){
  19.  
  20. }
  21.  
  22. void Rtype::UDPServer::start_receive(){
  23. socket_.async_receive_from(
  24. boost::asio::buffer(buffer), remote_endpoint_,
  25. boost::bind(&UDPServer::handle_receive, this,
  26. boost::asio::placeholders::error,
  27. boost::asio::placeholders::bytes_transferred));
  28. }
  29.  
  30. void Rtype::UDPServer::handle_receive(const boost::system::error_code& error, std::size_t bytes_transferred) {
  31. if (!error || error == boost::asio::error::message_size) {
  32. std::vector<char> data;
  33. for (int i = 0; i < bytes_transferred; i++) {
  34. data.push_back(this->buffer[i]);
  35. }
  36.  
  37. std::unique_ptr<IMessageUDP> msg = std::make_unique<MessageUDP>();
  38. msg.get()->deserialize(data);
  39.  
  40. if (msg->getMessageType() == UDPMessageType::UDP_CONNECT) {
  41. this->_isConnected = true;
  42. }
  43.  
  44. std::cout << "udpmsg" << msg.get()->getMessageType() << std::endl;
  45.  
  46. this->_receivedMessages.push(std::move(msg));
  47. }
  48. start_receive();
  49. }
  50.  
  51. std::unique_ptr<Rtype::IMessageUDP> Rtype::UDPServer::popMessage(){
  52. if (this->_receivedMessages.size() > 0) {
  53. std::unique_ptr<Rtype::IMessageUDP> m = std::move(this->_receivedMessages.front());
  54. this->_receivedMessages.pop();
  55. return (m);
  56. }
  57. throw std::runtime_error("No messages");
  58. }
  59.  
  60. void Rtype::UDPServer::sendMessage(std::unique_ptr<IMessageUDP> message) {
  61. socket_.async_send_to(boost::asio::buffer(message.get()->serialize()), remote_endpoint_,
  62. boost::bind(&UDPServer::handle_send, this,
  63. boost::asio::placeholders::error,
  64. boost::asio::placeholders::bytes_transferred));
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement