diff --git a/server/robotserver/CMakeLists.txt b/server/robotserver/CMakeLists.txt deleted file mode 100644 index 5826ae4f..00000000 --- a/server/robotserver/CMakeLists.txt +++ /dev/null @@ -1,89 +0,0 @@ -project(robotserver) -cmake_minimum_required(VERSION 2.8) - -if (${GAME_ID}) - message(GAME_ID: ${GAME_ID}) -else() - set(GAME_ID 2001) - message(GAME_ID: ${GAME_ID}) -endif() - -set(CMAKE_BUILD_TYPE "Debug") -set(CMAKE_CXX_FLAGS_RELEASE "-std=gnu++11 -fsanitize=address -fno-omit-frame-pointer") -set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DTCP_CLIENT2=1") - -include_directories( - AFTER - ../../third_party/a8engine - /usr/include/mysql - /usr/include/jsoncpp - /usr/include/hiredis - /usr/include/eigen3 - /usr/include/glm - ../../third_party - ../../third_party/behaviac/inc - ../../third_party/recastnavigation/Detour/Include - ../../third_party/recastnavigation/DetourTileCache/Include - . -) - -link_directories( - /usr/lib64/mysql - /usr/local/lib - ../../third_party/behaviac/lib -) - -aux_source_directory(../../third_party/a8engine/a8 - SRC_LIST -) - -aux_source_directory(../../third_party/framework/cpp - SRC_LIST -) - -aux_source_directory(../../third_party/recastnavigation/Detour/Source - SRC_LIST -) - -aux_source_directory(../../third_party/recastnavigation/DetourTileCache/Source - SRC_LIST -) - -aux_source_directory(. - SRC_LIST -) - -set(EXECUTABLE_OUTPUT_PATH - ${PROJECT_BINARY_DIR}/../bin -) - -set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_DEBUG "_DEBUG") - -add_executable( - robotserver ${SRC_LIST} -) - -add_custom_target(script_pb_protocol ALL) -add_custom_command(TARGET script_pb_protocol - PRE_BUILD - COMMAND python ../../third_party/tools/scripts/construct/build_pb.py --cpp_out=. --pb_files=ss_proto,ss_msgid,cs_proto,cs_msgid -) -add_dependencies(robotserver script_pb_protocol) - -target_link_libraries( - robotserver - pthread - mysqlclient - protobuf - rt - dl - util - crypto - ssl - jsoncpp - curl - hiredis - tinyxml2 - tcmalloc - behaviac_gcc_debug -) diff --git a/server/robotserver/app.cc b/server/robotserver/app.cc deleted file mode 100755 index 1e5e6ad7..00000000 --- a/server/robotserver/app.cc +++ /dev/null @@ -1,485 +0,0 @@ -#include "precompile.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "framework/cpp/netmsghandler.h" - -#include "app.h" -#include "handlermgr.h" -#include "virtualclient.h" -#include "virtualclientmgr.h" - -#include "ss_msgid.pb.h" -#include "ss_proto.pb.h" - -#include "framework/cpp/msgqueue.h" -#include "framework/cpp/tglog.h" -#include "framework/cpp/httpclientpool.h" - -struct MsgNode -{ - SocketFrom_e sockfrom; - int sockhandle; - unsigned short msgid; - unsigned int seqid; - long ip_saddr; - char* buf; - int buflen; - MsgNode* next; -}; - -struct IMMsgNode -{ - unsigned short msgid; - a8::XParams params; - IMMsgNode* next = nullptr; - -}; - -const char* const PROJ_LOG_ROOT_FMT = "/data/logs/%s/logs"; -const char* const PROJ_LOG_FILENAME_FMT = "log_$pid_%Y%m%d.log"; - -static void SavePerfLog() -{ - a8::UdpLog::Instance()->Info("max_mainloop_rundelay:%d", - { - App::Instance()->perf.max_run_delay_time, - }); - App::Instance()->perf.max_run_delay_time = 0; - App::Instance()->perf.max_timer_idle = 0; - f8::HttpClientPool::Instance()->max_user_request_delay = 0; -} - -void App::Init(int argc, char* argv[]) -{ - #if 0 - { - Vector2D dir; - dir.Normalize(); - } - #endif - signal(SIGPIPE, SIG_IGN); - this->argc = argc; - this->argv = argv; - - if (!ParseOpt()) { - terminated = true; - a8::XPrintf("robotserver启动失败,缺少-i参数\n", {}); - return; - } - a8::XPrintf("robotserver starting instance_id:%d pid:%d game_id:%d\n", {instance_id, getpid(), GAME_ID}); - - loop_mutex_ = new std::mutex(); - loop_cond_ = new std::condition_variable(); - msg_mutex_ = new std::mutex(); - im_msg_mutex_ = new std::mutex(); - - srand(time(nullptr)); - InitLog(); - HandlerMgr::Instance()->Init(); - a8::Timer::Instance()->Init(); - a8::IoLoop::Instance()->Init(); - f8::MsgQueue::Instance()->Init(); - f8::TGLog::Instance()->Init(a8::Format(PROJ_NAME_FMT, {GAME_ID}), false); - f8::HttpClientPool::Instance()->Init(10, 1, 10); - uuid.SetMachineId(instance_id); - VirtualClientMgr::Instance()->Init(); - - a8::UdpLog::Instance()->Info("robotserver starting instance_id:%d pid:%d", {instance_id, getpid()}); - { - int perf_log_time = 1000 * 60 * 5; - if (getenv("is_dev_env")) { - perf_log_time = 1000 * 10; - } - a8::Timer::Instance()->AddRepeatTimer(perf_log_time, - a8::XParams(), - [] (const a8::XParams& param) - { - SavePerfLog(); - }); - } -} - -void App::UnInit() -{ - if (terminated) { - return; - } - VirtualClientMgr::Instance()->UnInit(); - f8::HttpClientPool::Instance()->UnInit(); - f8::MsgQueue::Instance()->UnInit(); - a8::IoLoop::Instance()->UnInit(); - a8::Timer::Instance()->UnInit(); - HandlerMgr::Instance()->UnInit(); - f8::TGLog::Instance()->UnInit(); - UnInitLog(); - - delete im_msg_mutex_; - im_msg_mutex_ = nullptr; - delete msg_mutex_; - msg_mutex_ = nullptr; - delete loop_cond_; - loop_cond_ = nullptr; - delete loop_mutex_; - loop_mutex_ = nullptr; -} - -int App::Run() -{ - if (terminated) { - return 0; - } - int ret = 0; - a8::UdpLog::Instance()->Info("robotserver running", {}); - last_run_tick_ = a8::XGetTickCount(); - int delta_time = 0; - while (!terminated) { - a8::tick_t begin_tick = a8::XGetTickCount(); - Global::g_nowtime = time(nullptr); - QuickExecute(delta_time); - SlowerExecute(delta_time); - Schedule(); - a8::tick_t end_tick = a8::XGetTickCount(); - if (end_tick - begin_tick > perf.max_run_delay_time) { - perf.max_run_delay_time = end_tick - begin_tick; - } - delta_time = end_tick - begin_tick; - } - return ret; -} - -void App::AddSocketMsg(SocketFrom_e sockfrom, - int sockhandle, - long ip_saddr, - unsigned short msgid, - unsigned int seqid, - const char *msgbody, - int bodylen) -{ - MsgNode *p = (MsgNode*) malloc(sizeof(MsgNode)); - memset(p, 0, sizeof(MsgNode)); - p->sockfrom = sockfrom; - p->ip_saddr = ip_saddr; - p->sockhandle = sockhandle; - p->msgid = msgid; - p->seqid = seqid; - p->buf = nullptr; - p->buflen = bodylen; - if (bodylen > 0) { - p->buf = (char*)malloc(bodylen); - memmove(p->buf, msgbody, bodylen); - } - msg_mutex_->lock(); - if (bot_node_) { - bot_node_->next = p; - bot_node_ = p; - } else { - top_node_ = p; - bot_node_ = p; - } - ++msgnode_size_; - msg_mutex_->unlock(); - NotifyLoopCond(); -} - -void App::AddIMMsg(unsigned short imcmd, a8::XParams params) -{ - IMMsgNode *p = new IMMsgNode; - p->msgid = imcmd; - p->params = params; - p->next = nullptr; - im_msg_mutex_->lock(); - if (im_bot_node_) { - im_bot_node_->next = p; - im_bot_node_ = p; - } else { - im_top_node_ = p; - im_bot_node_ = p; - } - im_msg_mutex_->unlock(); - NotifyLoopCond(); -} - -void App::QuickExecute(int delta_time) -{ - ProcessIMMsg(); - DispatchMsg(); - a8::Timer::Instance()->Update(); - VirtualClientMgr::Instance()->Update(); -} - -void App::SlowerExecute(int delta_time) -{ -} - -void App::NotifyLoopCond() -{ - std::unique_lock lk(*loop_mutex_); - loop_cond_->notify_all(); -} - -void App::Schedule() -{ - #if 1 - { - std::unique_lock lk(*loop_mutex_); - loop_cond_->wait_for(lk, std::chrono::milliseconds(1)); - } - #else - std::unique_lock lk(*loop_mutex_); - if (!HasTask()) { - int sleep_time = a8::Timer::Instance()->GetIdleableMillSeconds(); - loop_cond_->wait_for(lk, std::chrono::milliseconds(sleep_time)); - if (sleep_time > perf.max_timer_idle) { - perf.max_timer_idle = sleep_time; - } - } - #endif -} - -bool App::HasTask() -{ - { - if (!im_work_node_) { - im_msg_mutex_->lock(); - if (!im_work_node_ && im_top_node_) { - im_work_node_ = im_top_node_; - im_top_node_ = nullptr; - im_bot_node_ = nullptr; - } - im_msg_mutex_->unlock(); - } - if (im_work_node_) { - return true; - } - } - { - if (!work_node_) { - msg_mutex_->lock(); - if (!work_node_ && top_node_) { - work_node_ = top_node_; - top_node_ = nullptr; - bot_node_ = nullptr; - } - msg_mutex_->unlock(); - } - if (work_node_) { - return true; - } - } - return false; -} - -void App::DispatchMsg() -{ - long long starttick = a8::XGetTickCount(); - if (!work_node_ && top_node_) { - msg_mutex_->lock(); - work_node_ = top_node_; - top_node_ = nullptr; - bot_node_ = nullptr; - working_msgnode_size_ = msgnode_size_; - msg_mutex_->unlock(); - } - - f8::MsgHdr hdr; - while (work_node_) { - MsgNode *pdelnode = work_node_; - work_node_ = pdelnode->next; - hdr.msgid = pdelnode->msgid; - hdr.seqid = pdelnode->seqid; - hdr.socket_handle = pdelnode->sockhandle; - hdr.buf = pdelnode->buf; - hdr.buflen = pdelnode->buflen; - hdr.offset = 0; - hdr.ip_saddr = pdelnode->ip_saddr; - switch (pdelnode->sockfrom) { - case SF_VirtualClient: - { - ProcessGameGateMsg(hdr); - } - break; - } - if (pdelnode->buf) { - free(pdelnode->buf); - } - free(pdelnode); - working_msgnode_size_--; - if (a8::XGetTickCount() - starttick > 200) { - break; - } - }//end while - - if (!work_node_) { - working_msgnode_size_ = 0; - } -} - -void App::ProcessGameGateMsg(f8::MsgHdr& hdr) -{ - if (hdr.msgid == ss::_SS_Ping) { - #if 0 - ss::SS_Pong pongmsg; - GGListener::Instance()->SendProxyMsg(hdr.socket_handle, pongmsg); - #endif - return; - } - f8::NetMsgHandler* handler = f8::GetNetMsgHandler(&HandlerMgr::Instance()->ggmsghandler, - hdr.msgid); - if (handler) { - switch (handler->handlerid) { - case HID_GSMgr: - break; - } - } -} - -void App::ProcessIMMsg() -{ - if (!im_work_node_ && im_top_node_) { - im_msg_mutex_->lock(); - im_work_node_ = im_top_node_; - im_top_node_ = nullptr; - im_bot_node_ = nullptr; - im_msg_mutex_->unlock(); - } - while (im_work_node_) { - IMMsgNode *pdelnode = im_work_node_; - switch (im_work_node_->msgid) { - case f8::IM_SysMsgQueue: - { - const a8::XParams* param = (const a8::XParams*)pdelnode->params.param1.GetUserData(); - f8::MsgQueue::Instance()->ProcessMsg(pdelnode->params.sender.GetInt(), - *param - ); - delete param; - } - break; - case IM_VirtualClientConnect: - { - VirtualClient* client = VirtualClientMgr::Instance()->GetVirtualClientByInstanceId( - pdelnode->params.sender - ); - if (client) { - client->SendJoin(); - } - } - break; - case IM_VirtualClientDisconnect: - { - #if 0 - VirtualClient* client = VirtualClientMgr::Instance()->GetVirtualClientByInstanceId( - pdelnode->params.sender - ); - #endif - } - break; - case IM_ExecGM: - { - HandlerMgr::Instance()->ProcGMMsg(pdelnode->params.param3, - pdelnode->params.sender, - pdelnode->params.param1.GetString(), - pdelnode->params.param2.GetString() - ); - } - break; - } - im_work_node_ = im_work_node_->next; - delete pdelnode; - } -} - -void App::InitLog() -{ - std::string filename_fmt = PROJ_LOG_FILENAME_FMT; - a8::ReplaceString(filename_fmt, "$pid", a8::XValue(getpid())); - - std::string proj_root_dir = a8::Format(PROJ_ROOT_FMT, {a8::Format(PROJ_NAME_FMT,{GAME_ID})}); - std::string proj_log_root_dir = a8::Format(PROJ_LOG_ROOT_FMT, {a8::Format(PROJ_NAME_FMT, {GAME_ID})}); - std::string log_file_name = a8::Format(PROJ_LOG_ROOT_FMT, - {a8::Format(PROJ_NAME_FMT, {GAME_ID})}) + "/" + filename_fmt; - - a8::MkDir(proj_root_dir); - a8::MkDir(proj_log_root_dir); - a8::UdpLog::Instance()->SetLogFileName(log_file_name); - a8::UdpLog::Instance()->Init(); - a8::UdpLog::Instance()->Info("proj_root_dir:%s", {proj_root_dir}); - a8::UdpLog::Instance()->Info("proj_log_root_dir:%s", {proj_log_root_dir}); - a8::UdpLog::Instance()->Info("log_file_name:%s", {log_file_name}); -} - -void App::UnInitLog() -{ - a8::UdpLog::Instance()->UnInit(); -} - -bool App::ParseOpt() -{ - int ch = 0; - while ((ch = getopt(argc, argv, "i:t:r:f:h:p:")) != -1) { - switch (ch) { - case 'i': - { - instance_id = a8::XValue(optarg); - } - break; - case 'h': - { - wsp_host = a8::XValue(optarg).GetString(); - } - break; - case 'p': - { - wsp_port = a8::XValue(optarg); - } - break; - case 't': - { - is_test_mode = true; - test_param = a8::XValue(optarg); - } - break; - case 'f': - { - std::vector strings; - a8::Split(optarg, strings, ','); - for (auto& str : strings) { - flags.insert(a8::XValue(str).GetInt()); - } - } - break; - } - } - return true; -} - -long long App::NewUuid() -{ - return uuid.Generate(); -} - -a8::XParams* App::AddContext(long long context_id) -{ - context_hash_[context_id] = a8::XParams(); - return GetContext(context_id); -} - -void App::DelContext(long long context_id) -{ - context_hash_.erase(context_id); -} - -a8::XParams* App::GetContext(long long context_id) -{ - auto itr = context_hash_.find(context_id); - return itr != context_hash_.end() ? &(itr->second) : nullptr; -} diff --git a/server/robotserver/app.h b/server/robotserver/app.h deleted file mode 100644 index 643cf0d4..00000000 --- a/server/robotserver/app.h +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once - -#include - -struct MsgNode; -struct IMMsgNode; -class App : public a8::Singleton -{ -private: - App() {}; - friend class a8::Singleton; - -public: - - void Init(int argc, char* argv[]); - void UnInit(); - - int Run(); - - void AddSocketMsg(SocketFrom_e sockfrom, - int sockhandle, - long ip_saddr, - unsigned short msgid, - unsigned int seqid, - const char *msgbody, - int bodylen); - void AddIMMsg(unsigned short imcmd, a8::XParams params); - - void NotifyLoopCond(); - - long long NewUuid(); - a8::XParams* AddContext(long long context_id); - void DelContext(long long context_id); - a8::XParams* GetContext(long long context_id); - -private: - void QuickExecute(int delta_time); - void SlowerExecute(int delta_time); - void Schedule(); - bool HasTask(); - - void DispatchMsg(); - void ProcessIMMsg(); - - void ProcessGameGateMsg(f8::MsgHdr& hdr); - - void InitLog(); - void UnInitLog(); - - bool ParseOpt(); - -public: - int argc = 0; - char** argv = nullptr; - volatile bool terminated = false; - PerfMonitor perf; - a8::uuid::SnowFlake uuid; - -public: - int instance_id = 0; - bool is_test_mode = false; - int test_param = 0; - std::string wsp_host = "192.168.100.21"; - int wsp_port = 7102; - std::set flags; - -private: - long long last_run_tick_ = 0; - std::mutex *loop_mutex_ = nullptr; - std::condition_variable *loop_cond_ = nullptr; - - std::mutex *msg_mutex_ = nullptr; - MsgNode* top_node_ = nullptr; - MsgNode* bot_node_ = nullptr; - MsgNode* work_node_ = nullptr; - - std::mutex* im_msg_mutex_ = nullptr; - IMMsgNode* im_top_node_ = nullptr; - IMMsgNode* im_bot_node_ = nullptr; - IMMsgNode* im_work_node_ = nullptr; - - std::map context_hash_; - -public: - int msgnode_size_ = 0 ; - int working_msgnode_size_ = 0; - -}; diff --git a/server/robotserver/constant.h b/server/robotserver/constant.h deleted file mode 100755 index 1cdf7090..00000000 --- a/server/robotserver/constant.h +++ /dev/null @@ -1,147 +0,0 @@ -#pragma once - -enum SocketFrom_e -{ - SF_VirtualClient, -}; - -enum InnerMesssage_e -{ - IM_VirtualClientDisconnect = 100, - IM_VirtualClientConnect, - IM_PlayerOffline, - IM_ExecGM, - IM_DBSConnDisconnect, - IM_BSConnDisconnect, - IM_LoadConfig, - IM_HttpResponse, -}; - -//网络处理对象 -enum NetHandler_e -{ - HID_GSMgr, -}; - -enum PlayerState_e -{ - PS_None -}; - -enum VirtualItemId_e -{ - VID_Item_Gold = 50001, - VID_Item_Exp = 50002, - VID_Soul_Stone = 50018, - VID_Pickaxe = 50019 -}; - -enum SyncData_e -{ - SYNC_Data_Exp = 0, -}; - -enum DoorState_e -{ - DoorStateClose = 0, - DoorStateOpen = 1 -}; - -enum GasMode_e -{ - GasInactive = 0, - GasWaiting = 1, - GasMoving = 2, - GasJump = 3 -}; - -enum ActionType_e -{ - AT_None = 0, - AT_Reload = 1, - AT_UseItem = 2, - AT_Relive = 3, - AT_Rescue = 4 -}; - -enum InventorySlot_e -{ - IS_9MM = 0, - IS_556MM = 1, - IS_762MM = 2, - IS_12GAUGE = 3, - IS_RPG = 4, - IS_FRAG = 5, - IS_SMOKE = 6, - IS_HEALTHKIT = 7, - IS_PAIN_KILLER = 8, - - IS_1XSCOPE = 12, - IS_2XSCOPE = 13, - IS_4XSCOPE = 14, - IS_8XSCOPE = 15, - IS_15XSCOPE = 16, - - IS_END -}; - -enum SkillType_e -{ - ST_Hide = 1, - ST_SummonHero = 2, - ST_Accelerate = 3, - ST_DamageAdd = 4, - ST_DefAdd = 5, - ST_RecoverHP = 6, - ST_ReflectDamage = 7, - ST_SelfDetonate = 8 -}; - -enum SkillCond_e -{ - SC_Active = 1, - SC_Passive = 2 -}; - -enum VirtualWeapon_e -{ - VW_SafeArea = 9000000, - VW_Spectate = 9000001, - VW_SelfDetonate = 9000002, - VW_Mine = 9000003, -}; - -enum VirtualPlayer_e -{ - VP_SafeArea = 9000000, - VP_Spectate = 9000001, - VP_SelfDetonate = 9000002, - VP_Mine = 9000003, -}; - -const char* const PROJ_NAME_FMT = "game%d_gameserver"; -const char* const PROJ_ROOT_FMT = "/data/logs/%s"; - -const float TEN_W = 10000 * 10; - -const int SYS_RESET_TIME = 2*60; //每日两点重置 - -const int DEF_WEAPON_ID = 12103; - -const int SERVER_FRAME_RATE = 20; -const int SYNC_FRAME_RATE = 10; -const float FRAME_RATE_MS = 1000.0f / SERVER_FRAME_RATE; - -const int MAX_WEAPON_NUM = 5; - -const int GUN_SLOT1 = 1; -const int GUN_SLOT2 = 2; - -const int FRAG_SLOT = 3; -const int SMOKE_SLOT = 4; - -const int MAP_HEIGHT = 8192; -const int MAP_WIDTH = 8192; -const int MAP_CELL_WIDTH = 64 * 8; - -const int DOOR_THING_ID = 61701; diff --git a/server/robotserver/error_code.h b/server/robotserver/error_code.h deleted file mode 100755 index 35ec63e8..00000000 --- a/server/robotserver/error_code.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -/* - 类似http的错误码设计 - 0:成功 - <400: 客户端的错 - >500: 服务器的错 -*/ -enum ErrorCode_e -{ - ERRNO_OK = 0, - -}; diff --git a/server/robotserver/global.cc b/server/robotserver/global.cc deleted file mode 100755 index 14f96c90..00000000 --- a/server/robotserver/global.cc +++ /dev/null @@ -1,37 +0,0 @@ -#include "precompile.h" -#include "global.h" - -int g_hint_flags = 0; - -bool Global::IsVirtualItem(int itemid) -{ - return (itemid == VID_Item_Exp || - itemid == VID_Item_Gold || - itemid == VID_Soul_Stone || - itemid == VID_Pickaxe); -} - -time_t Global::BetweenDays(time_t time1, time_t time2) -{ - return (time1 + g_time_zone*3600)/3600/24 - (time2 + g_time_zone*3600)/3600/24; -} - -time_t Global::GetDaySeconds(time_t time, int incdays) -{ - return time_t((time + g_time_zone * 3600)/3600/24 + incdays) * 3600 * 24 - 3600 * g_time_zone; -} - -bool Global::IsTimeToReset(int time) -{ - return BetweenDays(g_nowtime - 60 * SYS_RESET_TIME, time - 60 * SYS_RESET_TIME) > 0; -} - - -int Global::g_nowtime = time(nullptr); -int Global::g_time_zone = 8; -bool Global::g_shutdown = false; - -bool IsValidSlotId(int slot_id) -{ - return slot_id >= 0 && slot_id < IS_END; -} diff --git a/server/robotserver/global.h b/server/robotserver/global.h deleted file mode 100755 index 9d9df3c5..00000000 --- a/server/robotserver/global.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -extern int g_hint_flags; - -class Global : public a8::Singleton -{ - private: - Global() {}; - friend class a8::Singleton; - public: - - static bool IsVirtualItem(int itemid); - static bool IsTimeToReset(int time); - static time_t BetweenDays(time_t time1, time_t time2); - static time_t GetDaySeconds(time_t time, int incdays = 0); - - static int g_nowtime; - static int g_time_zone; // 默认东八区 - static bool g_shutdown; -}; - -bool IsValidSlotId(int slot_id); diff --git a/server/robotserver/handlermgr.cc b/server/robotserver/handlermgr.cc deleted file mode 100644 index b23b8804..00000000 --- a/server/robotserver/handlermgr.cc +++ /dev/null @@ -1,75 +0,0 @@ -#include "precompile.h" - -#include - -#include "handlermgr.h" - -#include "app.h" - -static void _GMOpsSelfChecking(f8::JsonHttpRequest* request) -{ - request->resp_xobj->SetVal("errcode", 0); - request->resp_xobj->SetVal("errmsg", ""); - request->resp_xobj->SetVal("healthy", 1); - request->resp_xobj->SetVal("max_rundelay", App::Instance()->perf.max_run_delay_time); - request->resp_xobj->SetVal("max_timer_idle", App::Instance()->perf.max_timer_idle); -} - -static void _GMOpsReload(f8::JsonHttpRequest* request) -{ - request->resp_xobj->SetVal("errcode", 0); - request->resp_xobj->SetVal("errmsg", ""); - a8::UdpLog::Instance()->Warning("reload config files", {}); -} - -void HandlerMgr::Init() -{ - RegisterNetMsgHandlers(); - RegisterGMMsgHandler("Ops@selfChecking", _GMOpsSelfChecking); - RegisterGMMsgHandler("Ops@reload", _GMOpsReload); -} - -void HandlerMgr::UnInit() -{ -} - -void HandlerMgr::RegisterNetMsgHandlers() -{ -} - -void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, - const std::string& url, const std::string& querystr) -{ - if (url != "/webapp/index.php") { - return; - } - - a8::HTTPRequest request; - a8::ParserUrlQueryString(querystr.c_str(), request); - - std::string msgname = a8::Get(request, "c").GetString() + "@" + a8::Get(request, "a").GetString(); - auto itr = gmhandlers_.find(msgname); - if (itr != gmhandlers_.end()) { - f8::JsonHttpRequest* request = new f8::JsonHttpRequest; - request->saddr = saddr; - request->socket_handle = sockhandle; - request->query_str = querystr; - request->request.ReadFromUrlQueryString(querystr); - request->resp_xobj->SetVal("errcode", 0); - request->resp_xobj->SetVal("errmsg", ""); - itr->second(request); - - if (!request->pending){ - std::string response; - request->resp_xobj->ToJsonStr(response); - delete request; - } - } else { - } -} - -void HandlerMgr::RegisterGMMsgHandler(const std::string& msgname, - void (*handler)(f8::JsonHttpRequest*)) -{ - gmhandlers_[msgname] = handler; -} diff --git a/server/robotserver/handlermgr.h b/server/robotserver/handlermgr.h deleted file mode 100644 index 2bf21b87..00000000 --- a/server/robotserver/handlermgr.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include - -#include "framework/cpp/netmsghandler.h" - -namespace a8 -{ - class MutableXObject; -} - -class HandlerMgr : public a8::Singleton -{ - - private: - HandlerMgr() {}; - friend class a8::Singleton; - - public: - - void Init(); - void UnInit(); - - f8::NetMsgHandlerObject ggmsghandler; - - void ProcGMMsg(unsigned long saddr, int sockhandle, - const std::string& url, const std::string& quyerstr); - - private: - void RegisterNetMsgHandlers(); - void RegisterGMMsgHandler(const std::string& msgname, - void (*)(f8::JsonHttpRequest*)); - - std::map gmhandlers_; -}; diff --git a/server/robotserver/main.cc b/server/robotserver/main.cc deleted file mode 100644 index 7dffbf16..00000000 --- a/server/robotserver/main.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include "precompile.h" -#include "app.h" - -int main(int argc, char* argv[]) -{ - int exitcode = 0; - App::Instance()->Init(argc, argv); - exitcode = App::Instance()->Run(); - App::Instance()->UnInit(); - return exitcode; -} diff --git a/server/robotserver/precompile.h b/server/robotserver/precompile.h deleted file mode 100644 index 49c26587..00000000 --- a/server/robotserver/precompile.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include -#include - -#include "constant.h" -#include "types.h" -#include "error_code.h" -#include "global.h" - -namespace google -{ - namespace protobuf - { - class Message; - } -} - -#include "framework/cpp/types.h" -#include "framework/cpp/protoutils.h" - diff --git a/server/robotserver/types.cc b/server/robotserver/types.cc deleted file mode 100644 index 981bc367..00000000 --- a/server/robotserver/types.cc +++ /dev/null @@ -1,3 +0,0 @@ -#include "precompile.h" - - diff --git a/server/robotserver/types.h b/server/robotserver/types.h deleted file mode 100755 index 1467ba76..00000000 --- a/server/robotserver/types.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -struct PerfMonitor -{ - int max_run_delay_time = 0; - int max_timer_idle = 0; - long long out_data_size = 0; - long long in_data_size = 0; - long long read_count = 0; -}; diff --git a/server/robotserver/virtualclient.cc b/server/robotserver/virtualclient.cc deleted file mode 100644 index 07c3c73c..00000000 --- a/server/robotserver/virtualclient.cc +++ /dev/null @@ -1,185 +0,0 @@ -#include "precompile.h" - -#include - -#include -#include -#include - -#include "virtualclient.h" -#include "app.h" -#include "ss_proto.pb.h" -#include "cs_proto.pb.h" - -const int PACK_MAX = 1024 * 64; - -void VirtualClient::Init() -{ - recv_bufflen_ = 0; - recv_buff_ = (char*) malloc(PACK_MAX * 2); - -#if TCP_CLIENT2 - tcp_client_ = new a8::TcpClient2(); -#else - tcp_client_ = new a8::TcpClient(); -#endif - tcp_client_->remote_address = remote_ip; - tcp_client_->remote_port = remote_port; - tcp_client_->on_error = std::bind(&VirtualClient::on_error, this, std::placeholders::_1, std::placeholders::_2); - tcp_client_->on_connect = std::bind(&VirtualClient::on_connect, this, std::placeholders::_1); - tcp_client_->on_disconnect = std::bind(&VirtualClient::on_disconnect, this, std::placeholders::_1); - tcp_client_->on_socketread = std::bind(&VirtualClient::on_socketread, this ,std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); - tcp_client_->Open(); -} - -void VirtualClient::UnInit() -{ - delete tcp_client_; - tcp_client_ = nullptr; -} - -void VirtualClient::Update() -{ - if (state_ == VCS_Joined) { - long long tick = a8::XGetTickCount() - last_active_tick_; - if (tick > 1200) { - // abort(); - } - if (a8::XGetTickCount() - last_move_tick_ > 100) { - last_move_tick_ = a8::XGetTickCount(); - SendMove(); - } - if (a8::XGetTickCount() - last_move_dir_chg_tick_ > 2000 + 1000 * (rand() % 5)) { - last_move_dir_chg_tick_ = a8::XGetTickCount(); - move_x = rand() % 1000; - move_y = rand() % 1000; - if (rand() % 5 == 0) { - move_x = -move_x; - move_y = -move_y; - } - } - } -} - -void VirtualClient::SendJoin() -{ - cs::CMJoin msg; - msg.set_server_id(2); - msg.set_account_id(account); - msg.set_baseskin(14001); - SendMsg(msg); - a8::XPrintf("sendjoin %s\n", {account}); - a8::Timer::Instance()->AddDeadLineTimerAndAttach( - 1000 * 30 + (rand() % 15) * 1000, - a8::XParams() - .SetSender(this), - [] (const a8::XParams& param) - { - VirtualClient* client = (VirtualClient*)param.sender.GetUserData(); - client->jumped_ = true; - }, - &timer_attacher_.timer_list_ - ); -} - -void VirtualClient::SendMove() -{ - cs::CMMove msg; - if (move_x != 0 && move_y != 0) { - auto p = msg.mutable_move_dir(); - p->set_x(move_x); - p->set_y(move_y); - } - msg.set_shot_start(true); - msg.set_shot_hold(true); - msg.set_jump(jumped_); - SendMsg(msg); -} - -#if TCP_CLIENT2 -void VirtualClient::on_error(a8::TcpClient2* sender, int errorId) -#else -void VirtualClient::on_error(a8::TcpClient* sender, int errorId) -#endif -{ - abort(); - a8::UdpLog::Instance()->Error("VirtualClient errorid=%d", {errorId}); -} - -#if TCP_CLIENT2 -void VirtualClient::on_connect(a8::TcpClient2* sender) -#else -void VirtualClient::on_connect(a8::TcpClient* sender) -#endif -{ - recv_bufflen_ = 0; - a8::UdpLog::Instance()->Info("target server connected", {}); - App::Instance()->AddIMMsg(IM_VirtualClientConnect, - a8::XParams() - .SetSender(instance_id) - ); -} - -#if TCP_CLIENT2 -void VirtualClient::on_disconnect(a8::TcpClient2* sender) -#else -void VirtualClient::on_disconnect(a8::TcpClient* sender) -#endif -{ - abort(); - recv_bufflen_ = 0; - a8::UdpLog::Instance()->Info("target server %d disconnected after 10s later reconnect", {instance_id}); - App::Instance()->AddIMMsg(IM_VirtualClientDisconnect, - a8::XParams() - .SetSender(instance_id) - ); -} - -#if TCP_CLIENT2 -void VirtualClient::on_socketread(a8::TcpClient2* sender, char* buf, unsigned int len) -#else -void VirtualClient::on_socketread(a8::TcpClient* sender, char* buf, unsigned int len) -#endif -{ - if (recv_bufflen_ + len > 2 * PACK_MAX) { - recv_bufflen_ = 0; - a8::UdpLog::Instance()->Debug("recvied target server too long message", {}); - return; - } else { - memmove(&recv_buff_[recv_bufflen_], buf, len); - recv_bufflen_ += len; - } - - bool warning = false; - unsigned int offset = 0; - while (recv_bufflen_ - offset >= sizeof(f8::PackHead)) { - f8::PackHead* p = (f8::PackHead*) &recv_buff_[offset]; - if (p->magic_code == f8::MAGIC_CODE) { - if (recv_bufflen_ - offset < sizeof(f8::PackHead) + p->packlen) { - break; - } - App::Instance()->AddSocketMsg(SF_VirtualClient, - instance_id, - 0, - p->msgid, - p->seqid, - &recv_buff_[offset + sizeof(f8::PackHead)], - p->packlen); - offset += sizeof(f8::PackHead) + p->packlen; - } else { - warning = true; - offset++; - continue; - } - } - - if (warning) { - a8::UdpLog::Instance()->Debug("recvied bad package", {}); - } - if (offset > 0 && offset < recv_bufflen_) { - memmove(recv_buff_, recv_buff_ + offset, recv_bufflen_ - offset); - } - recv_bufflen_ -= offset; - state_ = VCS_Joined; - last_active_tick_ = a8::XGetTickCount(); -} diff --git a/server/robotserver/virtualclient.h b/server/robotserver/virtualclient.h deleted file mode 100644 index cf52f906..00000000 --- a/server/robotserver/virtualclient.h +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once - -#include - -namespace a8 -{ - class TcpClient; - class TcpClient2; -} - -enum VirtualClientState_e -{ - VCS_Init, - VCS_Joined, -}; - -class VirtualClient -{ - public: - int instance_id = 0; - std::string account; - std::string remote_ip; - int remote_port = 0; - - void Init(); - void UnInit(); - void Update(); - - template - void SendMsg(T& msg) - { - static int msgid = f8::Net_GetMessageId(msg); - f8::Net_SendMsg(tcp_client_, 0, msgid, msg); - } - void SendJoin(); - void SendMove(); - - private: -#if TCP_CLIENT2 - void on_error(a8::TcpClient2* sender, int errorId); - void on_connect(a8::TcpClient2* sender); - void on_disconnect(a8::TcpClient2* sender); - void on_socketread(a8::TcpClient2* sender, char* buf, unsigned int len); -#else - void on_error(a8::TcpClient* sender, int errorId); - void on_connect(a8::TcpClient* sender); - void on_disconnect(a8::TcpClient* sender); - void on_socketread(a8::TcpClient* sender, char* buf, unsigned int len); -#endif - - private: - VirtualClientState_e state_ = VCS_Init; - char *recv_buff_ = nullptr; - unsigned int recv_bufflen_ = 0; - long long last_active_tick_ = 0; - long long last_move_tick_ = 0; - int move_x = 0; - int move_y = 0; - long long last_move_dir_chg_tick_ = 0; - bool jumped_ = false; - a8::TimerAttacher timer_attacher_; - -#if TCP_CLIENT2 - a8::TcpClient2* tcp_client_ = nullptr; -#else - a8::TcpClient* tcp_client_ = nullptr; -#endif -}; diff --git a/server/robotserver/virtualclientmgr.cc b/server/robotserver/virtualclientmgr.cc deleted file mode 100644 index 9f4a715c..00000000 --- a/server/robotserver/virtualclientmgr.cc +++ /dev/null @@ -1,43 +0,0 @@ -#include "precompile.h" - -#include "virtualclientmgr.h" -#include "virtualclient.h" -#include "app.h" - -void VirtualClientMgr::Init() -{ - for (int i = 1; i <= App::Instance()->test_param; ++i) { - VirtualClient* client = new VirtualClient(); - client->instance_id = i; - client->account = a8::Format("test%d", {i}); - client->remote_ip = App::Instance()->wsp_host; - client->remote_port = App::Instance()->wsp_port; - account_hash_[client->account] = client; - instanceid_hash_[client->instance_id] = client; - client->Init(); - } -} - -void VirtualClientMgr::UnInit() -{ - -} - -void VirtualClientMgr::Update() -{ - for (auto& pair : account_hash_) { - pair.second->Update(); - } -} - -VirtualClient* VirtualClientMgr::GetVirtualClientByAccount(const std::string& account) -{ - auto itr = account_hash_.find(account); - return itr != account_hash_.end() ? itr->second: nullptr; -} - -VirtualClient* VirtualClientMgr::GetVirtualClientByInstanceId(int instance_id) -{ - auto itr = instanceid_hash_.find(instance_id); - return itr != instanceid_hash_.end() ? itr->second : nullptr; -} diff --git a/server/robotserver/virtualclientmgr.h b/server/robotserver/virtualclientmgr.h deleted file mode 100644 index 201dff1d..00000000 --- a/server/robotserver/virtualclientmgr.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -namespace a8 -{ - class MutableXObject; -} - -class VirtualClient; -class VirtualClientMgr : public a8::Singleton -{ - - private: - VirtualClientMgr() {}; - friend class a8::Singleton; - - public: - - void Init(); - void UnInit(); - void Update(); - - VirtualClient* GetVirtualClientByAccount(const std::string& account); - VirtualClient* GetVirtualClientByInstanceId(int instance_id); - - private: - std::map account_hash_; - std::map instanceid_hash_; - -};