20 #include <PacketSender.hpp>
21 #include <WebVttPacket.hpp>
22 #include <sys/epoll.h>
28 using DataBuffer = std::vector<uint8_t>;
30 void serverThread(
const char *socket_path)
32 int epoll = ::epoll_create(10);
33 int serversock = ::socket(AF_UNIX, SOCK_DGRAM, 0);
34 struct sockaddr_un addr;
35 addr.sun_family = AF_UNIX;
36 if (NULL != socket_path)
37 (void) std::strncpy(addr.sun_path, socket_path,
sizeof(addr.sun_path));
39 (
void) std::strncpy(addr.sun_path, SOCKET_PATH,
sizeof(addr.sun_path));
40 addr.sun_path[
sizeof(addr.sun_path) - 1] = 0;
41 if (-1 == ::bind(serversock, (
struct sockaddr*)&addr,
sizeof(addr)))
43 printf(
"Couldn't bind server at %s\n", addr.sun_path);
46 listen(serversock, 1);
47 struct epoll_event event;
48 event.events = EPOLLIN;
49 event.data.fd = serversock;
50 epoll_ctl(epoll, EPOLL_CTL_ADD, serversock, &event);
54 struct epoll_event ev;
55 printf(
"Waiting for client message. Epoll %d serversock %d\n", epoll, serversock);
56 int nfd = epoll_wait(epoll, &ev, 1, 10000);
57 if (nfd > 0 && event.data.fd == serversock)
59 printf(
"Message received nfd %d fd %d serversock %d\n", nfd, ev.data.fd, serversock);
60 std::uint32_t type, counter, size;
61 std::uint32_t data[1024];
64 rd = recv(ev.data.fd, data,
sizeof(data), 0);
65 printf(
"Read data %d\n", rd);
70 printf(
"Packet received: type %d counter %d size %d\n", type, counter, size);
75 int main(
int argc,
char *argv[])
78 bool test_thread =
false, ret, send_reset =
false;
80 const char *path = NULL;
81 const char *webvtt_file_path = NULL;
83 while ((opt = getopt(argc, argv,
"sf:tr")) != -1)
90 webvtt_file_path = optarg;
94 printf(
"path is %s\n", path);
112 printf(
"Starting thread\n");
113 th = std::thread(serverThread, path);
118 std::vector<uint8_t> data;
120 ret = channel->InitComms();
123 channel->SendResetAllPacket();
126 channel->SendResetChannelPacket();
127 channel->SendSelectionPacket(1920, 1080);
128 channel->SendUnmutePacket();
129 channel->SendTimestampPacket(0);
130 if (webvtt_file_path) {
131 auto ifile = std::ifstream(webvtt_file_path, std::ios::in | std::ios::binary);
133 std::for_each(std::istreambuf_iterator<char>(ifile),
134 std::istreambuf_iterator<char>(),
135 [&data](
const char c) {
139 data = {
'a',
'b',
'c'};
141 channel->SendDataPacket(std::move(data));
146 if (test_thread) th.join();