195 lines
5.7 KiB
C++
195 lines
5.7 KiB
C++
#include <iostream>
|
|
#include <thread>
|
|
#include "Base/export.h"
|
|
#include "Bit.h"
|
|
#include "Socket/Socket.h"
|
|
using Func_Type = void(*)(char* buf, std::uint16_t* len);
|
|
|
|
|
|
int main(int argc, char* argv[]) {
|
|
bool use_dll = false;
|
|
std::string ip = "127.0.0.1";
|
|
uint16_t port = 12345;
|
|
// 检查命令行参数数量
|
|
if (argc >= 2) {
|
|
// 解析 use_dll 参数
|
|
if (std::string(argv[1]) == "true") {
|
|
use_dll = true;
|
|
} else if (std::string(argv[1]) == "false") {
|
|
use_dll = false;
|
|
}
|
|
|
|
// 解析 ip 参数(如果有)
|
|
if (argc >= 3) {
|
|
ip = argv[2];
|
|
}
|
|
|
|
// 解析 port 参数(如果有)
|
|
if (argc >= 4) {
|
|
try {
|
|
port = std::stoi(argv[3]);
|
|
} catch (const std::invalid_argument& e) {
|
|
std::cerr << "Invalid port number." << std::endl;
|
|
return 1;
|
|
} catch (const std::out_of_range& e) {
|
|
std::cerr << "Port number out of range." << std::endl;
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 输出解析后的参数
|
|
std::cout << "use_dll: " << (use_dll ? "true" : "false") << std::endl;
|
|
std::cout << "ip: " << ip << std::endl;
|
|
std::cout << "port: " << port << std::endl;
|
|
|
|
Func_Type read_func_ptr = nullptr;
|
|
if (use_dll) {
|
|
auto path = Psc::get_abs_path("@/x86_linux_Release_lib9002so/lib9002.so");
|
|
auto lib = Psc::load_library(path);
|
|
if (lib == nullptr) std::exit(1);
|
|
read_func_ptr = (Func_Type)Psc::load_function(lib, "adsb_read");
|
|
if (read_func_ptr == nullptr) std::exit(2);
|
|
}
|
|
|
|
Base_Logger_Manager::instance().init();
|
|
|
|
|
|
|
|
Psc::socket::Server_Socket socket;
|
|
socket.type = Psc::socket::Socket_Type::TCP;
|
|
socket.create();
|
|
|
|
|
|
std::thread read_thread([&socket, ip, port]() {
|
|
socket.listen(ip, port);
|
|
});
|
|
read_thread.detach();
|
|
Psc::socket::socket_logger = new BaseLogger(Psc::get_exe_dir() + "/test_memory_lose.log", 1024 * 1024 * 100, 1);
|
|
//auto play_back_logger = new BaseLogger(Psc::get_exe_dir() + "/play_back.log", 1024 * 1024 * 100, 1);
|
|
|
|
std::vector<Psc::socket::Accept_Info> clients;
|
|
while (true) {
|
|
std::string data;
|
|
|
|
if (use_dll) {
|
|
char buf[std::numeric_limits<std::uint16_t>::max()];
|
|
std::uint16_t len;
|
|
read_func_ptr(buf, &len);
|
|
data = std::string(buf, len);
|
|
socket.flush_clients();
|
|
socket.write_to_all_clients(data);
|
|
//play_back_logger->debug({}, {}, data + " ");
|
|
|
|
pure_log(Psc::get_exe_dir() + "/play_back.log", data + " " + "\n");
|
|
} else {
|
|
|
|
data = std::string(100, '7');
|
|
socket.flush_clients();
|
|
socket.write_to_all_clients(data);
|
|
}
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
}
|
|
}
|
|
|
|
int main2(int argc, char* argv[]) {
|
|
bool use_dll = false;
|
|
std::string ip = "127.0.0.1";
|
|
uint16_t port = 12345;
|
|
// 检查命令行参数数量
|
|
if (argc >= 2) {
|
|
// 解析 use_dll 参数
|
|
if (std::string(argv[1]) == "true") {
|
|
use_dll = true;
|
|
} else if (std::string(argv[1]) == "false") {
|
|
use_dll = false;
|
|
}
|
|
|
|
// 解析 ip 参数(如果有)
|
|
if (argc >= 3) {
|
|
ip = argv[2];
|
|
}
|
|
|
|
// 解析 port 参数(如果有)
|
|
if (argc >= 4) {
|
|
try {
|
|
port = std::stoi(argv[3]);
|
|
} catch (const std::invalid_argument& e) {
|
|
std::cerr << "Invalid port number." << std::endl;
|
|
return 1;
|
|
} catch (const std::out_of_range& e) {
|
|
std::cerr << "Port number out of range." << std::endl;
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 输出解析后的参数
|
|
std::cout << "use_dll: " << (use_dll ? "true" : "false") << std::endl;
|
|
std::cout << "ip: " << ip << std::endl;
|
|
std::cout << "port: " << port << std::endl;
|
|
|
|
Func_Type read_func_ptr = nullptr;
|
|
if (use_dll) {
|
|
auto path = Psc::get_abs_path("@/x86_linux_Release_lib9002so/lib9002.so");
|
|
auto lib = Psc::load_library(path);
|
|
if (lib == nullptr) std::exit(1);
|
|
read_func_ptr = (Func_Type)Psc::load_function(lib, "adsb_read");
|
|
if (read_func_ptr == nullptr) std::exit(2);
|
|
}
|
|
|
|
|
|
|
|
|
|
Psc::socket::Client_Socket socket;
|
|
socket.type = Psc::socket::Socket_Type::TCP;
|
|
socket.create();
|
|
Psc::socket::Sockaddr_In addr;
|
|
if (use_dll) {
|
|
addr = Psc::socket::Sockaddr_In{ip, port};
|
|
} else {
|
|
addr = Psc::socket::Sockaddr_In{ip, port};
|
|
}
|
|
|
|
|
|
std::cout << "connect:" << addr.to_string() << std::endl;
|
|
socket.set_dest_address(addr);
|
|
bool c = socket.connect();
|
|
while (true) {
|
|
|
|
std::string data;
|
|
if (use_dll) {
|
|
char buf[std::numeric_limits<std::uint16_t>::max()];
|
|
std::uint16_t len;
|
|
read_func_ptr(buf, &len);
|
|
data = std::string(buf, len);
|
|
} else {
|
|
data = std::string(100, '7');
|
|
}
|
|
|
|
|
|
|
|
|
|
// if (data.size() < 500) {
|
|
// std::cout << "read[" << data.size() << "]:" << memory2hex(data) << std::endl;
|
|
// } else {
|
|
// std::cout << "read[" << data.size() << "]:" << std::endl;
|
|
// }
|
|
//std::cout << "read[" << data.size() << "]:" << std::endl;
|
|
|
|
int send = socket.send(data);
|
|
if (send == -1) {
|
|
if (Psc::socket::is_needed_reconnect(socket.socket_fd)) {
|
|
std::cout << socket.socket_fd << " 重新连接 " << std::endl;
|
|
socket.connect();
|
|
}
|
|
|
|
}
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
}
|
|
}
|