]> git.vomp.tv Git - vompclient.git/blob - tcp.h
Bitmap and VPictureBanner CWFs
[vompclient.git] / tcp.h
1 /*
2     Copyright 2020 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 #ifndef TCP_H
21 #define TCP_H
22
23 #ifdef WIN32
24 #include <WinSock2.h> // for SOCKET
25 #endif
26
27 #include <mutex>
28
29 #include "defines.h"
30
31 struct MACAddress
32 {
33   UCHAR mac[6];
34 };
35
36 class Log;
37
38 class TCP
39 {
40   public:
41     ~TCP();
42     bool init(); // Must call this first, once on any new TCP object
43     void shutdown(); // Optional if this is to be deleted. Closes connection. Can call connect() next
44     void abortCall(); // causes a read/connect call to immediately abort
45
46     bool connect(const std::string& ip, USHORT port);
47     bool read(void* dest, ULONG numBytes, int timeoutSec = 2); // Set timeoutSec to 0 for no timeout
48     std::stringstream readString(bool* result, int timeoutSec = 2);
49     bool write(void* src, ULONG numBytes);
50     bool status();
51
52     MACAddress getMAC();
53
54   private:
55     Log* logger;
56     int sockfd{-1};
57     bool connected{};
58     std::mutex writeMutex;
59
60     char* recStringBuf{};
61     const int recStringBufSize{1024};
62     int recStringBufStart{};
63     int recStringBufUsed{};
64
65 #ifdef WIN32
66     SOCKET abortSocket;
67 #else
68     int abortPipe[2]{-1, -1};
69 #endif
70 };
71
72 #endif