wip: feat: implement sending via multicast
This commit is contained in:
parent
bd438dc77c
commit
1abc3f43f2
|
|
@ -46,9 +46,11 @@ HWND win_hndl = NULL;
|
||||||
UINT const WM_USR_LOG = WM_APP + 1;
|
UINT const WM_USR_LOG = WM_APP + 1;
|
||||||
UINT const WM_USR_TOGGLE_CONNECT = WM_APP + 2;
|
UINT const WM_USR_TOGGLE_CONNECT = WM_APP + 2;
|
||||||
UINT const WM_USR_LOAD_CONFIG = WM_APP + 3;
|
UINT const WM_USR_LOAD_CONFIG = WM_APP + 3;
|
||||||
|
UINT const WM_USR_TOGGLE_MULTICAST = WM_APP + 4;
|
||||||
|
|
||||||
HANDLE comm_thread;
|
HANDLE comm_thread;
|
||||||
wstring remote = L"localhost:30501";
|
wstring remote = L"localhost:30501";
|
||||||
|
wstring remote_multicast = L"239.80.123.4:30501";
|
||||||
wstring config_file_path;
|
wstring config_file_path;
|
||||||
|
|
||||||
// Mutex/cv protects following vars
|
// Mutex/cv protects following vars
|
||||||
|
|
@ -122,6 +124,10 @@ void toggle_want_connect()
|
||||||
PostMessage(win_hndl, WM_USR_TOGGLE_CONNECT, (WPARAM) NULL, (LPARAM) NULL);
|
PostMessage(win_hndl, WM_USR_TOGGLE_CONNECT, (WPARAM) NULL, (LPARAM) NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void toggle_multicast() {
|
||||||
|
PostMessage(win_hndl, WM_USR_TOGGLE_MULTICAST, (WPARAM) NULL, (LPARAM) NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void save_config(path const& filepath, wstring const& remote, bool connect)
|
void save_config(path const& filepath, wstring const& remote, bool connect)
|
||||||
{
|
{
|
||||||
std::wofstream f{filepath, std::ios_base::trunc};
|
std::wofstream f{filepath, std::ios_base::trunc};
|
||||||
|
|
@ -242,6 +248,12 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case IDC_MULTI_BOX:
|
||||||
|
{
|
||||||
|
bool const checked = IsDlgButtonChecked(hWnd, IDC_MULTI_BOX);
|
||||||
|
toggle_multicast();
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -288,6 +300,23 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
|
||||||
conn_cv.notify_one();
|
conn_cv.notify_one();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
case WM_USR_TOGGLE_MULTICAST:
|
||||||
|
{
|
||||||
|
lock_guard<mutex> conn_lk{ conn_mut };
|
||||||
|
|
||||||
|
want_connect = false;
|
||||||
|
// TODO wait for disconnect?
|
||||||
|
|
||||||
|
// off -> on
|
||||||
|
// button set text "set"
|
||||||
|
// text set saved multicast
|
||||||
|
//
|
||||||
|
// on -> off
|
||||||
|
// button set text "Connect"
|
||||||
|
// text set saved unicast
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
case WM_USR_LOAD_CONFIG:
|
case WM_USR_LOAD_CONFIG:
|
||||||
{
|
{
|
||||||
lock_guard<mutex> conn_lk{ conn_mut };
|
lock_guard<mutex> conn_lk{ conn_mut };
|
||||||
|
|
@ -422,6 +451,31 @@ SOCKET _connect() {
|
||||||
return sock;
|
return sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SOCKET _connect_multic()
|
||||||
|
{
|
||||||
|
SOCKET sock;
|
||||||
|
|
||||||
|
sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
// TODO fd < 0
|
||||||
|
|
||||||
|
string remote_ch =
|
||||||
|
wstring_convert<codecvt_utf8_utf16<wchar_t>>{}.to_bytes(remote_multicast);
|
||||||
|
|
||||||
|
auto pos = remote_ch.rfind(":");
|
||||||
|
string port_str = pos == string::npos ? "30501" : remote_ch.substr(pos + 1);
|
||||||
|
u_short port = std::stoul(port_str);
|
||||||
|
|
||||||
|
struct sockaddr_in addr = { 0 };
|
||||||
|
addr.sin_family = AF_INET;
|
||||||
|
addr.sin_addr.s_addr = inet_addr(remote_ch.c_str());
|
||||||
|
addr.sin_port = htons(port);
|
||||||
|
|
||||||
|
connect(sock, (struct sockaddr *) &addr, sizeof(addr));
|
||||||
|
// TODO return
|
||||||
|
|
||||||
|
return sock;
|
||||||
|
}
|
||||||
|
|
||||||
bool _send(SOCKET &sock, string const &msg) {
|
bool _send(SOCKET &sock, string const &msg) {
|
||||||
int len = (int) msg.length();
|
int len = (int) msg.length();
|
||||||
int buf_len = len + 4;
|
int buf_len = len + 4;
|
||||||
|
|
|
||||||
|
|
@ -1257,6 +1257,7 @@
|
||||||
#define IDC_BTN_SUBMIT2 1002
|
#define IDC_BTN_SUBMIT2 1002
|
||||||
#define IDC_EDIT2 1003
|
#define IDC_EDIT2 1003
|
||||||
#define IDC_LOG 1003
|
#define IDC_LOG 1003
|
||||||
|
#define IDC_MULTI_BOX 1004
|
||||||
#define CF_GDIOBJLAST 0x03FF
|
#define CF_GDIOBJLAST 0x03FF
|
||||||
#define _WIN32_WINNT_NT4 0x0400
|
#define _WIN32_WINNT_NT4 0x0400
|
||||||
#define _WIN32_IE_IE40 0x0400
|
#define _WIN32_IE_IE40 0x0400
|
||||||
|
|
@ -1618,7 +1619,7 @@
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 105
|
#define _APS_NEXT_RESOURCE_VALUE 105
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1004
|
#define _APS_NEXT_CONTROL_VALUE 1005
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -48,14 +48,15 @@ END
|
||||||
// Dialog
|
// Dialog
|
||||||
//
|
//
|
||||||
|
|
||||||
IDD_DIALOG1 DIALOGEX 0, 0, 309, 177
|
IDD_DIALOG1 DIALOGEX 0, 0, 309, 187
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION
|
||||||
CAPTION "TCP Sender"
|
CAPTION "TCP Sender"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
EDITTEXT IDC_REMOTE,7,7,228,14,ES_AUTOHSCROLL
|
EDITTEXT IDC_REMOTE,7,13,228,14,ES_AUTOHSCROLL
|
||||||
PUSHBUTTON "Connect",IDC_BTN_SUBMIT,252,7,50,14,BS_CENTER
|
PUSHBUTTON "Connect",IDC_BTN_SUBMIT,252,7,50,14,BS_CENTER
|
||||||
EDITTEXT IDC_LOG,7,31,295,139,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY
|
AUTOCHECKBOX "Multicast",IDC_MULTI_BOX,255,24,228,14
|
||||||
|
EDITTEXT IDC_LOG,7,41,295,139,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue