#include #include #include #include #include "cracker.hpp" #include "logger.hpp" #include "server.hpp" #include "ui/hook.hpp" const std::string& get_logfile_file_full_path() { static std::string cache_file = [] { char cmdline[512] = {0}; int fd = open("/proc/self/cmdline", O_RDONLY); if(fd != -1) { read(fd, cmdline, sizeof(cmdline)); close(fd); return "/storage/emulated/0/Android/data/" + std::string(cmdline) + "/cracker.log"; } return std::string(); }(); return cache_file; } void init_logger() { #if DEBUG_MODE auto net_sink = std::make_shared(); auto file_sink = std::make_shared(get_logfile_file_full_path()); auto sink_list = spdlog::sinks_init_list{net_sink, file_sink}; auto combined_logger = std::make_shared( "cracker_logger", sink_list.begin(), sink_list.end() ); combined_logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%L%$] %v"); combined_logger->set_level(spdlog::level::info); combined_logger->flush_on(spdlog::level::info); spdlog::register_logger(combined_logger); spdlog::set_default_logger(combined_logger); #else auto file_sink = std::make_shared(get_logfile_file_full_path()); auto logger = std::make_shared("cracker_logger", file_sink); logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%L%$] %v"); logger->set_level(spdlog::level::info); logger->flush_on(spdlog::level::info); spdlog::register_logger(logger); spdlog::set_default_logger(logger); #endif } void start() { init_logger(); SPDLOG_INFO("Cracker loaded !"); CrackerServer::Start(); hook_game_lua_for_ingame_ui(); } __attribute__((constructor)) void init() { std::thread(start).detach(); }