generated from AfonsoCMSousa/CPP-Template
fix: finnaly working!
This commit is contained in:
parent
7a648f8b21
commit
8bc4312c9a
BIN
PlayerTracker
BIN
PlayerTracker
Binary file not shown.
@ -17,6 +17,7 @@ class Socket {
|
|||||||
private:
|
private:
|
||||||
// Socket file descriptor
|
// Socket file descriptor
|
||||||
int sock_server;
|
int sock_server;
|
||||||
|
int sock_server_rev;
|
||||||
int sock_unix;
|
int sock_unix;
|
||||||
struct sockaddr_in server_addr;
|
struct sockaddr_in server_addr;
|
||||||
struct sockaddr_un server_addr_unix;
|
struct sockaddr_un server_addr_unix;
|
||||||
@ -32,12 +33,12 @@ class Socket {
|
|||||||
Socket();
|
Socket();
|
||||||
~Socket();
|
~Socket();
|
||||||
|
|
||||||
void connect_server(const char *ip, uint16_t port, uint16_t port_input);
|
void connect_server(const char *ip, uint16_t port);
|
||||||
|
void bind_server(const char *ip, uint16_t port);
|
||||||
void send_server();
|
void send_server();
|
||||||
void send_server(const api_packet &data);
|
void send_server(const api_packet &data);
|
||||||
void send_server(const void *data, size_t len);
|
void send_server(const void *data, size_t len);
|
||||||
void receive_server();
|
ssize_t receive_server(void *buffer, size_t len);
|
||||||
char *get_buffer() { return buffer; }
|
|
||||||
|
|
||||||
void connect_unix(const char *ip, uint16_t port);
|
void connect_unix(const char *ip, uint16_t port);
|
||||||
void send_unix();
|
void send_unix();
|
||||||
|
|||||||
@ -18,11 +18,13 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
Socket sock;
|
Socket sock;
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Connect socket to API
|
// Connect socket to API
|
||||||
sock.connect_unix(app.app_api_socket_path.c_str(), app.app_port_out);
|
sock.connect_unix(app.app_api_socket_path.c_str(), app.app_port_out);
|
||||||
// Connect socket to Server
|
// Connect socket to Server
|
||||||
sock.connect_server(app.app_server_out_ip.c_str(), app.app_port_out, app.app_port_in);
|
sock.connect_server(app.app_server_out_ip.c_str(), app.app_port_out);
|
||||||
|
sock.bind_server("0.0.0.0", app.app_port_in);
|
||||||
|
|
||||||
// Right after connecting, send update rate request
|
// Right after connecting, send update rate request
|
||||||
char request[516] = {0};
|
char request[516] = {0};
|
||||||
@ -41,14 +43,21 @@ int main(int argc, char *argv[]) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sock.receive_server();
|
// TODO: Implement Cache
|
||||||
char *buffer = sock.get_buffer();
|
// TAG: Because sometimes the parser doesnt have the name of the server because it started after the server init
|
||||||
cout << "Received " << sizeof(buffer) << " bytes from server." << endl;
|
// we can cache it and reuse it to avoid NULL names in the DB
|
||||||
cout << "Data: ";
|
char buffer[2048];
|
||||||
for (size_t i = 0; i < sizeof(buffer); i++) {
|
|
||||||
printf("%02X ", static_cast<unsigned char>(buffer[i]));
|
sock.receive_server(buffer, sizeof(buffer));
|
||||||
|
|
||||||
|
cout << "[+] Received data from server!" << endl;
|
||||||
|
cout << "[+] Data (first 64 bytes): " << endl;
|
||||||
|
// printf buffer in hex
|
||||||
|
for (size_t i = 0; i < 64; i++) {
|
||||||
|
printf("%02X ", (unsigned char)buffer[i]);
|
||||||
}
|
}
|
||||||
cout << endl;
|
printf("\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,15 +16,27 @@ Socket::~Socket() {
|
|||||||
close(sock_unix);
|
close(sock_unix);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::connect_server(const char *ip, uint16_t port, uint16_t port_input) {
|
void Socket::connect_server(const char *ip, uint16_t port) {
|
||||||
this->server_port_input = port_input;
|
this->server_port_input = port;
|
||||||
server_addr.sin_port = htons(port);
|
server_addr.sin_port = htons(port);
|
||||||
if (inet_pton(AF_INET, ip, &server_addr.sin_addr) <= 0) {
|
if (inet_pton(AF_INET, ip, &server_addr.sin_addr) <= 0) {
|
||||||
throw runtime_error("Invalid IP address");
|
throw runtime_error("Invalid IP address");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect to existing UNIX domain socket (e.g., /tmp/socket_path)
|
void Socket::bind_server(const char *ip, uint16_t port) {
|
||||||
|
// The UDP socket is already created in the constructor
|
||||||
|
server_addr.sin_port = htons(port);
|
||||||
|
server_addr.sin_addr.s_addr = inet_addr(ip);
|
||||||
|
|
||||||
|
if (bind(sock_server_rev, (const struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
|
||||||
|
perror("[!] bind() failed");
|
||||||
|
throw runtime_error("Failed to bind UDP socket");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("[+] Bound UDP socket on %s:%d\n", ip, port);
|
||||||
|
}
|
||||||
|
|
||||||
void Socket::connect_unix(const char *ip, uint16_t port) {
|
void Socket::connect_unix(const char *ip, uint16_t port) {
|
||||||
sock_unix = socket(AF_UNIX, SOCK_STREAM, 0);
|
sock_unix = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
if (sock_unix < 0) {
|
if (sock_unix < 0) {
|
||||||
@ -46,11 +58,13 @@ void Socket::send_server() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::receive_server() {
|
ssize_t Socket::receive_server(void *buffer, size_t len) {
|
||||||
ssize_t recv_bytes = recvfrom(sock_server, buffer, sizeof(buffer), 0, NULL, NULL);
|
ssize_t recv_bytes = recv(sock_server_rev, buffer, len, 0);
|
||||||
if (recv_bytes < 0) {
|
if (recv_bytes < 0) {
|
||||||
throw runtime_error("Failed to receive data");
|
perror("[!] recv() failed");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
return recv_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::send_unix() {
|
void Socket::send_unix() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user