blob: 3c16b282eafaab45e8da181c34f28b1cbc5acdb1 [file] [log] [blame]
Parker Schuh2cd173d2017-01-28 00:12:01 -08001#ifndef AOS_VISION_EVENTS_UDP_H_
2#define AOS_VISION_EVENTS_UDP_H_
Brian Silverman4acae812016-03-14 13:16:19 -04003
4#include <arpa/inet.h>
Parker Schuh2cd173d2017-01-28 00:12:01 -08005#include <sys/socket.h>
Brian Silverman4acae812016-03-14 13:16:19 -04006#include <unistd.h>
Tyler Chatowbf0609c2021-07-31 16:13:27 -07007
8#include <cmath>
Parker Schuh2cd173d2017-01-28 00:12:01 -08009#include <string>
Brian Silverman4acae812016-03-14 13:16:19 -040010#include <vector>
11
John Park33858a32018-09-28 23:05:48 -070012#include "aos/macros.h"
13#include "aos/scoped/scoped_fd.h"
Brian Silverman4acae812016-03-14 13:16:19 -040014
15namespace aos {
Parker Schuh2cd173d2017-01-28 00:12:01 -080016namespace events {
Brian Silverman4acae812016-03-14 13:16:19 -040017
18// Simple wrapper around a transmitting UDP socket.
19//
20// LOG(FATAL)s for all errors, including from Send.
21class TXUdpSocket {
22 public:
Parker Schuh2cd173d2017-01-28 00:12:01 -080023 TXUdpSocket(const std::string &ip_addr, int port);
Brian Silverman4acae812016-03-14 13:16:19 -040024
25 // Returns the number of bytes actually sent.
Parker Schuh2cd173d2017-01-28 00:12:01 -080026 int Send(const char *data, int size);
Brian Silverman4acae812016-03-14 13:16:19 -040027
28 private:
29 ScopedFD fd_;
30
31 DISALLOW_COPY_AND_ASSIGN(TXUdpSocket);
32};
33
Austin Schuh8d5fff42018-05-30 20:44:12 -070034// Send a protobuf. Not RT (mallocs on send).
35template <typename PB>
36class ProtoTXUdpSocket {
37 public:
38 ProtoTXUdpSocket(const std::string &ip_addr, int port)
39 : socket_(ip_addr, port) {}
40
41 void Send(const PB &pb) {
42 ::std::string serialized_data;
43 pb.SerializeToString(&serialized_data);
44 socket_.Send(serialized_data.data(), serialized_data.size());
45 }
46
47 private:
48 TXUdpSocket socket_;
49 DISALLOW_COPY_AND_ASSIGN(ProtoTXUdpSocket);
50};
51
Brian Silverman4acae812016-03-14 13:16:19 -040052// Simple wrapper around a receiving UDP socket.
53//
54// LOG(FATAL)s for all errors, including from Recv.
55class RXUdpSocket {
56 public:
57 RXUdpSocket(int port);
58
59 // Returns the number of bytes received.
60 int Recv(void *data, int size);
61
Austin Schuh8d5fff42018-05-30 20:44:12 -070062 static int SocketBindListenOnPort(int port);
63
Brian Silverman4acae812016-03-14 13:16:19 -040064 private:
65 ScopedFD fd_;
66
67 DISALLOW_COPY_AND_ASSIGN(RXUdpSocket);
68};
69
Parker Schuh2cd173d2017-01-28 00:12:01 -080070} // namespace events
Brian Silverman4acae812016-03-14 13:16:19 -040071} // namespace aos
72
Parker Schuh2cd173d2017-01-28 00:12:01 -080073#endif // AOS_VISION_EVENTS_UDP_H_