blob: 9a23dab824bd3662dce7bad0f84e4bd0d91dd538 [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
11#include "aos/common/macros.h"
12#include "aos/common/scoped_fd.h"
13
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_