#include #include #include #include #include #include #include #include "app.hpp" // for app_info struct #include "file.hpp" // for parce_args #include "net.hpp" // for socket operations #include "server_structs.h" using namespace std; int main(int argc, char *argv[]) { app_info app = parce_args(argc, argv); api_packet packet; Socket sock; char buffer[2048]; try { // Connect socket to API sock.connect_unix(app.app_api_socket_path.c_str(), app.app_port_out); // Connect socket to Server sock.connect_server(app.app_server_out_ip.c_str(), app.app_port_out); sock.bind_server("127.0.0.1", app.app_port_in); // Await server for initial data sock.receive_server(buffer, sizeof(buffer)); cout << "[+] Received info from server!" << endl; if (buffer[0] == ACSP_VERSION) { cout << "[+] Server API Version: " << (int)buffer[1] << endl; } // Right after confirmation, send update rate request char request[516] = {0}; request[0] = ACSP_REALTIMEPOS_INTERVAL; request[1] = 120; sock.send_server(request, sizeof(request)); cout << "[!] Info: " << endl; cout << " > API Socket Path: " << app.app_api_socket_path << endl; cout << " > Server Out IP: " << app.app_server_out_ip << endl; cout << " > App Port In: " << app.app_port_in << endl; cout << " > App Port Out: " << app.app_port_out << endl; } catch (const runtime_error &e) { cerr << "Error: " << e.what() << endl; return 1; } // TODO: Implement Cache // TAG: Because sometimes the parser doesnt have the name of the server because it started after the server init // we can cache it and reuse it to avoid NULL names in the DB return 0; }