50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#pragma once
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
#include <switch.h>
|
|
#include <stdarg.h>
|
|
#include <unistd.h>
|
|
#include <string>
|
|
#include <SDL.h>
|
|
#include <vector>
|
|
|
|
class RemoteLogger
|
|
{
|
|
public:
|
|
RemoteLogger(const RemoteLogger &) = delete;
|
|
RemoteLogger &operator=(const RemoteLogger &) = delete;
|
|
RemoteLogger(RemoteLogger &&) = delete;
|
|
RemoteLogger &operator=(RemoteLogger &&) = delete;
|
|
// 全局访问点
|
|
static RemoteLogger &GetInstance()
|
|
{
|
|
static RemoteLogger instance; // 局部静态变量,保证只初始化一次
|
|
return instance;
|
|
}
|
|
// 安全格式化到字符串
|
|
static std::string format_string(const char *format, va_list vl);
|
|
|
|
public:
|
|
// 初始化函数,返回是否成功
|
|
bool Init(const char *target_ip, unsigned short target_port);
|
|
// 日志输出函数,支持格式化字符串
|
|
void log(const char *format, ...);
|
|
// 关闭连接
|
|
void close();
|
|
// 检查是否已初始化
|
|
bool isInitialized() const;
|
|
|
|
private:
|
|
RemoteLogger(/* args */);
|
|
~RemoteLogger();
|
|
|
|
int sockfd = -1;
|
|
struct sockaddr_in server_addr;
|
|
socklen_t server_len;
|
|
bool is_initialized = false;
|
|
};
|