blob: bbe5a542723e9ac7adf62fbbf91135948218fcfa [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
Parker Schuh2cd173d2017-01-28 00:12:01 -08004#include <string>
Brian Silverman4acae812016-03-14 13:16:19 -04005
John Park33858a32018-09-28 23:05:48 -07006#include "aos/macros.h"
7#include "aos/scoped/scoped_fd.h"
Brian Silverman4acae812016-03-14 13:16:19 -04008
Stephan Pleinesd99b1ee2024-02-02 20:56:44 -08009namespace aos::events {
Brian Silverman4acae812016-03-14 13:16:19 -040010
11// Simple wrapper around a transmitting UDP socket.
12//
13// LOG(FATAL)s for all errors, including from Send.
14class TXUdpSocket {
15 public:
Parker Schuh2cd173d2017-01-28 00:12:01 -080016 TXUdpSocket(const std::string &ip_addr, int port);
Brian Silverman4acae812016-03-14 13:16:19 -040017
18 // Returns the number of bytes actually sent.
Parker Schuh2cd173d2017-01-28 00:12:01 -080019 int Send(const char *data, int size);
Brian Silverman4acae812016-03-14 13:16:19 -040020
21 private:
22 ScopedFD fd_;
23
24 DISALLOW_COPY_AND_ASSIGN(TXUdpSocket);
25};
26
Austin Schuh8d5fff42018-05-30 20:44:12 -070027// Send a protobuf. Not RT (mallocs on send).
28template <typename PB>
29class ProtoTXUdpSocket {
30 public:
31 ProtoTXUdpSocket(const std::string &ip_addr, int port)
32 : socket_(ip_addr, port) {}
33
34 void Send(const PB &pb) {
35 ::std::string serialized_data;
36 pb.SerializeToString(&serialized_data);
37 socket_.Send(serialized_data.data(), serialized_data.size());
38 }
39
40 private:
41 TXUdpSocket socket_;
42 DISALLOW_COPY_AND_ASSIGN(ProtoTXUdpSocket);
43};
44
Brian Silverman4acae812016-03-14 13:16:19 -040045// Simple wrapper around a receiving UDP socket.
46//
47// LOG(FATAL)s for all errors, including from Recv.
48class RXUdpSocket {
49 public:
50 RXUdpSocket(int port);
51
52 // Returns the number of bytes received.
53 int Recv(void *data, int size);
54
Austin Schuh8d5fff42018-05-30 20:44:12 -070055 static int SocketBindListenOnPort(int port);
56
Brian Silverman4acae812016-03-14 13:16:19 -040057 private:
58 ScopedFD fd_;
59
60 DISALLOW_COPY_AND_ASSIGN(RXUdpSocket);
61};
62
Stephan Pleinesd99b1ee2024-02-02 20:56:44 -080063} // namespace aos::events
Brian Silverman4acae812016-03-14 13:16:19 -040064
Parker Schuh2cd173d2017-01-28 00:12:01 -080065#endif // AOS_VISION_EVENTS_UDP_H_