Skip to content

Commit 9dec964

Browse files
committed
2 parents 14468a4 + ca07a52 commit 9dec964

File tree

5 files changed

+62
-83
lines changed

5 files changed

+62
-83
lines changed
Lines changed: 31 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,45 @@
1+
//
2+
// Created by local on 03.01.2020.
3+
//
4+
15
#include "client.h"
26
#include <cstdio>
37

4-
client::client(const char* hostname, const char* port) {
5-
WSADATA wsaData;
6-
sock_fd = INVALID_SOCKET;
7-
8-
result = NULL;
9-
ptr = NULL;
10-
int res = 0;
11-
res = WSAStartup(MAKEWORD(2, 2), &wsaData);
12-
if (res != 0) {
13-
this->~client();
14-
}
15-
16-
ZeroMemory(&hints, sizeof(hints));
17-
hints.ai_family = AF_INET;
18-
hints.ai_socktype = SOCK_STREAM;
19-
hints.ai_protocol = IPPROTO_TCP;
20-
21-
res = getaddrinfo(hostname, port, &hints, &result);
22-
if (res != 0) {
23-
WSACleanup();
24-
this->~client();
25-
}
8+
client::client(const char* hostname, int port) {
9+
int res = 0;
10+
WSAData data;
11+
res = WSAStartup(MAKEWORD(2, 2), &data);
12+
if (res != 0)
13+
this->~client();
14+
sock_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
15+
if (sock_fd == INVALID_SOCKET)
16+
this->~client();
17+
18+
address.sin_family = AF_INET;
19+
20+
res = InetPton(AF_INET, hostname, &address.sin_addr.s_addr);
21+
if (res < 0)
22+
this->~client();
23+
address.sin_port = htons(port);
2624
}
2725

2826
client::~client() {
29-
result = NULL;
30-
ptr = NULL;
27+
closesocket(sock_fd);
3128
}
3229

33-
int client::_read(char* data, int len) {
34-
queue_mutex.lock();
35-
int amount = recv(sock_fd, data, len, 0);
36-
queue_mutex.unlock();
37-
return amount;
38-
}
3930

40-
int client::_write(char* data, int len) {
41-
queue_mutex.lock();
42-
int amount = send(sock_fd, data, len, 0);
43-
queue_mutex.unlock();
44-
return amount;
31+
int client::client_write(char* arr, int amount) {
32+
return sendto(sock_fd, arr, amount, 0, reinterpret_cast<sockaddr*>(&address), sizeof(address));
4533
}
4634

47-
int client::_connect() {
48-
sock_fd = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
49-
if (sock_fd == INVALID_SOCKET) {
50-
WSACleanup();
51-
return INVALID_SOCKET;
52-
}
53-
int res = 0;
54-
res = connect(sock_fd, result->ai_addr, (int)result->ai_addrlen);
55-
if (res == SOCKET_ERROR) {
56-
closesocket(sock_fd);
57-
sock_fd = INVALID_SOCKET;
58-
return res;
59-
}
60-
freeaddrinfo(result);
61-
return 0;
62-
63-
}
35+
int client::client_read(char* arr, int amount) {
36+
sockaddr_in from;
37+
int size = sizeof(from);
38+
int ret = recvfrom(sock_fd, arr, amount, 0, reinterpret_cast<SOCKADDR*>(&from), &size);
6439

65-
void client::disconnect() {
66-
shutdown(sock_fd, 0);
40+
return ret;
6741
}
6842

43+
void client::close_socket() {
44+
closesocket(sock_fd);
45+
}
Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
1-
#pragma once
1+
//
2+
// Created by local on 03.01.2020.
3+
//
24

3-
#include <winsock2.h>
5+
6+
#ifndef UDPCLIENT_CLIENT_H
7+
#define UDPCLIENT_CLIENT_H
48
#include <ws2tcpip.h>
5-
#include <mutex>
9+
610

711

812
class client {
913
public:
10-
client(const char* hostname, const char* port);
11-
~client();
14+
client(const char* hostname, int port);
15+
~client();
16+
int client_read(char* arr, int amount);
17+
int client_write(char* arr, int amount);
18+
void close_socket();
19+
private:
20+
SOCKET sock_fd;
21+
sockaddr_in address;
22+
};
1223

13-
int _connect();
14-
void disconnect();
1524

16-
int _read(char* data, int len);
17-
int _write(char* data, int len);
18-
private:
19-
SOCKET sock_fd;
20-
struct addrinfo *result, *ptr, hints;
21-
std::mutex queue_mutex;
22-
};
25+
#endif //UDPCLIENT_CLIENT_H

WindowsDriver/WindowsDriver/feeder.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ static char cb[1] = { 3 };
99

1010
feeder* feeder::c_instance = nullptr;
1111

12-
feeder::feeder(const char* hostname, const char* port) {
13-
this->tcp_client = new client(hostname, port);
12+
feeder::feeder(const char* hostname, int port) {
13+
this->udp_client = new client(hostname, port);
1414
this->driver_client = vigem_alloc();
1515
this->driver_target = vigem_target_x360_alloc();
1616
connected = false;
1717
c_instance = this;
1818
}
1919

2020
feeder::~feeder() {
21-
this->tcp_client->disconnect();
21+
this->udp_client->close_socket();
2222
connected = false;
23-
this->tcp_client->~client();
23+
this->udp_client->~client();
2424
vigem_target_remove(this->driver_client, this->driver_target);
2525
vigem_disconnect(this->driver_client);
2626
vigem_target_free(this->driver_target);
@@ -29,8 +29,6 @@ feeder::~feeder() {
2929
}
3030

3131
int feeder::connect() {
32-
int res = this->tcp_client->_connect();
33-
if (res != 0) return res;
3432

3533
if (vigem_connect(this->driver_client) != VIGEM_ERROR_NONE) return -80;
3634
if (vigem_target_add(this->driver_client, this->driver_target) != VIGEM_ERROR_NONE) return -81;
@@ -54,7 +52,7 @@ void feeder::controller_callback(PVIGEM_CLIENT Client,
5452
UCHAR RightMotor,
5553
UCHAR LedNumber) {
5654
char data[3] = { cb[0], LeftMotor, RightMotor };
57-
feeder::GetInstance()->tcp_client->_write(data, 3);
55+
feeder::GetInstance()->udp_client->client_write(data, 3);
5856
}
5957

6058

@@ -75,20 +73,20 @@ void feeder::feed() {
7573
while (connected) {
7674

7775
//Do work
78-
this->tcp_client->_write(get, 1); // asking for controller data
76+
this->udp_client->client_write(get, 1); // asking for controller data
7977
memset(buf, 0, 14);
80-
this->tcp_client->_read(buf, 14); // receiving it
78+
this->udp_client->client_read(buf, 14); // receiving it
8179
vigem_target_x360_register_notification(this->driver_client, this->driver_target,
8280
reinterpret_cast<PFN_VIGEM_X360_NOTIFICATION>(&feeder::controller_callback));
8381

8482
vigem_target_x360_update(this->driver_client, this->driver_target, controller_conversion::data_to_report(buf));
8583

8684
}
8785

88-
this->tcp_client->_write(poweroff, 1);
86+
this->udp_client->client_write(poweroff, 1);
8987
}
9088

9189
void feeder::disconnect() {
92-
this->tcp_client->disconnect();
90+
this->udp_client->close_socket();
9391
}
9492

WindowsDriver/WindowsDriver/feeder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
class feeder {
77
public:
8-
feeder(const char* hostname, const char* port);
8+
feeder(const char* hostname, int port);
99
~feeder();
1010

1111
static feeder* GetInstance() { return c_instance; }
@@ -27,6 +27,6 @@ class feeder {
2727
PVIGEM_CLIENT driver_client;
2828
PVIGEM_TARGET driver_target;
2929
std::thread sender_thread;
30-
client* tcp_client;
30+
client* udp_client;
3131
bool connected;
3232
};

WindowsDriver/WindowsDriver/main.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55

66
int main(int argc, char* argv[]) {
7+
/*
78
if (argc < 2) {
89
return -1;
9-
}
10-
feeder* f = new feeder(argv[1], "1182");
10+
}*/
11+
feeder* f = new feeder("192.168.1.158", 1182);
1112
int res = f->connect();
1213
printf("%d\n", res);
1314
f->start_feeder_thread();

0 commit comments

Comments
 (0)