blob: 503ead138d510d26149ab0f0a6f278e55111808e [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>
Brian Silverman4acae812016-03-14 13:16:19 -04005#include <math.h>
Parker Schuh2cd173d2017-01-28 00:12:01 -08006#include <sys/socket.h>
Brian Silverman4acae812016-03-14 13:16:19 -04007#include <unistd.h>
Parker Schuh2cd173d2017-01-28 00:12:01 -08008#include <string>
Brian Silverman4acae812016-03-14 13:16:19 -04009#include <vector>
10
John Park33858a32018-09-28 23:05:48 -070011#include "aos/macros.h"
12#include "aos/scoped/scoped_fd.h"
Brian Silverman4acae812016-03-14 13:16:19 -040013
14namespace aos {
Parker Schuh2cd173d2017-01-28 00:12:01 -080015namespace events {
Brian Silverman4acae812016-03-14 13:16:19 -040016
17// Simple wrapper around a transmitting UDP socket.
18//
19// LOG(FATAL)s for all errors, including from Send.
20class TXUdpSocket {
21 public:
Parker Schuh2cd173d2017-01-28 00:12:01 -080022 TXUdpSocket(const std::string &ip_addr, int port);
Brian Silverman4acae812016-03-14 13:16:19 -040023
24 // Returns the number of bytes actually sent.
Parker Schuh2cd173d2017-01-28 00:12:01 -080025 int Send(const char *data, int size);
Brian Silverman4acae812016-03-14 13:16:19 -040026
27 private:
28 ScopedFD fd_;
29
30 DISALLOW_COPY_AND_ASSIGN(TXUdpSocket);
31};
32
Austin Schuh8d5fff42018-05-30 20:44:12 -070033// Send a protobuf. Not RT (mallocs on send).
34template <typename PB>
35class ProtoTXUdpSocket {
36 public:
37 ProtoTXUdpSocket(const std::string &ip_addr, int port)
38 : socket_(ip_addr, port) {}
39
40 void Send(const PB &pb) {
41 ::std::string serialized_data;
42 pb.SerializeToString(&serialized_data);
43 socket_.Send(serialized_data.data(), serialized_data.size());
44 }
45
46 private:
47 TXUdpSocket socket_;
48 DISALLOW_COPY_AND_ASSIGN(ProtoTXUdpSocket);
49};
50
Brian Silverman4acae812016-03-14 13:16:19 -040051// Simple wrapper around a receiving UDP socket.
52//
53// LOG(FATAL)s for all errors, including from Recv.
54class RXUdpSocket {
55 public:
56 RXUdpSocket(int port);
57
58 // Returns the number of bytes received.
59 int Recv(void *data, int size);
60
Austin Schuh8d5fff42018-05-30 20:44:12 -070061 static int SocketBindListenOnPort(int port);
62
Brian Silverman4acae812016-03-14 13:16:19 -040063 private:
64 ScopedFD fd_;
65
66 DISALLOW_COPY_AND_ASSIGN(RXUdpSocket);
67};
68
Parker Schuh2cd173d2017-01-28 00:12:01 -080069} // namespace events
Brian Silverman4acae812016-03-14 13:16:19 -040070} // namespace aos
71
Parker Schuh2cd173d2017-01-28 00:12:01 -080072#endif // AOS_VISION_EVENTS_UDP_H_