|
- #include "StdAfx.h"
- #include "ServiceUnits.h"
- #include "ControlPacket.h"
- #include "AttemperEngineSink.h"
- #include "Commend.h"
- #include "Shop.h"
- #include "GameServer.h"
- #include "GameServerDlg.h"
- #include "ShowTime.h"
- #include "JsonBusiness.h"
- #include "../../MessageDef/Pb_TurntableLogon.pb.h"
- #include "../../MessageDef/Pb_UserInfo.pb.h"
- #include "../../MessageDef/Pb_ClubInformation.pb.h"
- #include "../../MessageDef/Pb_GameInfo.pb.h"
- #include "../../GlobalDef/Util.h"
- #include "ChineseCode.h"
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- //////////////////////////////////////////////////////////////////////////////////
- //时间标识
-
- #define IDI_LOAD_ANDROID_USER (IDI_MAIN_MODULE_START+1) //机器信息
- #define IDI_REPORT_SERVER_INFO (IDI_MAIN_MODULE_START+2) //房间信息
- #define IDI_CONNECT_CORRESPOND (IDI_MAIN_MODULE_START+3) //连接时间
- #define IDI_GAME_SERVICE_PULSE (IDI_MAIN_MODULE_START+4) //服务脉冲
- #define IDI_DISTRIBUTE_ANDROID (IDI_MAIN_MODULE_START+5) //分配机器
- #define IDI_DBCORRESPOND_NOTIFY (IDI_MAIN_MODULE_START+6) //缓存通知
- #define IDI_LOAD_SYSTEM_MESSAGE (IDI_MAIN_MODULE_START+7) //系统消息
- #define IDI_SEND_SYSTEM_MESSAGE (IDI_MAIN_MODULE_START+8) //系统消息
- #define IDI_LOAD_SENSITIVE_WORD (IDI_MAIN_MODULE_START+9) //加载敏感词
- #define IDI_DISTRIBUTE_USER (IDI_MAIN_MODULE_START+10) //分配用户
- #define IDI_TELL_CORRESPOND (IDI_MAIN_MODULE_START+11) //定时告知协调服务器
- #define IDI_UPDATA_DATA (IDI_MAIN_MODULE_START+12) //定时更新数据
- #define IDI_HTTPUPDATA_DATA (IDI_MAIN_MODULE_START+18) //定时http请求
- #define IDI_SERVICE_DATA (IDI_MAIN_MODULE_START+19) //定时通道请求
- #define IDI_SERVICE_CLEAR (IDI_MAIN_MODULE_START+20) //定时清空
- //////////////////////////////////////////////////////////////////////////////////
- //时间定义 秒
-
- #define TIME_LOAD_ANDROID_USER 15L //加载机器
- #define TIME_DISTRIBUTE_ANDROID 15L //分配用户
- #define TIME_REPORT_SERVER_INFO 60L //人数和房间数量上报时间
- #define TIME_DBCORRESPOND_NOTIFY 3L //缓存通知时间
- #define TIME_LOAD_SYSTEM_MESSAGE 600L //系统消息时间
- #define TIME_SEND_SYSTEM_MESSAGE 10L //系统消息时间
- #define TIME_LOAD_SENSITIVE_WORD 5L //加载敏感词时间
- #define TIME_TELL_CORRESPOND 2L //通知协调服务器时间
- #define TIME_HTTP 5L //定时HTTP请求
- //////////////////////////////////////////////////////////////////////////////////
- //常量定义
- #define TEMP_MESSAGE_ID INVALID_DWORD
-
-
- //间隔时间
- #define MIN_INTERVAL_TIME 10 //间隔时间
- #define MAX_INTERVAL_TIME 1*60 //临时标识
-
- const unsigned int MAX_USER = 0xFFFF; //INDEX_ANDROID - 1; // 与SOCKET的bindindex大小一致
-
- //////////////////////////////////////////////////////////////////////////////////
- extern CGameServerApp theApp;
-
- DWORD CAttemperEngineSink::m_DwordThead = 0;
-
- void del_char(TCHAR str[], TCHAR c)
- {
- int i = 0, j = 0;
- while (str[i] != '\0')
- {
- if (str[i] != c)
- {
- str[j++] = str[i++];
- }
- else
- {
- i++;
- }
- }
- str[j] = '\0';
- }
-
- __int64 StrToNmuber(TCHAR *str)
- {
- __int64 ui = 0;
- size_t len = _tcslen(str), i = 0;
- while (i < len)
- {
- ui = ui * 10 + str[i] - 0x30;
- i++;
- }
- return ui;
- }
-
-
- //构造函数
- CAttemperEngineSink::CAttemperEngineSink(): m_pGameMatchOption(nullptr)
- {
- m_Service = 1;
- m_BCreate = true; //允许创建房间
- m_BCreate_Hua = true; //运行创建花牌房间
- m_BAddCreate = true; //允许加入房间
- //状态变量
- m_bCollectUser = false;
- m_bNeekCorrespond = true;
-
- //控制变量
- m_dwIntervalTime = 0;
- m_dwLastDisposeTime = 0;
- m_dwCorrespondNum = 0;
- //绑定数据
- m_pNormalParameter = NULL;
- //m_pAndroidParameter = NULL;
-
- //会员参数
- m_wMemberCount = 0;
- ZeroMemory(m_MemberParameter, sizeof(m_MemberParameter));
-
- //任务参数
- m_wTaskCount = 0;
- ZeroMemory(m_TaskParameter, sizeof(m_TaskParameter));
- ZeroMemory(&m_Data, sizeof(m_Data));
-
- //状态变量
- m_pInitParameter = NULL;
- m_pGameParameter = NULL;
- m_pGameServiceAttrib = NULL;
- m_pGameServiceOption = NULL;
-
- //组件变量
- m_pITimerEngine = NULL;
- m_pIAttemperEngine = NULL;
- m_pITCPSocketService = NULL;
- m_pITCPNetworkEngine = NULL;
- m_pIGameServiceManager = NULL;
-
- //数据引擎
- m_pIRecordDataBaseEngine = NULL;
- m_pIKernelDataBaseEngine = NULL;
- m_pIDBCorrespondManager = NULL;
-
- //配置数据
- //ZeroMemory(&m_DataConfigColumn, sizeof(m_DataConfigColumn));
- //ZeroMemory(&m_DataConfigProperty, sizeof(m_DataConfigProperty));
-
- //比赛变量
- //m_pIMatchServiceManager = NULL;
-
- //初始化私有桌子ID池 note by yd 根据定时器范围 最大桌子ID(32767500-1000000)/500=63535
- for (unsigned short i = PRIVATE_TABLE_MIN_ID; i < 0xFFFF/*65535*/; ++i)
- m_privateTableIDPool.push_back(i);
-
- ZeroMemory(&m_JC, sizeof(m_JC));
- m_pRankListData = nullptr;
- m_pRankListDataSize = 0;
- m_lastRankListTime = time(0);
- m_wShuffleZuan = 0;
- /*ZeroMemory(&mTmpGameConfig, sizeof(tagGameConfig));
- mwChairID = 0;*/
- return;
- }
-
-
- //析构函数
- CAttemperEngineSink::~CAttemperEngineSink()
- {
- //删除数据
- SafeDeleteArray(m_pNormalParameter);
- //SafeDeleteArray(m_pAndroidParameter);
-
- //删除桌子
- m_TableFrameArray.clear();
-
- //删除消息
- m_SystemMessageBuffer.Append(m_SystemMessageActive);
- for (INT_PTR i = 0; i < m_SystemMessageBuffer.GetCount(); i++)
- {
- SafeDelete(m_SystemMessageBuffer[i]);
- }
-
- //清空数组
- m_SystemMessageActive.RemoveAll();
- m_SystemMessageBuffer.RemoveAll();
-
- //清理数据
- //m_KickUserItemMap.RemoveAll();
- m_DistributeManage.RemoveAll();
-
- m_PrivateRoomAll.clear();
- m_OnLineUserAll.clear();
- m_UserID_2_PriTableIDGROUP.clear();
- return;
- }
-
- //接口查询
- VOID * CAttemperEngineSink::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
- {
- QUERYINTERFACE(IMainServiceFrame, Guid, dwQueryVer);
- QUERYINTERFACE(IAttemperEngineSink, Guid, dwQueryVer);
- QUERYINTERFACE(IServerUserItemSink, Guid, dwQueryVer);
- QUERYINTERFACE_IUNKNOWNEX(IAttemperEngineSink, Guid, dwQueryVer);
- return NULL;
- }
-
- //启动事件
- bool CAttemperEngineSink::OnAttemperEngineStart(IUnknownEx * pIUnknownEx)
- {
- //绑定信息
- //m_pAndroidParameter = new tagBindParameter[MAX_ANDROID];
- //ZeroMemory(m_pAndroidParameter, sizeof(tagBindParameter)*MAX_ANDROID);
-
- //绑定信息
- m_pNormalParameter = new tagBindParameter[m_pGameServiceOption->wMaxPlayer];
- ZeroMemory(m_pNormalParameter, sizeof(tagBindParameter)*m_pGameServiceOption->wMaxPlayer);
-
- //配置比赛
- //InitMatchServiceManager();
-
- //配置机器
- if (InitAndroidUser() == false)
- {
- ASSERT(FALSE);
- return false;
- }
-
- //配置桌子
- if (InitTableFrameArray() == false)
- {
- ASSERT(FALSE);
- return false;
- }
-
- //设置接口
- //if (m_pIMatchServiceManager != NULL)
- //{
- // if (m_ServerUserManager.SetServerUserItemSink(m_pIMatchServiceManager->GetServerUserItemSink()) == false)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //}
- //else
- //{
- if (m_ServerUserManager.SetServerUserItemSink(QUERY_ME_INTERFACE(IServerUserItemSink)) == false)
- {
- ASSERT(FALSE);
- return false;
- }
- //}
-
- //启动机器
- //if (m_AndroidUserManager.StartService() == false)
- //{
- // ASSERT(FALSE);
- // return false;
- //}
-
- //设置规则
- m_DistributeManage.SetDistributeRule(m_pGameServiceOption->cbDistributeRule);
-
- m_pITimerEngine->SetTimer(IDI_UPDATA_DATA, 30000L, TIMES_INFINITY, NULL);
-
- int iNum = (rand() % 10)*1000 + 40000L;
- m_pITimerEngine->SetTimer(IDI_SERVICE_DATA, iNum, TIMES_INFINITY, NULL);
-
- m_pITimerEngine->SetTimer(IDI_SERVICE_CLEAR, 60*1000, TIMES_INFINITY, NULL);
-
- //设置时间
- //m_pITimerEngine->SetTimer(IDI_GAME_SERVICE_PULSE, 1000L, TIMES_INFINITY, NULL);
- //m_pITimerEngine->SetTimer(IDI_DBCORRESPOND_NOTIFY, TIME_DBCORRESPOND_NOTIFY * 1000L, TIMES_INFINITY, NULL);
-
- //#ifdef _DEBUG
- // m_pITimerEngine->SetTimer(IDI_LOAD_SYSTEM_MESSAGE, 15 * 1000L, TIMES_INFINITY, NULL);
- // m_pITimerEngine->SetTimer(IDI_SEND_SYSTEM_MESSAGE, 5 * 1000L, TIMES_INFINITY, NULL);
- //#else
- // m_pITimerEngine->SetTimer(IDI_LOAD_SYSTEM_MESSAGE, TIME_LOAD_SYSTEM_MESSAGE * 1000L, TIMES_INFINITY, NULL);
- // m_pITimerEngine->SetTimer(IDI_SEND_SYSTEM_MESSAGE, TIME_SEND_SYSTEM_MESSAGE * 1000L, TIMES_INFINITY, NULL);
- //#endif
-
- //延时加载敏感词
- //m_pITimerEngine->SetTimer(IDI_LOAD_SENSITIVE_WORD, TIME_LOAD_SENSITIVE_WORD * 1000L, TIMES_INFINITY, NULL);
-
- //防作弊模式
- if ((m_pGameServiceOption->cbDistributeRule&DISTRIBUTE_ALLOW) != 0)
- {
- m_pITimerEngine->SetTimer(IDI_DISTRIBUTE_USER, m_pGameServiceOption->wDistributeTimeSpace * 1000, TIMES_INFINITY, NULL);
- }
-
- // //加载机器
- // if (CServerRule::IsAllowAndroidAttend(m_pGameServiceOption->dwServerRule) ||
- // CServerRule::IsAllowAndroidSimulate(m_pGameServiceOption->dwServerRule))
- // {
- //#ifdef _DEBUG
- // m_pITimerEngine->SetTimer(IDI_LOAD_ANDROID_USER, 10000L, TIMES_INFINITY, NULL);
- // m_pITimerEngine->SetTimer(IDI_DISTRIBUTE_ANDROID, TIME_DISTRIBUTE_ANDROID * 1000L, TIMES_INFINITY, NULL);
- //#else
- // m_pITimerEngine->SetTimer(IDI_LOAD_ANDROID_USER, TIME_LOAD_ANDROID_USER * 1000L, TIMES_INFINITY, NULL);
- // m_pITimerEngine->SetTimer(IDI_DISTRIBUTE_ANDROID, TIME_DISTRIBUTE_ANDROID * 1000L, TIMES_INFINITY, NULL);
- //#endif
- // }
-
-
- return true;
- }
-
- //停止事件
- bool CAttemperEngineSink::OnAttemperEngineConclude(IUnknownEx * pIUnknownEx)
- {
- if (m_pITimerEngine) m_pITimerEngine->KillTimer(IDI_SERVICE_DATA);
-
- if (m_pITimerEngine) m_pITimerEngine->KillTimer(IDI_SERVICE_CLEAR);
-
- //状态变量
- m_bCollectUser = false;
- m_bNeekCorrespond = true;
-
- //配置信息
- m_pInitParameter = NULL;
- m_pGameServiceAttrib = NULL;
- m_pGameServiceOption = NULL;
-
- //组件变量
- m_pITimerEngine = NULL;
- m_pITCPSocketService = NULL;
- m_pITCPNetworkEngine = NULL;
-
- //数据引擎
- m_pIRecordDataBaseEngine = NULL;
- m_pIKernelDataBaseEngine = NULL;
-
- //绑定数据
- SafeDeleteArray(m_pNormalParameter);
- //SafeDeleteArray(m_pAndroidParameter);
-
- //任务变量
- m_wTaskCount = 0;
- ZeroMemory(&m_TaskParameter, sizeof(m_TaskParameter));
-
- //会员参数
- m_wMemberCount = 0;
- ZeroMemory(m_MemberParameter, sizeof(m_MemberParameter));
-
- //删除用户
- m_TableFrameArray.clear();
- m_DistributeManage.RemoveAll();
- m_ServerUserManager.DeleteUserItem();
- m_ServerListManager.ResetServerList();
-
- //停止服务
- //m_AndroidUserManager.ConcludeService();
-
- //停止比赛
- //if (m_pIMatchServiceManager != NULL)
- // m_pIMatchServiceManager->StopService();
-
- //移除消息
- RemoveSystemMessage();
-
- //移除任务
- //m_UserTaskManager.ResetTaskManager();
-
- //复位关键字
- //m_WordsFilter.ResetSensitiveWordArray();
-
- m_PrivateRoomAll.clear();
- m_OnLineUserAll.clear();
- m_UserID_2_PriTableIDGROUP.clear();
-
- return true;
- }
-
- //控制事件
- bool CAttemperEngineSink::OnEventControl(WORD wIdentifier, VOID * pData, WORD wDataSize)
- {
- switch (wIdentifier)
- {
- case CT_CONNECT_CORRESPOND: //连接协调
- {
- //发起连接
- tagAddressInfo * pCorrespondAddress = &m_pInitParameter->m_CorrespondAddress;
- m_pITCPSocketService->Connect(pCorrespondAddress->szAddress, m_pInitParameter->m_wCorrespondPort);
-
- //构造提示
- TCHAR szString[512] = TEXT("");
- _sntprintf(szString, CountArray(szString), TEXT("正在连接协调服务器 [ %s:%d ]"), pCorrespondAddress->szAddress, m_pInitParameter->m_wCorrespondPort);
-
- //提示消息
- CTraceService::TraceString(szString, TraceLevel_Normal);
-
- return true;
- }
- case CT_LOAD_SERVICE_CONFIG: //加载配置
- {
- ///+++加载轮盘配置(奖品有数量,会动态变化)
- ///---m_pIDBCorrespondManager->PostDataBaseRequest(0, DBR_GP_LOAD_ROULETTE_CONFIG, 0, NULL, 0); ///在抽奖的时候,动态加载
-
- ///+++加载签到奖励配置
- m_pIDBCorrespondManager->PostDataBaseRequest(0, DBR_GP_LOAD_CHECKIN_REWARD, 0, NULL, 0);
- //加载配置
- m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_PARAMETER, 0L, NULL, 0L);
-
- //加载列表
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_GAME_COLUMN, 0L, NULL, 0L);
-
- //加载机器
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_ANDROID_PARAMETER, 0L, NULL, 0L);
-
- //加载消息
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_SYSTEM_MESSAGE, 0L, NULL, 0L);
-
- //加载任务
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_TASK_LOAD_LIST, 0L, NULL, 0L);
-
- //会员参数
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_MEMBER_PARAMETER, 0, NULL, 0);
-
- //加载道具
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_GAME_PROPERTY, 0L, NULL, 0L);
-
- return true;
- }
- default: break;
- }
-
- return false;
- }
-
- //调度事件
- bool CAttemperEngineSink::OnEventAttemperData(WORD wRequestID, VOID * pData, WORD wDataSize)
- {
- return false;
- }
-
- //时间事件
- bool CAttemperEngineSink::OnEventTimer(DWORD dwTimerID, WPARAM wBindParam)
- {
- //调度时间
- if ((dwTimerID >= IDI_MAIN_MODULE_START) && (dwTimerID <= IDI_MAIN_MODULE_FINISH))
- {
- //时间处理
- switch (dwTimerID)
- {
- //case IDI_LOAD_ANDROID_USER: //加载机器
- //{
- // //变量定义
- // DWORD dwBatchID = 0;
- // DWORD dwAndroidCount = 0;
- // //加载判断
- // if (m_AndroidUserManager.GetAndroidLoadInfo(dwBatchID, dwAndroidCount))
- // {
- // //构造结构
- // DBR_GR_LoadAndroidUser LoadAndroidUser;
- // LoadAndroidUser.dwBatchID = dwBatchID;
- // LoadAndroidUser.dwAndroidCount = dwAndroidCount;
- // CTraceService::TraceString(TEXT("加载机器已屏蔽 IDI_LOAD_ANDROID_USER"), TraceLevel_Warning);
- // //加载机器
- // //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_ANDROID_USER, 0L, &LoadAndroidUser, sizeof(LoadAndroidUser));
- // }
- // return true;
- //}
- case IDI_REPORT_SERVER_INFO: //房间信息
- {
- //变量定义
- CMD_CS_C_ServerOnLine ServerOnLine;
- ZeroMemory(&ServerOnLine, sizeof(ServerOnLine));
-
- //设置变量
- ServerOnLine.wTableOnlineCount = m_PriTableID_2_TableID.size();
- ServerOnLine.wTableFullCount = m_pGameServiceOption->wTableCount;
- ServerOnLine.dwOnLineCount = m_ServerUserManager.GetUserItemCount();
-
- //发送数据
- m_pITCPSocketService->SendData(MDM_CS_SERVICE_INFO, SUB_CS_C_SERVER_ONLINE, &ServerOnLine, sizeof(ServerOnLine)/*, 0, 0, m_pIGameServiceManager == NULL? NULL:m_pIGameServiceManager->GetDataString()*/);
-
- return true;
- }
- case IDI_CONNECT_CORRESPOND: //连接协调
- {
- //发起连接
- tagAddressInfo * pCorrespondAddress = &m_pInitParameter->m_CorrespondAddress;
- m_pITCPSocketService->Connect(pCorrespondAddress->szAddress, m_pInitParameter->m_wCorrespondPort);
-
- //构造提示
- TCHAR szString[512] = TEXT("");
- ZeroMemory(szString, sizeof(TCHAR) * 512);
- _sntprintf(szString, CountArray(szString), TEXT("正在连接协调服务器 [ %s:%d ]"), pCorrespondAddress->szAddress, m_pInitParameter->m_wCorrespondPort);
-
- //提示消息
- CTraceService::TraceString(szString, TraceLevel_Normal);
-
- return true;
- }
- case IDI_GAME_SERVICE_PULSE: //服务维护
- {
- return true;
- }
- case IDI_SERVICE_DATA: //加载通道
- {
- DWORD dThead = GetCurrentThreadId();
- if (CAttemperEngineSink::m_DwordThead == 0)
- {
- CAttemperEngineSink::m_DwordThead = dThead;
- }
-
- if (dThead == CAttemperEngineSink::m_DwordThead)
- {
- GetTCPNetworkEngine()->OnTBDataEvent(DBO_GR_UPTONGDAO, 0, NULL, 0);
- }
- return true;
- }
- case IDI_SERVICE_CLEAR: //清空操作
- {
- DWORD dThead = GetCurrentThreadId();
- if (CAttemperEngineSink::m_DwordThead == 0)
- {
- CAttemperEngineSink::m_DwordThead = dThead;
- }
-
- if (dThead == CAttemperEngineSink::m_DwordThead)
- {
-
- CTime tm; tm = CTime::GetCurrentTime();
-
- if (tm.GetHour() ==3
- && (tm.GetMinute() == 0))
- {
- //也强制解散空闲房间
- CString str = L"";
- str.Format(_T("强制解散空闲房间"));
- CTraceService::TraceString(str, TraceLevel_Normal);
- GetTCPNetworkEngine()->OnTBDataEvent(DBO_GR_GAME_JSFREEALL, 0, NULL, 0);
- }
- if (tm.GetHour() == 4
- && (tm.GetMinute() == 0
- || tm.GetMinute() == 1))
- {
-
- if (m_pITimerEngine) m_pITimerEngine->KillAllFreeTimer();
- GetTCPNetworkEngine()->OnTBDataEvent(DBO_GR_CLEAR, 0, NULL, 0);
- }
- }
- return true;
- }
- case IDI_UPDATA_DATA: //统计数据上报
- {
- for (auto iter = m_TableFrameArray.begin(); iter != m_TableFrameArray.end(); iter++)
- {
- if (iter->second != nullptr)
- {
- auto pTableFrame = iter->second;
-
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (csTemp != _T(""))
- {
- m_Data.iTableCount++;
- m_Data.iTableNum = m_Data.iTableCount;
- m_Data.PrivteTable[m_Data.iTableNum - 1] = _wtol(csTemp);
- if (pTableFrame->GetStartCount() > 0)
- {
- m_Data.iPlayingTableCount++;
-
- int iRet = 0;
- for (int i = 0; i < 4; i++)
- {
- IServerUserItem * p = pTableFrame->GetTableUserItem(i);
- if (p && p->GetUserStatus() == US_OFFLINE)
- {
- iRet++;
- }
- }
- if (iRet == 4) m_Data.iDownTableCount++;
- }
- else
- {
- m_Data.iFreeTableCount++;
- }
- }
- }
- }
-
- m_Data.iLoginBody = m_ServerUserManager.GetUserItemCount();
-
- WORD wEnumIndex = 0;
- while (wEnumIndex < m_ServerUserManager.GetUserItemCount())
- {
- //过滤用户
- IServerUserItem *pIServerUserItem = m_ServerUserManager.EnumUserItem(wEnumIndex++);
- if (pIServerUserItem->GetUserStatus() == US_OFFLINE)
- {
- m_Data.iDownBody++;
- }
- else
- {
- m_Data.iLinkBody++;
- if (pIServerUserItem->GetUserStatus() == US_FREE)
- {
- m_Data.iDaTingBody++;
- }
- }
- }
-
- m_Data.iFreeCon = m_Data.iSocketNum - m_Data.iLinkBody;
-
- CGameServerDlg::UpData(m_Data);
-
- TagUpData Temp;
- ZeroMemory(&Temp, sizeof(TagUpData));
- Temp = m_Data;
-
- ZeroMemory(&m_Data, sizeof(m_Data));
- m_Data.iSocketNum = Temp.iSocketNum;
-
- return true;
- }
- /*case IDI_DISTRIBUTE_ANDROID: //分配机器
- //{
- // //动作处理
- // if (m_AndroidUserManager.GetAndroidCount() > 0 && m_pGameServiceOption->wServerType != GAME_GENRE_MATCH)
- // {
- // //变量定义
- // bool bAllowDynamicJoin = CServerRule::IsAllowDynamicJoin(m_pGameServiceOption->dwServerRule);
- // bool bAllowAndroidAttend = CServerRule::IsAllowAndroidAttend(m_pGameServiceOption->dwServerRule);
- // bool bAllowAndroidSimulate = CServerRule::IsAllowAndroidSimulate(m_pGameServiceOption->dwServerRule);
- // bool bAllowAvertCheatMode = (CServerRule::IsAllowAvertCheatMode(m_pGameServiceOption->dwServerRule) && (m_pGameServiceAttrib->wChairCount < MAX_CHAIR));
-
- // //模拟处理
- // if (bAllowAndroidSimulate == true && bAllowAvertCheatMode == false)
- // {
- // //机器状态
- // tagAndroidUserInfo AndroidSimulate;
- // m_AndroidUserManager.GetAndroidUserInfo(AndroidSimulate, ANDROID_SIMULATE);
-
- // //机器处理
- // if (AndroidSimulate.wFreeUserCount > 0)
- // {
- // for (WORD i = 0; i < 8; i++)
- // {
- // //随机桌子
- // WORD wTableID = rand() % (__max(m_pGameServiceOption->wTableCount / 3, 1));
-
- // //获取桌子
- // auto pTableFrame = GetTableFrame(wTableID);
- // if (!pTableFrame)
- // continue;
- // if ((pTableFrame->IsGameStarted() == true) && (bAllowDynamicJoin == false)) continue;
-
- // //桌子状况
- // tagTableUserInfo TableUserInfo;
- // WORD wUserSitCount = pTableFrame->GetTableUserInfo(TableUserInfo);
-
- // //分配判断
- // if (TableUserInfo.wTableUserCount > 0) continue;
- // if ((wUserSitCount >= TableUserInfo.wMinUserCount) && (m_pGameServiceAttrib->wChairCount < MAX_CHAIR)) continue;
-
- // //坐下判断
- // if (AndroidSimulate.wFreeUserCount >= TableUserInfo.wMinUserCount)
- // {
- // //变量定义
- // WORD wHandleCount = 0;
- // WORD wWantAndroidCount = TableUserInfo.wMinUserCount;
-
- // //数据调整
- // if (m_pGameServiceAttrib->wChairCount > TableUserInfo.wMinUserCount)
- // {
- // WORD wChairCount = m_pGameServiceAttrib->wChairCount;
- // WORD wFreeUserCount = AndroidSimulate.wFreeUserCount;
- // WORD wOffUserCount = __min(wChairCount, wFreeUserCount) - TableUserInfo.wMinUserCount;
- // wWantAndroidCount += ((wOffUserCount > 0) ? (rand() % (wOffUserCount + 1)) : 0);
- // }
-
- // //坐下处理
- // for (WORD j = 0; j < AndroidSimulate.wFreeUserCount; j++)
- // {
- // //变量定义
- // WORD wChairID = pTableFrame->GetRandNullChairID();
-
- // //无效过滤
- // //ASSERT(wChairID!=INVALID_CHAIR);
- // if (wChairID == INVALID_CHAIR) continue;
-
- // //用户坐下
- // IAndroidUserItem * pIAndroidUserItem = AndroidSimulate.pIAndroidUserFree[j];
- // if (pTableFrame->PerformSitDownAction(wChairID, pIAndroidUserItem->GetMeUserItem()) == true)
- // {
- // //设置变量
- // wHandleCount++;
-
- // //完成判断
- // if (wHandleCount >= wWantAndroidCount)
- // {
- // return true;
- // }
- // }
- // }
-
- // if (wHandleCount > 0) return true;
- // }
- // }
- // }
- // }
-
- // //陪打处理
- // if (bAllowAndroidAttend == true)
- // {
- // //被动状态
- // tagAndroidUserInfo AndroidPassivity;
- // m_AndroidUserManager.GetAndroidUserInfo(AndroidPassivity, ANDROID_PASSIVITY);
-
- // if (bAllowAvertCheatMode)
- // {
- // //坐下处理
- // for (WORD j = 0; j < AndroidPassivity.wFreeUserCount; j++)
- // {
- // IAndroidUserItem * pIAndroidUserItem = AndroidPassivity.pIAndroidUserFree[j];
- // if (InsertDistribute(pIAndroidUserItem->GetMeUserItem()) == true) return true;
- // }
- // }
- // else
- // {
- // //被动处理
- // if (AndroidPassivity.wFreeUserCount > 0)
- // {
- // //百人游戏
- // if (m_pGameServiceAttrib->wChairCount >= MAX_CHAIR)
- // {
- // for (INT_PTR i = 0; i < (m_pGameServiceOption->wTableCount); i++)
- // {
- // //获取桌子
- // auto pTableFrame = GetTableFrame(i);
- // if (!pTableFrame)
- // continue;
- // if ((pTableFrame->IsGameStarted() == true) && (bAllowDynamicJoin == false)) continue;
-
- // //桌子状况
- // tagTableUserInfo TableUserInfo;
- // WORD wUserSitCount = pTableFrame->GetTableUserInfo(TableUserInfo);
-
- // //分配判断
- // if (wUserSitCount > m_pGameServiceAttrib->wChairCount * 2 / 3) continue;
-
- // //变量定义
- // IServerUserItem * pIServerUserItem = NULL;
- // WORD wChairID = pTableFrame->GetRandNullChairID();
-
- // //无效过滤
- // ASSERT(wChairID != INVALID_CHAIR);
- // if (wChairID == INVALID_CHAIR) continue;
-
- // //坐下处理
- // for (WORD j = 0; j < AndroidPassivity.wFreeUserCount; j++)
- // {
- // IAndroidUserItem * pIAndroidUserItem = AndroidPassivity.pIAndroidUserFree[j];
- // if (pTableFrame->PerformSitDownAction(wChairID, pIAndroidUserItem->GetMeUserItem()) == true) return true;
- // }
- // }
- // }
- // else
- // {
- // for (INT_PTR i = 0; i < m_pGameServiceOption->wTableCount; i++)
- // {
- // //获取桌子
- // auto pTableFrame = GetTableFrame(i);
- // if (!pTableFrame)
- // continue;
- // if ((pTableFrame->IsGameStarted() == true) && (bAllowDynamicJoin == false)) continue;
-
- // //桌子状况
- // tagTableUserInfo TableUserInfo;
- // WORD wUserSitCount = pTableFrame->GetTableUserInfo(TableUserInfo);
-
- // //分配判断
- // if (wUserSitCount == 0) continue;
- // if (TableUserInfo.wTableUserCount == 0) continue;
- // if ((wUserSitCount >= TableUserInfo.wMinUserCount) && (rand() % 10 > 5)) continue;
-
- // //变量定义
- // IServerUserItem * pIServerUserItem = NULL;
- // WORD wChairID = pTableFrame->GetRandNullChairID();
-
- // //无效过滤
- // ASSERT(wChairID != INVALID_CHAIR);
- // if (wChairID == INVALID_CHAIR) continue;
-
- // //坐下处理
- // for (WORD j = 0; j < AndroidPassivity.wFreeUserCount; j++)
- // {
- // IAndroidUserItem * pIAndroidUserItem = AndroidPassivity.pIAndroidUserFree[j];
- // if (pTableFrame->PerformSitDownAction(wChairID, pIAndroidUserItem->GetMeUserItem()) == true) return true;
- // }
- // }
- // }
- // }
- // }
- // }
-
- // //陪打处理
- // if (bAllowAndroidAttend == true)
- // {
- // //主动状态
- // tagAndroidUserInfo AndroidInitiative;
- // m_AndroidUserManager.GetAndroidUserInfo(AndroidInitiative, ANDROID_INITIATIVE);
- // //WORD wAllAndroidCount = AndroidInitiative.wFreeUserCount + AndroidInitiative.wPlayUserCount + AndroidInitiative.wSitdownUserCount;
-
- // if (bAllowAvertCheatMode)
- // {
- // //坐下处理
- // for (WORD j = 0; j < AndroidInitiative.wFreeUserCount; j++)
- // {
- // IAndroidUserItem * pIAndroidUserItem = AndroidInitiative.pIAndroidUserFree[j];
- // if (InsertDistribute(pIAndroidUserItem->GetMeUserItem()) == true) return true;
- // }
- // }
- // else
- // {
- // //主动处理
- // if (AndroidInitiative.wFreeUserCount > 0)
- // {
- // for (INT_PTR i = 0; i < m_pGameServiceOption->wTableCount; i++)
- // {
- // //获取桌子
- // auto pTableFrame = GetTableFrame(i);
- // if (!pTableFrame)
- // continue;
- // if ((pTableFrame->IsGameStarted() == true) && (bAllowDynamicJoin == false)) continue;
-
- // //桌子状况
- // tagTableUserInfo TableUserInfo;
- // WORD wUserSitCount = pTableFrame->GetTableUserInfo(TableUserInfo);
-
- // //分配判断
- // if ((m_pGameServiceAttrib->wChairCount < MAX_CHAIR) && wUserSitCount > (TableUserInfo.wMinUserCount - 1)) continue;
-
- // //变量定义
- // IServerUserItem * pIServerUserItem = NULL;
- // WORD wChairID = pTableFrame->GetRandNullChairID();
-
- // //无效过滤
- // ASSERT(wChairID != INVALID_CHAIR);
- // if (wChairID == INVALID_CHAIR) continue;
-
- // //坐下处理
- // for (WORD j = 0; j < AndroidInitiative.wFreeUserCount; j++)
- // {
- // IAndroidUserItem * pIAndroidUserItem = AndroidInitiative.pIAndroidUserFree[j];
- // if (pTableFrame->PerformSitDownAction(wChairID, pIAndroidUserItem->GetMeUserItem()) == true) return true;
- // }
- // }
- // }
- // }
- // }
-
- // //变量定义
- // bool bMaxPlayerGame = m_pGameServiceAttrib->wChairCount >= MAX_CHAIR;
-
- // //类型判断
- // if (bMaxPlayerGame)
- // {
- // //获取时间
- // DWORD dwCurrTime = (DWORD)time(NULL);
- // if (dwCurrTime < m_dwIntervalTime + m_dwLastDisposeTime) return true;
-
- // //设置变量
- // m_dwLastDisposeTime = dwCurrTime;
- // m_dwIntervalTime = MIN_INTERVAL_TIME + rand() % (MAX_INTERVAL_TIME - MIN_INTERVAL_TIME);
- // }
-
- // //起立处理
- // WORD wStandUpCount = 0;
- // WORD wRandCount = ((rand() % 3) + 1);
- // INT_PTR nIndex = rand() % (__max(m_pGameServiceOption->wTableCount, 1));
- // for (INT_PTR i = nIndex; i < m_pGameServiceOption->wTableCount + nIndex; ++i)
- // {
- // //获取桌子
- // INT_PTR nTableIndex = i%m_pGameServiceOption->wTableCount;
- // auto pTableFrame = GetTableFrame(nTableIndex);
- // if (!pTableFrame)
- // continue;
- // if (pTableFrame->IsGameStarted() == true) continue;
-
- // //桌子状况
- // tagTableUserInfo TableUserInfo;
- // ZeroMemory(&TableUserInfo, sizeof(TableUserInfo));
- // //WORD wUserSitCount = pTableFrame->GetTableUserInfo(TableUserInfo);
-
- // //用户过虑
- // bool bRand = ((rand() % 100) > 50);
- // if (TableUserInfo.wTableAndroidCount == 0) continue;
- // if ((TableUserInfo.wTableUserCount > 0) && (bAllowAndroidAttend == true) && bRand) continue;
- // if (TableUserInfo.wTableAndroidCount >= TableUserInfo.wMinUserCount && bRand) continue;
-
- // //起立处理
- // for (WORD j = 0; j < pTableFrame->GetChairCount(); j++)
- // {
- // //获取用户
- // IServerUserItem * pIServerUserItem = pTableFrame->GetTableUserItem(j);
- // if (pIServerUserItem == NULL) continue;
-
- // //用户起立
- // if ((pIServerUserItem->IsAndroidUser() == true) && (pTableFrame->PerformStandUpAction(pIServerUserItem) == true))
- // {
- // wStandUpCount++;
- // if (wStandUpCount >= wRandCount)
- // return true;
- // else
- // break;
- // }
- // }
- // }
-
- // //起立处理
- // nIndex = rand() % (__max(m_pGameServiceOption->wTableCount, 1));
- // for (INT_PTR i = nIndex; i < m_pGameServiceOption->wTableCount + nIndex; ++i)
- // {
- // //获取桌子
- // //INT_PTR nTableIndex = i%m_pGameServiceOption->wTableCount;
- // auto pTableFrame = GetTableFrame(i);
- // if (!pTableFrame)
- // continue;
- // if (pTableFrame->IsGameStarted() == true) continue;
-
- // //桌子状况
- // tagTableUserInfo TableUserInfo;
- // ZeroMemory(&TableUserInfo, sizeof(TableUserInfo));
- // //WORD wUserSitCount = pTableFrame->GetTableUserInfo(TableUserInfo);
-
- // //用户过虑
- // bool bRand = ((rand() % 100) > 50);
- // if (TableUserInfo.wTableAndroidCount == 0) continue;
- // if ((TableUserInfo.wTableUserCount > 0) && (bAllowAndroidAttend == true) && bRand) continue;
-
- // //起立处理
- // for (WORD j = 0; j < pTableFrame->GetChairCount(); j++)
- // {
- // //获取用户
- // IServerUserItem * pIServerUserItem = pTableFrame->GetTableUserItem(j);
- // if (pIServerUserItem == NULL) continue;
-
- // //用户起立
- // if ((pIServerUserItem->IsAndroidUser() == true) && (pTableFrame->PerformStandUpAction(pIServerUserItem) == true))
- // {
- // wStandUpCount++;
- // if (wStandUpCount >= wRandCount)
- // return true;
- // else
- // break;
- // }
- // }
- // }
- // }
-
- // //比赛类型
- // if (m_pGameServiceOption->wServerType == GAME_GENRE_MATCH)
- // {
- // //陪玩标识
- // bool bAllowAndroidAttend = CServerRule::IsAllowAndroidAttend(m_pGameServiceOption->dwServerRule);
-
- // //陪玩处理
- // if (bAllowAndroidAttend == true)
- // {
- // //被动状态
- // tagAndroidUserInfo AndroidPassivity;
- // m_AndroidUserManager.GetAndroidUserInfo(AndroidPassivity, ANDROID_PASSIVITY);
-
- // //坐下处理
- // WORD wIndex = rand() % (AndroidPassivity.wFreeUserCount + 1);
- // for (WORD j = wIndex; j < AndroidPassivity.wFreeUserCount + wIndex; j++)
- // {
- // WORD wAndroidIndex = j%AndroidPassivity.wFreeUserCount;
- // IAndroidUserItem * pIAndroidUserItem = AndroidPassivity.pIAndroidUserFree[wAndroidIndex];
- // if (InsertDistribute(pIAndroidUserItem->GetMeUserItem()) == true) return true;
- // }
- // }
- // }
-
- // return true;
- //}
- */
- case IDI_DBCORRESPOND_NOTIFY: //缓存定时处理
- {
- CTraceService::TraceString(TEXT("缓存定时处理已屏蔽 IDI_DBCORRESPOND_NOTIFY"), TraceLevel_Warning);
- //if (m_pIDBCorrespondManager) m_pIDBCorrespondManager->OnTimerNotify();
- return true;
- }
- case IDI_LOAD_SYSTEM_MESSAGE: //系统消息
- {
- CTraceService::TraceString(TEXT("系统消息已屏蔽 IDI_LOAD_SYSTEM_MESSAGE"), TraceLevel_Warning);
- //清除消息数据
- //RemoveSystemMessage();
-
- //加载消息
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_SYSTEM_MESSAGE, 0L, NULL, 0L);
-
- return true;
- }
- //case IDI_LOAD_SENSITIVE_WORD: //加载敏感词
- //{
- // //投递请求
- // m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_LOAD_SENSITIVE_WORDS, 0, NULL, 0);
- // return true;
- //}
- case IDI_SEND_SYSTEM_MESSAGE: //系统消息
- {
- CTraceService::TraceString(TEXT("系统消息已屏蔽 IDI_SEND_SYSTEM_MESSAGE"), TraceLevel_Warning);
- ////数量判断
- //if (m_SystemMessageActive.GetCount() == 0) return true;
-
- ////时效判断
- //DWORD dwCurrTime = (DWORD)time(NULL);
- //for (INT_PTR nIndex = m_SystemMessageActive.GetCount() - 1; nIndex >= 0; nIndex--)
- //{
- // tagSystemMessage *pTagSystemMessage = m_SystemMessageActive[nIndex];
-
- // //时效判断
- // if (pTagSystemMessage->SystemMessage.tConcludeTime < dwCurrTime)
- // {
- // m_SystemMessageActive.RemoveAt(nIndex);
- // SafeDelete(pTagSystemMessage);
-
- // continue;
- // }
-
- // //间隔判断
- // if (pTagSystemMessage->dwLastTime + pTagSystemMessage->SystemMessage.dwTimeRate < dwCurrTime)
- // {
- // //更新数据
- // pTagSystemMessage->dwLastTime = dwCurrTime;
-
- // //构造消息
- // CMD_GR_SendMessage SendMessage = {};
- // SendMessage.cbAllRoom = (pTagSystemMessage->SystemMessage.dwMessageID == TEMP_MESSAGE_ID) ? TRUE : FALSE;
- // SendMessage.cbGame = (pTagSystemMessage->SystemMessage.cbMessageType == 1) ? TRUE : FALSE;
- // SendMessage.cbRoom = (pTagSystemMessage->SystemMessage.cbMessageType == 2) ? TRUE : FALSE;
- // if (pTagSystemMessage->SystemMessage.cbMessageType == 3)
- // {
- // SendMessage.cbGame = TRUE;
- // SendMessage.cbRoom = TRUE;
- // }
- // lstrcpyn(SendMessage.szSystemMessage, pTagSystemMessage->SystemMessage.szSystemMessage, CountArray(SendMessage.szSystemMessage));
- // SendMessage.wChatLength = lstrlen(SendMessage.szSystemMessage) + 1;
-
- // //发送消息
- // WORD wSendSize = sizeof(SendMessage) - sizeof(SendMessage.szSystemMessage) + CountStringBuffer(SendMessage.szSystemMessage);
- // SendSystemMessage(&SendMessage, wSendSize);
- // }
- //}
-
- return true;
- }
- case IDI_DISTRIBUTE_USER: //分配用户
- {
- //执行分组
- PerformDistribute();
-
- return true;
- }
- case IDI_TELL_CORRESPOND: //通知协调服务器
- {
- if (m_dwCorrespondNum == 0)
- {
- m_dwCorrespondNum++;
- return true;
- }
-
- //变量定义
- CMD_CS_C_TellCorr TellCorr;
- ZeroMemory(&TellCorr, sizeof(TellCorr));
-
- //服务端口
- //CServiceUnits * pServiceUnits = CServiceUnits::g_pServiceUnits;
- TellCorr.wServerID = m_pGameServiceOption->wServerID;
-
- //发送数据
- if(m_pITCPSocketService != NULL)
- m_pITCPSocketService->SendData(MDM_CS_MANAGER_SERVICE, SUB_CS_C_TELL_CORRESPOND, &TellCorr, sizeof(TellCorr)/*, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
-
- return true;
- }
- default: break;
- }
- }
-
- //机器时器
- //if ((dwTimerID >= IDI_REBOT_MODULE_START) && (dwTimerID <= IDI_REBOT_MODULE_FINISH))
- //{
- // //时间处理
- // m_AndroidUserManager.OnEventTimerPulse(dwTimerID, wBindParam);
-
- // return true;
- //}
-
- //比赛定时器
- //if ((dwTimerID >= IDI_MATCH_MODULE_START) && (dwTimerID < IDI_MATCH_MODULE_FINISH))
- //{
- // if (m_pIMatchServiceManager != NULL) m_pIMatchServiceManager->OnEventTimer(dwTimerID, wBindParam);
- // return true;
- //}
-
- //桌子时间
- if ((dwTimerID >= IDI_TABLE_MODULE_START) && (dwTimerID <= IDI_TABLE_MODULE_FINISH))
- {
- //桌子号码
- DWORD dwTableTimerID = dwTimerID - IDI_TABLE_MODULE_START;
- WORD wTableID = (WORD)(dwTableTimerID / TIME_TABLE_MODULE_RANGE);
-
- //时间效验
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- {
- //输出信息
- TCHAR szBuffer[128] = TEXT("");
- _sntprintf(szBuffer, CountArray(szBuffer), TEXT("未找到桌号[ %d ],定时器标识[ %d ]无法正常运行."), wTableID, dwTimerID);
-
- //输出信息
- CTraceService::TraceString(szBuffer, TraceLevel_Warning);
-
- m_pITimerEngine->KillTimer(dwTimerID); ///+++ 2018-1-23 清除这个定时器
- return false;
- }
-
- //时间通知
- return pTableFrame->OnEventTimer(dwTableTimerID%TIME_TABLE_MODULE_RANGE, wBindParam);
- }
-
- return false;
- }
-
- //数据库事件
- bool CAttemperEngineSink::OnEventDataBase(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- switch (wRequestID)
- {
- case DBO_GR_LOGON_SUCCESS: //登录成功
- {
- return OnDBLogonSuccess(dwContextID, pData, wDataSize);
- }
- case DBO_GR_LOGON_FAILURE: //登录失败
- {
- return OnDBLogonFailure(dwContextID, pData, wDataSize);
- }
- case DBO_GR_GET_USER_GAMESCORE_LIST:
- {
- return OnDBGetUserGameScoreList(dwContextID, pData, wDataSize);
- }
- case DBO_GR_GET_USER_GAMESCORE_DETAIL:
- {
- return OnDBGetUserGameScoreRecordDetail(dwContextID, pData, wDataSize);
- }
- case DBO_GR_GET_USER_GAMESCORE_REPLAY_RECORD:
- {
- return OnDBGetUserGameScoreReplayRecord(dwContextID, pData, wDataSize);
- }
- case DBO_GR_GameScoreRecord_RESULT:
- {
- return OnDBO_GR_GameScoreRecord_RESULT(dwContextID, pData, wDataSize);
- }
- case SUB_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST_RESULT:
- {
- return OnDBO_GR_GameTmpScoreRankListResult(dwContextID, pData, wDataSize);
- }
- case SUB_GR_USER_GET_BEAN_RESULT:
- {
- return OnDBO_GR_GetBearn(dwContextID, pData, wDataSize);
- }
- case SUB_GR_USER_GET_VERIF_CODE://手机重复绑定查询
- {
- return OnDBO_GR_GetVerifCode(dwContextID, pData, wDataSize);
- }
- case SUB_GR_USER_CHECK_IPHONE://手机绑定
- {
- return OnDBO_GR_CheckIphone(dwContextID, pData, wDataSize);
- }
- case SUB_GR_USER_CHECK_IPHONE_QUERY://手机绑定查询应答
- {
- return OnDBO_GR_CheckIphoneQuery(dwContextID, pData, wDataSize);
- }
- case SUB_GR_USER_CHECK_NAME_QUERY: //实名查询应答
- {
- return OnDBO_GR_CheckNameQuery(dwContextID, pData, wDataSize);
- }
- case SUB_GF_LOTTERY_ADDRESS://修改地址应答
- {
- return OnDBO_GR_UpdateAddr(dwContextID, pData, wDataSize);
- }
- case DBO_GR_GAME_PARAMETER: //游戏参数
- {
- return OnDBGameParameter(dwContextID, pData, wDataSize);
- }
- //case DBO_GR_GAME_COLUMN_INFO: //列表信息
- //{
- // return OnDBGameColumnInfo(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_GAME_ANDROID_PARAMETER: //机器参数
- //{
- // return OnDBGameAndroidParameter(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_GAME_ANDROID_INFO: //机器信息
- //{
- // return OnDBGameAndroidInfo(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_GAME_PROPERTY_INFO: //道具信息
- //{
- // return OnDBGamePropertyInfo(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_GAME_MEMBER_PAREMETER: //会员参数
- //{
- // return OnDBGameMemberParameter(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_USER_INSURE_INFO: //银行信息
- //{
- // return OnDBUserInsureInfo(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_USER_INSURE_SUCCESS: //银行成功
- //{
- // return OnDBUserInsureSuccess(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_USER_INSURE_FAILURE: //银行失败
- //{
- // return OnDBUserInsureFailure(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_USER_INSURE_USER_INFO: //用户信息
- //{
- // return OnDBUserInsureUserInfo(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_USER_INSURE_ENABLE_RESULT: //开通结果
- //{
- // return OnDBUserInsureEnableResult(dwContextID, pData, wDataSize);
- //}
- case DBR_GR_USER_CHECK_BEANS_RETURN:
- {
- return OnDBR_GR_USER_ZHIJIE_BEANS_RETURN(dwContextID, pData, wDataSize);
- }
- case DBR_GR_USER_REDUCE_BEANS_RETURN://消耗元宝
- {
- return OnDBR_GR_USER_REDUCE_BEANS_RETURN(dwContextID, pData, wDataSize);
- }
- case DBR_GR_USER_LUCK_BEANS_RETURN://冻结元宝
- {
- return OnDBR_GR_USER_LOCK_BEANS_RETURN(dwContextID, pData, wDataSize);
- }
- case DBR_GR_USER_UNLUCK_BEANS_RETURN://解冻元宝
- {
- return OnDBR_GR_USER_UNLOCK_BEANS_RETURN(dwContextID, pData, wDataSize);
- }
- //case DBO_GR_PROPERTY_SUCCESS: //道具成功
- //{
- // return OnDBPropertySuccess(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_SYSTEM_MESSAGE_RESULT: //系统消息
- //{
- // return OnDBSystemMessage(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_SYSTEM_MESSAGE_FINISH: //加载完成
- //{
- // return OnDBSystemMessageFinish(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_SENSITIVE_WORDS: //加载敏感词
- //{
- // return OnDBSensitiveWords(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_TASK_LIST: //任务列表
- //{
- // return OnDBUserTaskList(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_TASK_LIST_END: //任务结束
- //{
- // return OnDBUserTaskListEnd(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_TASK_INFO: //任务信息
- //{
- // return OnDBUserTaskInfo(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_TASK_RESULT: //任务结果
- //{
- // return OnDBUserTaskResult(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_PURCHASE_RESULT: //购买结果
- //{
- // return OnDBPurchaseResult(dwContextID, pData, wDataSize);
- //}
- //case DBO_GR_EXCHANGE_RESULT: //兑换结果
- //{
- // return OnDBExChangeResult(dwContextID, pData, wDataSize);
- //}
- case DBR_GR_USER_SHRAE_AWARD_RETURN: //分享奖励钻石结果
- {
- return OnDBShareAwardResult(dwContextID, pData, wDataSize);
- }
- case DBR_GR_USER_SHRAE_INFO_RETURN: //用户分享信息
- {
- return OnDBShareInfoResult(dwContextID, pData, wDataSize);
- }
- //case DBO_GR_TOP_WIN_LIST_RESULT: ///---胜局榜
- //{
- // return OnDBTopWinList(dwContextID, pData, wDataSize);
- //}
- //case DBO_GP_EXCHANGE_CONFIG_LIST_ACK: ///+++兑换配置结果
- //{
- // return OnDBExchangeConfigList(dwContextID, pData, wDataSize);
- //}
- //case DBR_GP_RELIEF_INFO_ACK: ///+++查询破产信息结果
- //{
- // return OnDBReliefInfo(dwContextID, pData, wDataSize);
- //}
- //case DBR_GP_GET_RELIEF_INFO_ACK:
- //{
- // return OnDBGetRelief(dwContextID, pData, wDataSize);
- //}
- case DBO_GP_CHECKIN_INFO: //签到信息
- {
- return OnDBUserCheckInInfo(dwContextID, pData, wDataSize);
- }
- case DBO_GP_CHECKIN_RESULT: //签到结果
- {
- return OnDBUserCheckInResult(dwContextID, pData, wDataSize);
- }
- case DBO_GP_CHECKIN_REWARD: //签到奖品
- {
- return OnDBCheckInReward(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_LIST_ACK: //获取俱乐部列表应答
- {
- return OnDBGetClubList(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_USER_ACK: //获取俱乐部会员应答
- {
- return OnDBGetClubUser(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_USER_ACK_EX: //获取俱乐部会员应答
- {
- return OnDBGetClubUserEx(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_MESSAGE_ACK: //获取俱乐部消息应答
- {
- return OnDBGetClubMessage(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_RECORD_ACK: //获取俱乐部记录应答
- {
- return OnDBGetClubRecord(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_CREATE_ACK: //创建俱乐部应答
- {
- return OnDBCreateClub(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_UPDATE_ACK: //修改俱乐部应答
- {
- return OnDBUpdateClub(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_DELETE_ACK: //删除俱乐部应答
- {
- return OnDBDeleteClub(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_ACK: //查看俱乐部应答
- {
- return OnDBGetClub(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_JOIN_ACK: //加入俱乐部应答
- {
- return OnDBJoinClub(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_QUIT_ACK: //退出俱乐部应答
- {
- return OnDBQuitClub(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_ISAGREE_ACK: //同意俱乐部应答
- {
- return OnDBAgreeClub(dwContextID, pData, wDataSize);
- }
- //case DBR_GR_CLUB_GET_ONLINE_ACK: //获取俱乐部在线信息应答
- //{
- // return OnDBGetClubOnLine(dwContextID, pData, wDataSize);
- //}
- case DBR_GR_CLUB_GET_ONLINE_ACKEX: //获取俱乐部在线信息应答
- {
- return OnDBGetClubOnLineEx(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_NOTIFY_ACK: //获取俱乐部在线信通知
- {
- return OnDBNotifyClubUser(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_PROTOCOL_ACK: //查询协议
- {
- return OnDBGetClubProtocol(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_BLACKUSER_ACK: //特殊成员
- {
- return OnDBGetClubBlackUser(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_PROTOCOLAGREE_ACK:
- {
- return OnDBAgreeClubProtocol(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_HOSTINFO_ACK:
- {
- return OnDBGetClubHostInfo(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_AUTOTABLE_ACK:
- {
- return OnDBAutoCreateTable(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_NOTICE_ACK:
- {
- return OnDBGetClubNotice(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_RECORD_ACK_EX:
- {
- return OnDBGetClubRecordEx(dwContextID, pData, wDataSize);
- }
- case DBR_GP_GET_ROULETTE_CONFIG_ACK: ///+++加载大转盘奖品配置结果
- {
- return OnDBRouletteConfig(dwContextID, pData, wDataSize);
- }
- case DBR_GP_LOTTERY_HIS_ACK: ///+++中奖历史
- {
- return OnDBLotteryHis(dwContextID, pData, wDataSize);
- }
- case DBR_GP_LOTTERY_HIS_ACKEX: ///+++中奖历史
- {
- return OnDBLotteryHisEx(dwContextID, pData, wDataSize);
- }
- case DBR_GP_MY_ROULETTE_INFO_ACK:
- {
- return OnDBMyRouletteInfo(dwContextID, pData, wDataSize);
- }
- case DBR_GP_ROULETTE_LOTTERY_ACK:
- {
- return OnDBRouletteLottery(dwContextID, pData, wDataSize);
- }
- case DBR_GP_LOTTERY_INFO_ACK: //查询抽奖信息
- {
- return OnDBQueryLotteryInfoResult(dwContextID, pData, wDataSize);
- }
- case DBR_GP_WELFARE_INFO_ACK: //查询福利信息
- {
- return OnDBWelfareInfoResult(dwContextID, pData, wDataSize);
- }
- case DBR_GP_GET_UNTIE_AGENT_INFO_ACK:
- {
- return OnDBUserAgentInfo(dwContextID, pData, wDataSize); //用户获得代理解绑相关信息
- }
- case DBR_GP_GET_ZUANSHI_INFO_ACK:
- {
- return OnDBUserUntieAgent(dwContextID, pData, wDataSize); //用户获得解绑所需钻石数目结果
- }
- case DBR_GR_CLUB_DISSOLVEROOM_ACK:
- {
- return OnDBGetClubDissolveRoom(dwContextID, pData, wDataSize);
- }
- case DBR_GP_LOTTERY_AWARD:
- {
- return OnDBRouletteAward(dwContextID, pData, wDataSize); //手动领奖应答
- }
- case DBR_GR_CLUB_SAVE_MORE_WANFA_ACK: //修改保存俱乐部额外玩法应答
- {
- return OnDBUpdateAddClub(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_MORE_WANFA_ACK: //查看俱乐部应答
- {
- return OnDBGetAddClub(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_XIANLIAO_RECORD: //分享战绩到闲聊群里面
- {
- return OnDBFenXiangReCord(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_COUNT_PLAYGAEMS_ACK: //俱乐部统计对局数回应
- {
- return OnDBGetClubPlaygames_Ack(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_COUNT_INTEGRAL_ACK: //俱乐部统计积分数回应
- {
- return OnDBGetClubIntegral_Ack(dwContextID, pData, wDataSize);
- }
- case DBR_GR_CLUB_GET_MAKEA_SAMPLE_ACK: //俱乐部打样
- {
- return OnDBGetClubSample(dwContextID, pData, wDataSize);
- }
- case DBR_GP_GET_WENLIN_SHUFFLE_ACK: //温岭洗牌动画 获取砖石数据
- {
- return OnWlShuffleGameHandleACK(dwContextID, pData, wDataSize);
- }
- case DBR_GP_DEDUCT_RE_ZUANSHI_INFO: //温岭洗牌动画 扣钻刷新
- {
- return OnWlShuffleGameDeductHandle(pData, wDataSize);
- }
- default: break;
- }
-
- //比赛事件
- //if (wRequestID >= DBO_GR_MATCH_EVENT_START && wRequestID <= DBO_GR_MATCH_EVENT_END)
- //{
- // CTraceService::TraceString(TEXT("比赛事件 "), TraceLevel_Warning);
- // //参数效验
- // if (m_pIMatchServiceManager == NULL) return false;
-
- // //查找用户
- // tagBindParameter * pBindParameter = GetBindParameter(LOWORD(dwContextID));
- // IServerUserItem * pIServerUserItem = pBindParameter != NULL ? pBindParameter->pIServerUserItem : NULL;
-
- // return m_pIMatchServiceManager->OnEventDataBase(wRequestID, pIServerUserItem, pData, wDataSize);
- //}
-
- return false;
- }
-
- //关闭事件
- bool CAttemperEngineSink::OnEventTCPSocketShut(WORD wServiceID, BYTE cbShutReason)
- {
- //协调连接
- if (wServiceID == NETWORK_CORRESPOND)
- {
- //设置变量
- m_bCollectUser = false;
-
- //删除时间
- m_pITimerEngine->KillTimer(IDI_REPORT_SERVER_INFO);
-
- //重连判断
- if (m_bNeekCorrespond == true)
- {
- //构造提示
- TCHAR szDescribe[128] = TEXT("");
- _sntprintf(szDescribe, CountArray(szDescribe), TEXT("与协调服务器的连接关闭了,%ld 秒后将重新连接"), m_pInitParameter->m_wConnectTime);
-
- //提示消息
- CTraceService::TraceString(szDescribe, TraceLevel_Warning);
-
- //设置时间
- ASSERT(m_pITimerEngine != NULL);
- m_pITimerEngine->SetTimer(IDI_CONNECT_CORRESPOND, m_pInitParameter->m_wConnectTime * 1000L, 1, 0);
- }
-
- return true;
- }
-
- return false;
- }
-
- //连接事件
- bool CAttemperEngineSink::OnEventTCPSocketLink(WORD wServiceID, INT nErrorCode)
- {
- //协调连接
- if (wServiceID == NETWORK_CORRESPOND)
- {
- //错误判断
- if (nErrorCode != 0)
- {
- //构造提示
- TCHAR szDescribe[128] = TEXT("");
- _sntprintf(szDescribe, CountArray(szDescribe), TEXT("协调服务器连接失败 [ %ld ],%ld 秒后将重新连接"),
- nErrorCode, m_pInitParameter->m_wConnectTime);
-
- //提示消息
- CTraceService::TraceString(szDescribe, TraceLevel_Warning);
-
- //设置时间
- ASSERT(m_pITimerEngine != NULL);
- m_pITimerEngine->SetTimer(IDI_CONNECT_CORRESPOND, m_pInitParameter->m_wConnectTime * 1000L, 1, 0);
-
- return false;
- }
-
- CString csTemp;
- csTemp.Format(L"[%d]正在发送游戏房间注册信息...", m_pGameServiceOption->wServerID);
- //提示消息
- CTraceService::TraceString(csTemp, TraceLevel_Normal);
-
- //变量定义
- CMD_CS_C_RegisterServer RegisterServer;
- ZeroMemory(&RegisterServer, sizeof(RegisterServer));
-
- //服务端口
- CServiceUnits * pServiceUnits = CServiceUnits::g_pServiceUnits;
- RegisterServer.wServerPort = pServiceUnits->m_TCPNetworkEngine->GetCurrentPort();
-
- //构造数据
- RegisterServer.wKindID = m_pGameServiceOption->wKindID;
- RegisterServer.wNodeID = m_pGameServiceOption->wNodeID;
- RegisterServer.wSortID = m_pGameServiceOption->wSortID;
- RegisterServer.wServerID = m_pGameServiceOption->wServerID;
- RegisterServer.wServerKind = m_pGameServiceOption->wServerKind;
- RegisterServer.wServerType = m_pGameServiceOption->wServerType;
- RegisterServer.lCellScore = m_pGameServiceOption->lCellScore;
- RegisterServer.lEnterScore = m_pGameServiceOption->lMinEnterScore;
-
- if (CServiceUnits::g_pServiceUnits) RegisterServer.wServerLevel = CServiceUnits::g_pServiceUnits->m_InitParameter.m_ServiceLevel;
-
- RegisterServer.dwOnLineCount = m_ServerUserManager.GetUserItemCount();
- RegisterServer.dwFullCount = m_pGameServiceOption->wMaxPlayer - RESERVE_USER_COUNT;
- RegisterServer.dwFullTable = m_pGameServiceOption->wTableCount;
- RegisterServer.dwServerRule = m_pGameServiceOption->dwServerRule&SR_ALLOW_AVERT_CHEAT_MODE;
- lstrcpyn(RegisterServer.szServerName, m_pGameServiceOption->szServerName, CountArray(RegisterServer.szServerName));
- lstrcpyn(RegisterServer.szServerAddr, m_pInitParameter->m_ServiceAddress.szAddress, CountArray(RegisterServer.szServerAddr));
- RegisterServer.bService = m_Service; //是否提供服务
- //发送数据
- ASSERT(m_pITCPSocketService != NULL);
- m_pITCPSocketService->SendData(MDM_CS_REGISTER, SUB_CS_C_REGISTER_SERVER, &RegisterServer, sizeof(RegisterServer)/*, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
-
- //发送用户房间列表
- auto iter = m_UserID_2_PriTableIDGROUP.begin();
-
- while (iter != m_UserID_2_PriTableIDGROUP.end())
- {
- JN_GR_RoomListGroup jRG = iter->second;
-
- for (size_t i = 0; i < (jRG.Num > 30 ? 30 : jRG.Num); i++)
- {
- jRG.jgrDate[i].dwInsert_UpData_Del = 0;
- UpdataBodyOwnRoomToServer(&jRG.jgrDate[i], sizeof(jRG.jgrDate[i]));
- }
-
- iter++;
- }
-
-
- //设置时间
- ASSERT(m_pITimerEngine != NULL);
-
- m_dwCorrespondNum = 0;//计数归零
- m_pITimerEngine->SetTimer(IDI_REPORT_SERVER_INFO, TIME_REPORT_SERVER_INFO * 1000L, TIMES_INFINITY, 0);
- m_pITimerEngine->SetTimer(IDI_TELL_CORRESPOND, TIME_TELL_CORRESPOND * 1000L, TIMES_INFINITY, 0);
-
- return true;
- }
-
- return true;
- }
-
- //读取事件
- bool CAttemperEngineSink::OnEventTCPSocketRead(WORD wServiceID, TCP_Command Command, VOID * pData, WORD wDataSize)
- {
- //协调连接
- if (wServiceID == NETWORK_CORRESPOND)
- {
- switch (Command.wMainCmdID)
- {
- case MDM_CS_REGISTER: //注册服务
- {
- return OnTCPSocketMainRegister(Command.wSubCmdID, pData, wDataSize);
- }
- case MDM_CS_SERVICE_INFO: //服务信息
- {
- return OnTCPSocketMainServiceInfo(Command.wSubCmdID, pData, wDataSize);
- }
- case MDM_CS_USER_COLLECT: //用户汇总
- {
- return OnTCPSocketMainUserCollect(Command.wSubCmdID, pData, wDataSize);
- }
- case MDM_CS_MANAGER_SERVICE: //管理服务
- {
- return OnTCPSocketMainManagerService(Command.wSubCmdID, pData, wDataSize);
- }
- //case MDM_CS_ANDROID_SERVICE: //机器服务
- //{
- // CTraceService::TraceString(TEXT("机器服务已屏蔽 MDM_CS_ANDROID_SERVICE"), TraceLevel_Warning);
- // //return OnTCPSocketMainAndroidService(Command.wSubCmdID, pData, wDataSize);
- //}
- default: break;
- }
- }
-
- //错误断言
- ASSERT(FALSE);
-
- return true;
- }
-
- //应答事件
- bool CAttemperEngineSink::OnEventTCPNetworkBind(DWORD dwClientAddr, DWORD dwSocketID)
- {
- //变量定义
- WORD wBindIndex = LOWORD(dwSocketID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- //设置变量
- if (pBindParameter != NULL)
- {
- pBindParameter->dwSocketID = dwSocketID;
- pBindParameter->dwClientAddr = dwClientAddr;
-
- TCHAR szClientAddr[16] = TEXT("");
- BYTE * pClientAddr = (BYTE *)&pBindParameter->dwClientAddr;
- _sntprintf(szClientAddr, CountArray(szClientAddr), TEXT("%d.%d.%d.%d"), pClientAddr[0], pClientAddr[1], pClientAddr[2], pClientAddr[3]);
-
- pBindParameter->dwActiveTime = (DWORD)time(NULL);
- m_Data.iSocketNum = wBindIndex + 1;
-
- return true;
- }
-
- //错误断言
- ASSERT(FALSE);
-
- return false;
- }
-
- //关闭事件
- bool CAttemperEngineSink::OnEventTCPNetworkShut(DWORD dwClientAddr, DWORD dwActiveTime, DWORD dwSocketID)
- {
- //变量定义
- WORD wBindIndex = LOWORD(dwSocketID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
- if (pBindParameter == NULL) return false;
- m_Data.iSocketNum = wBindIndex - 1;
- //获取用户
- IServerUserItem * pIServerUserItem = pBindParameter->pIServerUserItem;
- WORD wTableID = INVALID_WORD;
- //CString csTest1;
- //csTest1.Format(_T("断线重连 UserID:%d dwSocketID:%d "), pIServerUserItem->GetUserID(), dwSocketID);
- ////提示消息
- //CTraceService::TraceString(csTest1, TraceLevel_Warning);
- try
- {
- // 此部分代码意义表明:
- // 在旁观状态,大厅状态,桌号为无效的状态下,断线将直接导致用户退出。人物信息从队列中删除。报告总服务器人物退出
- // 其余状态下,用户保留绑定信息,变更为掉线状态 tagBindParameter 人物信息队列依然存在
- // 用户处理
- if (pIServerUserItem != NULL)
- {
- //变量定义
- wTableID = pIServerUserItem->GetTableID();
-
- //断线处理
- if (wTableID != INVALID_TABLE
- && pIServerUserItem->GetUserInfo()->cbUserStatus != US_LOOKON
- && pIServerUserItem->GetUserInfo()->cbUserStatus != US_FREE
- && pIServerUserItem->GetUserInfo()->cbUserStatus != US_NULL)
- {
- //解除绑定
- pIServerUserItem->DetachBindStatus();
-
-
- /*注释原因:没桌子时不要return出去 by yd
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
-
- //TCHAR szString[512] = TEXT("");
- //_sntprintf(szString, CountArray(szString), TEXT("游戏中用户 %s(%d) 掉线。"), pIServerUserItem->GetUserInfo()->szNickName, pIServerUserItem->GetUserInfo()->dwUserID);
-
- //提示消息
- //CTraceService::TraceString(szString, TraceLevel_Normal);
-
- //断线通知
- pTableFrame->OnEventUserOffLine(pIServerUserItem);
- */
-
- auto pTableFrame = GetTableFrame(wTableID);
- if (pTableFrame != NULL)
- {
- //断线通知
- pTableFrame->OnEventUserOffLine(pIServerUserItem);
- }
- }
- else
- {
- if (pIServerUserItem->GetUserInfo()->cbUserStatus == US_LOOKON)
- {
- //清楚旁观者
- if (wTableID != INVALID_TABLE)
- {
- auto pTableFrame = GetTableFrame(wTableID);
- if (pTableFrame)
- {
- pTableFrame->PerformStandUpAction(pIServerUserItem);
- }
- }
- }
- //
- pIServerUserItem->SetUserStatus(US_NULL, INVALID_TABLE, INVALID_CHAIR);
- pIServerUserItem->DetachBindStatus(); //解除绑定的结果将导致tagBindParameter 中的人物指针不被释放 尝试解决。 by jn 2017/11/15
- }
- }
- }
- catch (...)
- {
- TCHAR szMessage[128] = TEXT("");
- _sntprintf(szMessage, CountArray(szMessage), TEXT("关闭连接异常: wTableID=%d"), wTableID);
- CTraceService::TraceString(szMessage, TraceLevel_Normal);
- }
-
- //清除信息
- ZeroMemory(pBindParameter, sizeof(tagBindParameter));
-
- return false;
- }
-
- CString CAttemperEngineSink::dwIP2csIP(DWORD dwIP)
- {
- CString strIP = _T("");
- WORD add1, add2, add3, add4;
-
- add1 = (WORD)(dwIP & 255);
- add2 = (WORD)((dwIP >> 8) & 255);
- add3 = (WORD)((dwIP >> 16) & 255);
- add4 = (WORD)((dwIP >> 24) & 255);
- strIP.Format(_T("%d.%d.%d.%d"), add1, add2, add3, add4);
-
- return strIP;
- }
-
- //读取事件
- bool CAttemperEngineSink::OnEventTCPNetworkRead(TCP_Command Command, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //记录 读取事件的日志
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIBindUserItem = GetBindUserItem(wBindIndex);
- DWORD dTableNum = 0;
- CString AppName = _T("CorrespondServer");
- CString csTest = AfxGetAppName();
- CString csSend;
- CString AppName1 = _T("中心集成服务器");
- DWORD dUserID = 0;
- if (!(Command.wSubCmdID == SUB_KN_DETECT_SOCKET && Command.wMainCmdID == MDM_KN_COMMAND)
- && !(Command.wMainCmdID == 5 && Command.wSubCmdID == 3)
- && !(Command.wMainCmdID == 2 && Command.wSubCmdID == 1 && (AppName1 == csTest || AppName == csTest)))
- {
- CString csTestT; CString csTest1 = AfxGetAppName();
- if (pIBindUserItem)
- {
- csTestT.Format(_T("%s"), dwIP2csIP(pIBindUserItem->GetClientAddr()));
- if (pIBindUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIBindUserItem->GetTableID());
-
- TCHAR szTemp[32] = { 0 };
- if (pat) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (pat != nullptr && !csTemp.IsEmpty())
- {
- dTableNum = _wtol(csTemp);
- }
- }
- }
- else
- {
- csTestT = _T("未知IP");
- }
- csSend.Format(_T("进程【%s】【接收】 <- %s 主命令码【%d】 子命令码【%d】\n\r"), csTest1, csTestT, Command.wMainCmdID, Command.wSubCmdID);
- //OutputDebugString(csSend);
-
- if (pIBindUserItem)
- {
- dUserID = pIBindUserItem->GetUserID();
- }
- Commend::ToShow(this, Command.wMainCmdID, Command.wSubCmdID, pData, wDataSize, dTableNum, pIBindUserItem == NULL ? NULL : dUserID, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString(), false);
-
- }
- //if (pIBindUserItem == NULL) { m_Data.iLJErrQ++; return true; }
- bool bRet = false;
- switch (Command.wMainCmdID)
- {
- case MDM_GR_LOGON: //登录命令
- {
- bRet = OnTCPNetworkMainLogon(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- break;
- }
- case MDM_GR_USER: //用户命令
- {
- bRet = OnTCPNetworkMainUser(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- break;
- }
- case MDM_GR_MANAGE: //管理命令
- {
- bRet = OnTCPNetworkMainManage(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- break;
- }
- case MDM_GR_CLUB: //俱乐部命令
- {
- bRet = OnTCPNetworkMainClub(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- break;
- }
- case MDM_GF_FRAME: //框架命令
- {
- bRet = OnTCPNetworkMainFrame(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- break;
- }
- case MDM_GF_GAME: //游戏命令
- {
- CTimer Start;
- bRet = OnTCPNetworkMainGame(Command.wSubCmdID, pData, wDataSize, dwSocketID);
-
- double dRet = Start.End();
- if (IsJC(6666))
- {
- CString csTest1;
- csTest1.Format(_T("游戏模块耗时 cmdid:%d ----> %.3f "), Command.wSubCmdID, dRet);
-
- //提示消息
- CTraceService::TraceString(csTest1, TraceLevel_Warning);
- }
-
- if (IsJC(5555) && dUserID != 0 && IsJC(dUserID))
- {
- CString csTest2;
-
- csTest2.Format(_T("[%d]游戏模块耗时 cmdid:%d ----> %.3f "), dUserID, Command.wSubCmdID, dRet);
-
- //提示消息
- CTraceService::TraceString(csTest2, TraceLevel_Warning);
- }
- break;
- }
- case MDM_GF_ROULETEE: ///+++大转盘
- {
- bRet = OnTCPNetworkMainRoulette(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- break;
- }
-
- //case MDM_GR_INSURE: //银行命令
- //{
- // if (pIBindUserItem == NULL) { m_Data.iLJErrQ++; return true; }
- // bRet = OnTCPNetworkMainInsure(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- //}
- //case MDM_GR_TASK: //任务命令
- //{
- // if (pIBindUserItem == NULL) { m_Data.iLJErrQ++; return true; }
- // bRet = OnTCPNetworkMainTask(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- //}
- //case MDM_GR_EXCHANGE: //兑换命令
- //{
- // CTraceService::TraceString(TEXT("兑换命令已屏蔽 OnTCPNetworkMainExchange"), TraceLevel_Warning);
- // //if (pIBindUserItem == NULL) return true;
- // //bRet = OnTCPNetworkMainExchange(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- // break;
- //}
- //case MDM_GR_VENUE: ///+++场馆命令
- //{
- // bRet = OnTCPNetworkMainVenue(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- // break;
- //}
- //case MDM_GR_MATCH: //比赛命令
- //{
- // if (pIBindUserItem == NULL) return true;
- // bRet = OnTCPNetworkMainMatch(Command.wSubCmdID, pData, wDataSize, dwSocketID);
- //}
-
- case MDM_GR_CHECK: //通道检测
- {
- if (Command.wSubCmdID != 1) return false;
- CTraceService::TraceString(TEXT("通道检测已屏蔽 MDM_GR_CHECK"), TraceLevel_Warning);
- //效验参数
- ASSERT(wDataSize == sizeof(CHECK));
- if (wDataSize != sizeof(CHECK)) return false;
-
- //m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_CHECK, 1, pData, wDataSize);
-
- return true;
- }
- default: break;
- }
-
- if (bRet)
- {
- m_Data.iQNum++;
- }
- else
- {
- m_Data.iErrQ++;
- }
- //ASSERT(bRet);
- return bRet;
- }
-
- //房间消息
- bool CAttemperEngineSink::SendRoomMessage(LPCTSTR lpszMessage, WORD wType)
- {
- //变量定义
- CMD_CM_SystemMessage SystemMessage;
- ZeroMemory(&SystemMessage, sizeof(SystemMessage));
-
- //构造数据
- SystemMessage.wType = wType;
- SystemMessage.wLength = lstrlen(lpszMessage) + 1;
- lstrcpyn(SystemMessage.szString, lpszMessage, CountArray(SystemMessage.szString));
-
- //数据属性
- WORD wHeadSize = sizeof(SystemMessage) - sizeof(SystemMessage.szString);
- WORD wSendSize = wHeadSize + CountStringBuffer(SystemMessage.szString);
-
- CString csSend;
- CString csTest = AfxGetAppName();
-
- csSend.Format(_T("进程【%s】【群发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_CM_SYSTEM, SUB_CM_SYSTEM_MESSAGE);
- //OutputDebugString(csSend);
- Commend::ToShow(this, MDM_CM_SYSTEM, SUB_CM_SYSTEM_MESSAGE, &SystemMessage, wSendSize, 0, 0, m_pIGameServiceManager->GetDataString());
-
- //发送数据
- //m_AndroidUserManager.SendDataToClient(MDM_CM_SYSTEM, SUB_CM_SYSTEM_MESSAGE, &SystemMessage, wSendSize);
- m_pITCPNetworkEngine->SendDataBatch(MDM_CM_SYSTEM, SUB_CM_SYSTEM_MESSAGE, &SystemMessage, wSendSize, BG_COMPUTER);
-
- return true;
- }
-
- //游戏消息
- bool CAttemperEngineSink::SendGameMessage(LPCTSTR lpszMessage, WORD wType)
- {
- //变量定义
- CMD_CM_SystemMessage SystemMessage;
- ZeroMemory(&SystemMessage, sizeof(SystemMessage));
-
- //构造数据
- SystemMessage.wType = wType;
- SystemMessage.wLength = lstrlen(lpszMessage) + 1;
- lstrcpyn(SystemMessage.szString, lpszMessage, CountArray(SystemMessage.szString));
-
- //数据属性
- WORD wHeadSize = sizeof(SystemMessage) - sizeof(SystemMessage.szString);
- WORD wSendSize = wHeadSize + CountStringBuffer(SystemMessage.szString);
-
- CString csSend;
- CString csTest = AfxGetAppName();
-
- csSend.Format(_T("进程【%s】【群发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE);
- //OutputDebugString(csSend);
- Commend::ToShow(this, MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE, &SystemMessage, wSendSize, 0, 0, m_pIGameServiceManager->GetDataString());
- GameInfo::PB_CS_S_SystemMessage Message;
- Message.set_wtype(SystemMessage.wType);
- Message.set_wlength(SystemMessage.wLength);
- std::string szString = CW2AEX<1024>(SystemMessage.szString, CP_UTF8).m_psz;
- Message.set_szstring(szString);
- //发送数据
- std::string pbdata = Message.SerializePartialAsString();
- //发送数据
- //m_AndroidUserManager.SendDataToClient(MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE,(void*)pbdata.c_str(), pbdata.length());
- m_pITCPNetworkEngine->SendDataBatch(MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE, (void*)pbdata.c_str(), pbdata.length(), BG_COMPUTER);
-
- return true;
- }
-
- //房间消息
- bool CAttemperEngineSink::SendRoomMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wType)
- {
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //发送数据
- if (pIServerUserItem->GetBindIndex() != INVALID_WORD)
- {
- //变量定义
- CMD_CM_SystemMessage SystemMessage;
- ZeroMemory(&SystemMessage, sizeof(SystemMessage));
-
- //构造数据
- SystemMessage.wType = wType;
- SystemMessage.wLength = lstrlen(lpszMessage) + 1;
- lstrcpyn(SystemMessage.szString, lpszMessage, CountArray(SystemMessage.szString));
-
-
- //数据属性
- WORD wHeadSize = sizeof(SystemMessage) - sizeof(SystemMessage.szString);
- WORD wSendSize = wHeadSize + CountStringBuffer(SystemMessage.szString);
-
- //常规用户
- if (pIServerUserItem == NULL) return false;
- WORD wBindIndex = pIServerUserItem->GetBindIndex();
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
- if (pBindParameter == NULL) return false;
-
- GameInfo::PB_CS_S_SystemMessage Message;
- Message.set_wtype(SystemMessage.wType);
- Message.set_wlength(SystemMessage.wLength);
- std::string szString = CW2AEX<1024>(SystemMessage.szString, CP_UTF8).m_psz;
- Message.set_szstring(szString);
- //发送数据
- std::string pbdata = Message.SerializePartialAsString();
- if (pBindParameter->dwSocketID != 0) m_pITCPNetworkEngine->SendData(pBindParameter->dwSocketID, MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- return false;
- }
-
- //游戏消息
- bool CAttemperEngineSink::SendGameMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wType)
- {
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //发送数据
- if ((pIServerUserItem->GetBindIndex() != INVALID_WORD) && (pIServerUserItem->IsClientReady() == true))
- {
- //变量定义
- CMD_CM_SystemMessage SystemMessage;
- ZeroMemory(&SystemMessage, sizeof(SystemMessage));
-
- //构造数据
- SystemMessage.wType = wType;
- SystemMessage.wLength = lstrlen(lpszMessage) + 1;
- lstrcpyn(SystemMessage.szString, lpszMessage, CountArray(SystemMessage.szString));
-
- //变量定义
- //WORD dwUserIndex = pIServerUserItem->GetBindIndex();
- //tagBindParameter * pBindParameter = GetBindParameter(dwUserIndex);
-
- //数据属性
- WORD wHeadSize = sizeof(SystemMessage) - sizeof(SystemMessage.szString);
- WORD wSendSize = wHeadSize + CountStringBuffer(SystemMessage.szString);
-
- //发送数据
- if (pIServerUserItem->IsAndroidUser() == true)
- {
- //机器用户
- const WORD wBindIndex = pIServerUserItem->GetBindIndex();
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
- GameInfo::PB_CS_S_SystemMessage Message;
- Message.set_wtype(SystemMessage.wType);
- Message.set_wlength(SystemMessage.wLength);
- std::string szString = CW2AEX<1024>(SystemMessage.szString, CP_UTF8).m_psz;
- Message.set_szstring(szString);
- //发送数据
- std::string pbdata = Message.SerializePartialAsString();
- //m_AndroidUserManager.SendDataToClient(pBindParameter->dwSocketID, MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE, (void*)pbdata.c_str(), pbdata.length());
-
- //关闭处理
- //if ((wType&(SMT_CLOSE_ROOM | SMT_CLOSE_LINK)) != 0) m_AndroidUserManager.DeleteAndroidUserItem(pBindParameter->dwSocketID, true);
- }
- else
- {
- //常规用户
- WORD wBindIndex = pIServerUserItem->GetBindIndex();
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
- IServerUserItem * pIBindUserItem = GetBindUserItem(wBindIndex);
- DWORD dTableNum = 0;
- if (pIBindUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIBindUserItem->GetTableID());
-
- TCHAR szTemp[32] = { 0 };
- if (pat) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
-
- if (pat != nullptr && !csTemp.IsEmpty())
- {
- dTableNum = _wtol(csTemp);
- }
- }
-
- CString csSend;
- CString csTest = AfxGetAppName();
-
- csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE);
- //OutputDebugString(csSend);
- Commend::ToShow(this, MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE, &SystemMessage, wSendSize, dTableNum, pIBindUserItem == NULL ? NULL : pIBindUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- GameInfo::PB_CS_S_SystemMessage Message;
- Message.set_wtype(SystemMessage.wType);
- Message.set_wlength(SystemMessage.wLength);
- std::string szString = CW2AEX<1024>(SystemMessage.szString, CP_UTF8).m_psz;
- Message.set_szstring(szString);
- //发送数据
- std::string pbdata = Message.SerializePartialAsString();
- m_pITCPNetworkEngine->SendData(pBindParameter->dwSocketID, MDM_GF_FRAME, SUB_GF_SYSTEM_MESSAGE, (void*)pbdata.c_str(), pbdata.length());
- }
-
- return true;
- }
-
- return false;
- }
-
- //同步事件
- bool CAttemperEngineSink::OnTongBu(int Command, DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- switch (Command)
- {
- case DBO_GR_GAME_JC://监测
- {
- if (wDataSize == 0)
- {
- ZeroMemory(&m_JC, sizeof(m_JC));
- }
- else
- {
- ST_JCDATA * p = (ST_JCDATA *)pData;
-
- m_JC = *p;
- }
-
- return true;
- }
- case TB_LOGINOK://登录成功
- {
- return OnDBLogonSuccessSend(dwContextID, pData, wDataSize);
- }
- case TB_GR_UPDATA://刷新元宝
- {
- return OnDBO_GR_GetBearnSEND(dwContextID, pData, wDataSize);
- }
- case TB_GR_ZJXF://直接扣除元宝
- {
- return OnDBR_GR_USER_ZHIJIE_BEANS_RETURNSEND(dwContextID, pData, wDataSize);
- }
- case TB_GR_XF://从冻结中扣除元宝
- {
- return OnDBR_GR_USER_REDUCE_BEANS_RETURNSEND(dwContextID, pData, wDataSize);
- }
- case TB_GR_UNLOCK://解冻元宝
- {
- return OnDBR_GR_USER_UNLOCK_BEANS_RETURNSEND(dwContextID, pData, wDataSize);
- }
- case TB_GR_LOCK://锁定元宝
- {
- return OnDBR_GR_USER_LOCK_BEANS_RETURNSEND(dwContextID, pData, wDataSize);
- }
- case DBO_GR_GAME_GG://发布公告
- {
- ASSERT(pData != NULL);
- if (pData == NULL) return true;
-
- ASSERT(wDataSize == sizeof(CMD_GR_SendMessage));
- if (wDataSize != sizeof(CMD_GR_SendMessage)) return true;
-
- return OnTCPNetworkSubSendMessage(pData, wDataSize);
- }
- case DBO_GR_STOP_GG://停止公告
- {
- RemoveSystemMessage();//清楚公告数据
- return true;
- }
- case DBO_GR_GAME_CJ://本节点创建房间状态改变
- {
- int *p = (int*) pData;
-
- if (*p == 1)
- {
- //允许创建
- m_BCreate = TRUE;
- }
- else
- {
- //不允许创建
- m_BCreate = FALSE;
- }
- return true;
- }
- case DBO_GR_GAME_HUA_CREATE://创建花牌房间得状态改变
- {
- int *p = (int*)pData;
-
- if (*p == 1)
- {
- //允许创建
- m_BCreate_Hua = TRUE;
- }
- else
- {
- //不允许创建
- m_BCreate_Hua = FALSE;
- }
- return true;
- }
- case DBO_GR_GAME_JR://本节点加入房间控制状态改变
- {
- int *p = (int*)pData;
-
- if (*p == 1)
- {
- //允许创建
- m_BAddCreate = TRUE;
- }
- else
- {
- //不允许创建
- m_BAddCreate = FALSE;
- }
- return true;
- }
- case DBO_GR_GAME_JSFREEALL://本节点解散所有空闲房间
- {
- loop1:
- for (auto iter = m_TableFrameArray.begin(); iter != m_TableFrameArray.end(); iter++)
- {
- if (iter->second != nullptr)
- {
- auto pTableFrame = iter->second;
-
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
-
- if (!csTemp.IsEmpty())
- {
- //解散 删除流程
- if (pTableFrame->SetTableFree())
- {
- goto loop1;
- }
- }
- }
- }
- return true;
- }
- case DBO_GR_GAME_WORK://当前节点是否提供服务
- {
- JN_GR_SERVICESTAT aa;
-
- ZeroMemory(&aa, sizeof(aa));
- aa.dwServerID = m_pGameServiceOption->wServerID;
- int *pRoomID = (int*)pData;
- aa.bService = *pRoomID;
- m_Service = aa.bService;
-
- UpdataServerStata(&aa, sizeof(JN_GR_SERVICESTAT));
- return true;
- }
- case DBO_GR_GAME_JSGAMEALL://本节点解散所有游戏中房间
- {
- OnTCPNetworkSubKickAllUser();
- return true;
- }
- case DBO_GR_GAME_JSROOM://本节点解散指定房间
- {
- int *pRoomID = (int*)pData;
- CString csTest;
-
- csTest.Format(L"%d", *pRoomID);
-
- for (auto iter = m_TableFrameArray.begin(); iter != m_TableFrameArray.end(); iter++)
- {
- if (iter->second != nullptr)
- {
- auto pTableFrame = iter->second;
-
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (!csTemp.IsEmpty() && csTemp == csTest)
- {
- if (pTableFrame->GetStartCount() == 0)
- {
- pTableFrame->SetTableFree();
- }
- else
- {
- pTableFrame->DismissGame();
- }
- break;
- }
- }
- }
- return true;
- }
- case DBO_GR_GAME_FIND: //查询房间信息
- {
- int *pRoomID = (int*)pData;
- CString csTest;
- CGameServerDlg*p = (CGameServerDlg*)theApp.m_pMainWnd;
-
- p->game1.SetWindowText(_T("等待数据中..."));
- p->game2.SetWindowText(_T("等待数据中..."));
- p->game3.SetWindowText(_T("等待数据中..."));
- p->game4.SetWindowText(_T("等待数据中..."));
- p->game5.SetWindowText(_T("等待数据中..."));
- p->game6.SetWindowText(_T("等待数据中..."));
- p->game7.SetWindowText(_T("等待数据中..."));
- p->game8.SetWindowText(_T("等待数据中..."));
-
- csTest.Format(L"%d", *pRoomID);
-
- for (auto iter = m_TableFrameArray.begin(); iter != m_TableFrameArray.end(); iter++)
- {
- if (iter->second != nullptr)
- {
- auto pTableFrame = iter->second;
-
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (csTemp != _T("") && csTemp == csTest)
- {
- CString csTestT;
- csTestT.Format(_T("%s"), pTableFrame->IsGameStarted() ? _T("已开始"):_T("未开始"));
- p->game1.SetWindowText(csTestT);//游戏状态
-
- IServerUserItem * pITargerUserItem = m_ServerUserManager.SearchUserItem(pTableFrame->GetPrivateTableOwnerID());
- csTestT.Format(_T("%s(%d)"), pITargerUserItem == NULL ? _T("未找到昵称") :pITargerUserItem->GetNickName(), pTableFrame->GetPrivateTableOwnerID());
- p->game2.SetWindowText(csTestT);//游戏状态
-
- csTestT.Format(_T("%d"), pTableFrame->GetGameConfig().wPlayRule);
- p->game3.SetWindowText(csTestT);//游戏状态
-
- csTestT.Format(_T("%d"), pTableFrame->GetDrawCount());
- p->game4.SetWindowText(csTestT);//游戏状态
-
- pITargerUserItem = pTableFrame->GetTableUserItem(0);
- csTestT.Format(_T("%s(%d) 状态%d"), pITargerUserItem == NULL ? _T("没人") : pITargerUserItem->GetNickName()
- , pITargerUserItem == NULL ? 0 : pITargerUserItem->GetUserID()
- , pITargerUserItem == NULL ? 0 : pITargerUserItem->GetUserInfo()->cbUserStatus);
- p->game5.SetWindowText(csTestT);//游戏状态
-
- pITargerUserItem = pTableFrame->GetTableUserItem(1);
- csTestT.Format(_T("%s(%d) 状态%d"), pITargerUserItem == NULL ? _T("没人") : pITargerUserItem->GetNickName()
- , pITargerUserItem == NULL ? 0 : pITargerUserItem->GetUserID()
- , pITargerUserItem == NULL ? 0 : pITargerUserItem->GetUserInfo()->cbUserStatus);
- p->game6.SetWindowText(csTestT);//游戏状态
-
- pITargerUserItem = pTableFrame->GetTableUserItem(2);
- csTestT.Format(_T("%s(%d) 状态%d"), pITargerUserItem == NULL ? _T("没人") : pITargerUserItem->GetNickName()
- , pITargerUserItem == NULL ? 0 : pITargerUserItem->GetUserID()
- , pITargerUserItem == NULL ? 0 : pITargerUserItem->GetUserInfo()->cbUserStatus);
- p->game7.SetWindowText(csTestT);//游戏状态
-
- pITargerUserItem = pTableFrame->GetTableUserItem(3);
- csTestT.Format(_T("%s(%d) 状态%d"), pITargerUserItem == NULL ? _T("没人") : pITargerUserItem->GetNickName()
- , pITargerUserItem == NULL ? 0 : pITargerUserItem->GetUserID()
- , pITargerUserItem == NULL ? 0 : pITargerUserItem->GetUserInfo()->cbUserStatus);
- p->game8.SetWindowText(csTestT);//游戏状态
- break;
- }
- }
- }
- return true;
- }
- case DBO_GR_SHUTDOWN_USER://强行断线指定用户
- {
- DWORD *pUserID = (DWORD*)pData;
-
- WORD wEnumIndex = 0;
- IServerUserItem * pITargerUserItem = m_ServerUserManager.EnumUserItem(wEnumIndex++);
- while (pITargerUserItem != NULL)
- {
- if (pITargerUserItem->GetUserID() == *pUserID)
- {
- WORD dwUserIndex = pITargerUserItem->GetBindIndex();
- tagBindParameter * pBindParameter = GetBindParameter(dwUserIndex);
-
- if (pBindParameter)
- {
- m_pITCPNetworkEngine->CloseSocket(pBindParameter->dwSocketID);
- }
- break;
- }
- //枚举用户
- pITargerUserItem = m_ServerUserManager.EnumUserItem(wEnumIndex++);
- }
- return true;
- }
- case DBO_GR_UPTONGDAO://更新通道
- {
- UpDataTongDao();
- return true;
- }
- case DBO_GR_CLEAR://定时清空
- {
- //清除
- m_MapUserIDJuli.RemoveAll();
- m_UserID_2_PriTableIDGROUP.clear();
- return true;
- }
- case DBO_GR_UPTONGDAOACK://更新通道处理完成
- {
- ASSERT(wDataSize == sizeof(LianLuGroup));
- if (wDataSize != sizeof(LianLuGroup)) return true;
-
- LianLuGroup *pGroup = static_cast<LianLuGroup*>(pData);
-
- //枚举数据
- POSITION Position = nullptr;
-
- //枚举数据
- for (DWORD i = 0; i < m_ServerListManager.GetGameServerCount(); i++)
- {
- //获取数据
- CGameServerItem * pGameServerItem = m_ServerListManager.EmunGameServerItem(Position);
- if (pGameServerItem == NULL) continue;
-
- std::wstring cc = pGameServerItem->m_GameServer.szServerAddr;
- std::wstring dd = pGroup->szAdminIP;
-
- if (cc == dd)
- {
- for (int j = 0; j < MAX_TONGDAO; j++)
- {
- std::wstring ip = pGroup->Data[j].szIP;
-
- if (ip == _T("")) continue;
-
- pGameServerItem->SetLLStat(pGroup->Data[j].szIP, pGroup->Data[j].iIsOk, pGroup->Data[j].SystemTimeConclude);
-
- //CString szString;
- //szString.Format(L"通道更新->管理IP %s 通道IP %s 状态 %d", dd, pGroup->Data[i].szIP, pGroup->Data[i].iIsOk);
-
- //提示消息
- //CTraceService::TraceString(szString, TraceLevel_Normal);
- }
- }
- }
-
- return true;
- }
- default:
- break;
- }
- return true;
- }
-
- //房间消息
- bool CAttemperEngineSink::SendRoomMessage(DWORD dwSocketID, LPCTSTR lpszMessage, WORD wType, bool bAndroid)
- {
- //变量定义
- CMD_CM_SystemMessage SystemMessage;
- ZeroMemory(&SystemMessage, sizeof(SystemMessage));
-
- //构造数据
- SystemMessage.wType = wType;
- SystemMessage.wLength = lstrlen(lpszMessage) + 1;
- lstrcpyn(SystemMessage.szString, lpszMessage, CountArray(SystemMessage.szString));
-
- //数据属性
- WORD wHeadSize = sizeof(SystemMessage) - sizeof(SystemMessage.szString);
- WORD wSendSize = wHeadSize + CountStringBuffer(SystemMessage.szString);
-
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIBindUserItem = GetBindUserItem(wBindIndex);
-
- DWORD dTableNum = 0;
- if (pIBindUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIBindUserItem->GetTableID());
-
- TCHAR szTemp[32] = { 0 };
- if (pat) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (pat != nullptr && !csTemp.IsEmpty())
- {
- dTableNum = _wtol(csTemp);
- }
- }
-
- //发送数据
- if (bAndroid)
- {
- //机器用户
- //m_AndroidUserManager.SendDataToClient(dwSocketID, MDM_CM_SYSTEM, SUB_CM_SYSTEM_MESSAGE, &SystemMessage, wSendSize);
- }
- else
- {
- CString csSend;
- CString csTest = AfxGetAppName();
-
- csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_CM_SYSTEM, SUB_CM_SYSTEM_MESSAGE);
- //OutputDebugString(csSend);
-
- Commend::ToShow(this, MDM_CM_SYSTEM, SUB_CM_SYSTEM_MESSAGE, &SystemMessage, wSendSize, dTableNum, pIBindUserItem == NULL ? NULL : pIBindUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
-
- //常规用户
- m_pITCPNetworkEngine->SendData(dwSocketID, MDM_CM_SYSTEM, SUB_CM_SYSTEM_MESSAGE, &SystemMessage, wSendSize);
- }
-
- return true;
- }
-
- //发送数据
- bool CAttemperEngineSink::SendData(BYTE cbSendMask, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
-
- //机器数据
- //if ((cbSendMask&BG_COMPUTER) != 0)
- //{
- // m_AndroidUserManager.SendDataToClient(wMainCmdID, wSubCmdID, pData, wDataSize);
- //}
-
- CString csSend;
- CString csTest = AfxGetAppName();
-
- csSend.Format(_T("进程【%s】【群发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), wMainCmdID, wSubCmdID);
- //OutputDebugString(csSend);
- Commend::ToShow(this, wMainCmdID, wSubCmdID, pData, wDataSize, 0, 0, m_pIGameServiceManager->GetDataString());
-
- //用户数据
- if (cbSendMask == BG_ALL_CLIENT)
- {
- m_pITCPNetworkEngine->SendDataBatch(wMainCmdID, wSubCmdID, pData, wDataSize, BG_MOBILE);
- //m_pITCPNetworkEngine->SendDataBatch(wMainCmdID, wSubCmdID, pData, wDataSize, BG_COMPUTER, 0, m_pIGameServiceManager->GetDataString());
- }
- else
- {
- m_pITCPNetworkEngine->SendDataBatch(wMainCmdID, wSubCmdID, pData, wDataSize, cbSendMask);
- }
-
- return true;
- }
-
- //发送数据
- bool CAttemperEngineSink::SendData(DWORD dwSocketID, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
- //发送数据
- if (LOWORD(dwSocketID) != INVALID_WORD)
- {
- if (LOWORD(dwSocketID) >= INDEX_ANDROID)
- {
- //机器用户
- //m_AndroidUserManager.SendDataToClient(dwSocketID, wMainCmdID, wSubCmdID, pData, wDataSize);
- }
- else
- {
- try
- {
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIBindUserItem = GetBindUserItem(wBindIndex);
-
- DWORD dTableNum = 0;
- if (pIBindUserItem && pIBindUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIBindUserItem->GetTableID());
-
- TCHAR szTemp[32] = { 0 };
- if (pat) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (pat != nullptr && !csTemp.IsEmpty())
- {
- dTableNum = _wtol(csTemp);
- }
- }
-
- CString csSend;
- CString csTest = AfxGetAppName();
-
- csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), wMainCmdID, wSubCmdID);
- //OutputDebugString(csSend);
-
- Commend::ToShow(this, wMainCmdID, wSubCmdID, pData, wDataSize, dTableNum, pIBindUserItem == NULL ? NULL : pIBindUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- }
- catch (...)
- {
-
- }
- //网络用户
- m_pITCPNetworkEngine->SendData(dwSocketID, wMainCmdID, wSubCmdID, pData, wDataSize);
- }
- }
-
- return true;
- }
-
- //发送数据
- bool CAttemperEngineSink::SendData(IServerUserItem * pIServerUserItem, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //发送数据
- if (pIServerUserItem->GetBindIndex() != INVALID_WORD)
- {
- if (pIServerUserItem->IsAndroidUser() == true)
- {
- //机器用户
- WORD wBindIndex = pIServerUserItem->GetBindIndex();
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
- //m_AndroidUserManager.SendDataToClient(pBindParameter->dwSocketID, wMainCmdID, wSubCmdID, pData, wDataSize);
- }
- else
- {
- //常规用户
- WORD wBindIndex = pIServerUserItem->GetBindIndex();
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
- DWORD dTableNum = 0;
- if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIServerUserItem->GetTableID());
-
- TCHAR szTemp[32] = { 0 };
- if (pat) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (pat != nullptr && !csTemp.IsEmpty())
- {
- dTableNum = _wtol(csTemp);
- }
- }
-
- CString csSend;
- CString csTest = AfxGetAppName();
-
- csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), wMainCmdID, wSubCmdID);
- //OutputDebugString(csSend);
- //CTraceService::TraceString(csSend, TraceLevel_Normal);
- Commend::ToShow(this, wMainCmdID, wSubCmdID, pData, wDataSize, dTableNum, pIServerUserItem == NULL ? NULL : pIServerUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
-
- m_pITCPNetworkEngine->SendData(pBindParameter->dwSocketID, wMainCmdID, wSubCmdID, pData, wDataSize);
- }
-
- return true;
- }
-
- return false;
- }
-
-
- //群发数据
- bool CAttemperEngineSink::SendDataBatchToMobileUser(WORD wCmdTable, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pUserItem)
- {
-
- //枚举用户
- WORD wEnumIndex = 0;
- while (wEnumIndex < m_ServerUserManager.GetUserItemCount())
- {
- //过滤用户
- IServerUserItem *pIServerUserItem = m_ServerUserManager.EnumUserItem(wEnumIndex++);
- if (pIServerUserItem == NULL) continue;
- if (!pIServerUserItem->IsMobileUser()) continue;
- //if (pUserItem == pIServerUserItem) continue;//不再发给自己
-
- if (MDM_GR_USER == wMainCmdID && SUB_GR_USER_STATUS == wSubCmdID)
- {
- //状态变化
- CMD_GR_UserStatus *pUserStatus = (CMD_GR_UserStatus *)pData;
-
- if (pUserStatus->UserStatus.cbUserStatus == US_LOOKON)
- {
- if (pUserItem != pIServerUserItem) continue;//不再给别人
- }
- }
-
- //定义变量
- WORD wMobileUserRule = pIServerUserItem->GetMobileUserRule();
- WORD wTagerTableID = pIServerUserItem->GetTableID();
- bool bViewModeAll = ((wMobileUserRule&VIEW_MODE_ALL) != 0);
- bool bRecviceGameChat = ((wMobileUserRule&RECVICE_GAME_CHAT) != 0);
- bool bRecviceRoomChat = ((wMobileUserRule&RECVICE_ROOM_CHAT) != 0);
- bool bRecviceRoomWhisper = ((wMobileUserRule&RECVICE_ROOM_WHISPER) != 0);
-
- //状态过滤
- if ((pIServerUserItem->GetUserStatus() >= US_SIT) && (m_pGameServiceOption->wServerType != GAME_GENRE_MATCH))
- {
- //如果玩家在房间里,则只广播给房间中的玩家
- if (wTagerTableID != wCmdTable)
- {
- continue;
- }
- }
-
- //聊天过滤
- if (wSubCmdID == SUB_GR_USER_CHAT || wSubCmdID == SUB_GR_USER_EXPRESSION)
- {
- if (!bRecviceGameChat || !bRecviceRoomChat) continue; //如果玩家设置了不接受聊天消息,则不发送给他
- }
- if (wSubCmdID == SUB_GR_WISPER_CHAT || wSubCmdID == SUB_GR_WISPER_EXPRESSION)
- {
- if (!bRecviceRoomWhisper) continue; //如果玩家设置了不接受私聊消息,则不发送给他
- }
-
- if ((pIServerUserItem->GetUserStatus() == US_FREE))
- {
- if (wTagerTableID == INVALID_TABLE)
- {
- //如果玩家大厅,广播给自己。
- if (pUserItem != pIServerUserItem) continue;
- }
- else
- {
- if (wTagerTableID != wCmdTable) continue;
- }
- }
-
- //部分可视
- if (!bViewModeAll)
- {
- //消息过滤
- if (wSubCmdID == SUB_GR_USER_ENTER && wCmdTable == INVALID_TABLE) continue;
- if (wSubCmdID == SUB_GR_USER_SCORE && pIServerUserItem->GetUserStatus() < US_SIT) continue;
-
- ////定义变量
- //WORD wTagerDeskPos = pIServerUserItem->GetMobileUserDeskPos();
- //WORD wTagerDeskCount = pIServerUserItem->GetMobileUserDeskCount();
-
- //状态消息过滤 取消分页过滤
- //if (wCmdTable < wTagerDeskPos) continue;
- //if (wCmdTable > (wTagerDeskPos + wTagerDeskCount - 1)) continue;
- }
-
- CMD_GR_UserStatus* UserStatus = (CMD_GR_UserStatus*)pData;
- UserInfo::PB_CS_S_UserStatus Status;
- Status.set_dwuserid(UserStatus->dwUserID);
- Status.mutable_userstatus()->set_cbuserstatus(UserStatus->UserStatus.cbUserStatus);
- Status.mutable_userstatus()->set_wchairid(UserStatus->UserStatus.wChairID);
- Status.mutable_userstatus()->set_wtableid(UserStatus->UserStatus.wTableID);
- //发送数据
- std::string pbdata = Status.SerializePartialAsString();
-
- SendData(pIServerUserItem, wMainCmdID, wSubCmdID, (void*)pbdata.c_str(), pbdata.length());
- }
-
- return true;
- }
-
- //用户积分
- bool CAttemperEngineSink::OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason)
- {
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //变量定义
- /*CMD_GR_UserScore UserScore;
- tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
-
- //构造积分
- UserScore.UserScore.lScore = pUserInfo->lScore;
- UserScore.UserScore.lScore += pIServerUserItem->GetTrusteeScore();
- UserScore.UserScore.lScore += pIServerUserItem->GetFrozenedScore();
-
- //发送数据
- SendData(BG_COMPUTER, MDM_GR_USER, SUB_GR_USER_SCORE, &UserScore, sizeof(UserScore));
-
- //变量定义
- CMD_GR_MobileUserScore MobileUserScore;
-
- //构造数据
- MobileUserScore.dwUserID = pUserInfo->dwUserID;
-
- //构造积分
- MobileUserScore.UserScore.lScore = pUserInfo->lScore;
- MobileUserScore.UserScore.lScore += pIServerUserItem->GetTrusteeScore();
- MobileUserScore.UserScore.lScore += pIServerUserItem->GetFrozenedScore();
-
- //发送数据
- SendDataBatchToMobileUser(pIServerUserItem->GetTableID(), MDM_GR_USER, SUB_GR_USER_SCORE, &MobileUserScore, sizeof(MobileUserScore));
- */
- //即时写分
- if ((CServerRule::IsImmediateWriteScore(m_pGameServiceOption->dwServerRule) == true) && (pIServerUserItem->IsVariation() == true))
- {
- //变量定义
- DBR_GR_WriteGameScore WriteGameScore;
- ZeroMemory(&WriteGameScore, sizeof(WriteGameScore));
-
- //用户信息
- WriteGameScore.dwUserID = pIServerUserItem->GetUserID();
- WriteGameScore.dwDBQuestID = pIServerUserItem->GetDBQuestID();
- WriteGameScore.dwClientAddr = pIServerUserItem->GetClientAddr();
- WriteGameScore.dwInoutIndex = pIServerUserItem->GetInoutIndex();
-
- //提取积分
- pIServerUserItem->DistillVariation(WriteGameScore.VariationInfo);
-
- //调整分数
- if (pIServerUserItem->IsAndroidUser() == true)
- {
- WriteGameScore.VariationInfo.lScore = 0;
- WriteGameScore.VariationInfo.lGrade = 0;
- WriteGameScore.VariationInfo.lInsure = 0;
- }
-
- //查找任务
- //tagUserTaskEntry * pUserTaskEntry = m_UserTaskManager.GetUserTaskEntry(pIServerUserItem->GetUserID(), TASK_STATUS_UNFINISH);
- //if (pUserTaskEntry != NULL) WriteGameScore.bTaskForward = true;
-
- //投递请求
- m_pIDBCorrespondManager->PostDataBaseRequest(WriteGameScore.dwUserID, DBR_GR_WRITE_GAME_SCORE, 0L, &WriteGameScore, sizeof(WriteGameScore), TRUE);
-
- //推进任务
- //if (pUserTaskEntry != NULL)
- //{
- // PerformTaskProgress(pIServerUserItem, pUserTaskEntry, WriteGameScore.VariationInfo.dwWinCount, WriteGameScore.VariationInfo.dwLostCount, WriteGameScore.VariationInfo.dwDrawCount);
- //}
- }
-
- //通知桌子
- auto wTableID = pIServerUserItem->GetTableID();
- if (wTableID != INVALID_TABLE)
- {
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
- pTableFrame->OnUserScroeNotify(pIServerUserItem->GetChairID(), pIServerUserItem, cbReason);
- }
-
- return true;
- }
-
- //用户状态
- bool CAttemperEngineSink::OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID, WORD wOldChairID, bool bSendState)
- {
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //变量定义
- CMD_GR_UserStatus UserStatus;
- ZeroMemory(&UserStatus, sizeof(UserStatus));
-
- //构造数据
- UserStatus.dwUserID = pIServerUserItem->GetUserID();
- UserStatus.UserStatus.wTableID = pIServerUserItem->GetTableID();
- UserStatus.UserStatus.wChairID = pIServerUserItem->GetChairID();
- UserStatus.UserStatus.cbUserStatus = pIServerUserItem->GetUserStatus();
-
- //修改信息
- if (pIServerUserItem->GetUserStatus() == US_SIT && pIServerUserItem->IsMobileUser())
- {
- //定义变量
- WORD wTagerDeskPos = pIServerUserItem->GetMobileUserDeskPos();
- WORD wTagerDeskCount = pIServerUserItem->GetMobileUserDeskCount();
-
- if (pIServerUserItem->GetTableID() > (wTagerDeskPos + wTagerDeskCount - 1))
- {
- //定义变量
- WORD wNewDeskPos = (pIServerUserItem->GetTableID() / wTagerDeskCount)*wTagerDeskCount;
- //修改信息
- pIServerUserItem->SetMobileUserDeskPos(wNewDeskPos);
- }
- }
- if (!bSendState)
- {
- if (pIServerUserItem->GetUserStatus() == US_SIT
- || pIServerUserItem->GetUserStatus() == US_READY
- || pIServerUserItem->GetUserStatus() == US_PLAYING
- || pIServerUserItem->GetUserStatus() == US_LOOKON
- || pIServerUserItem->GetUserStatus() == US_PLAYINGWAIT)
- {
- SendDataBatchToMobileUser(pIServerUserItem->GetTableID(), MDM_GR_USER, SUB_GR_USER_STATUS, &UserStatus, sizeof(UserStatus), pIServerUserItem);
-
- if (UserStatus.UserStatus.cbUserStatus == US_SIT)
- {
- //是坐下,推送当前用户的用户信息。
- if (UserStatus.UserStatus.wChairID != INVALID_CHAIR)
- {
- //变量定义
- tagMobileUserInfoHead pUserInfoHead;
- tagUserInfo *pUserInfo = pIServerUserItem->GetUserInfo();
-
- //用户属性
- pUserInfoHead.wFaceID = pUserInfo->wFaceID;
- pUserInfoHead.dwGameID = pUserInfo->dwGameID;
- pUserInfoHead.dwUserID = pUserInfo->dwUserID;
- pUserInfoHead.dwCustomID = pUserInfo->dwCustomID;
-
- //用户属性
- pUserInfoHead.cbGender = pUserInfo->cbGender;
- pUserInfoHead.cbMemberOrder = pUserInfo->cbMemberOrder;
-
- //用户状态
- pUserInfoHead.wTableID = pUserInfo->wTableID;
- pUserInfoHead.wChairID = pUserInfo->wChairID;
- pUserInfoHead.cbUserStatus = US_SIT;
-
- //用户局数
- pUserInfoHead.dwWinCount = pUserInfo->dwWinCount;
- pUserInfoHead.dwLostCount = pUserInfo->dwLostCount;
- pUserInfoHead.dwDrawCount = pUserInfo->dwDrawCount;
- pUserInfoHead.dwFleeCount = pUserInfo->dwFleeCount;
- pUserInfoHead.dwExperience = pUserInfo->dwExperience;
-
- pUserInfoHead.iJiePing = pUserInfo->llJiePing;
- pUserInfoHead.iXinYong = pUserInfo->iXinYong;
- pUserInfoHead.llDingWeiX = pUserInfo->dDingWeiX;
- pUserInfoHead.llDingWeiY = pUserInfo->dDingWeiY;
- lstrcpyn(pUserInfoHead.RetTime, pUserInfo->RegisterDate, CountArray(pUserInfo->RegisterDate));
- lstrcpyn(pUserInfoHead.ChengShi, pUserInfo->szChengShi, CountArray(pUserInfo->szChengShi));
- //用户成绩
- pUserInfoHead.lScore = pUserInfo->lScore;
- pUserInfoHead.lScore += pIServerUserItem->GetTrusteeScore();
- pUserInfoHead.lScore += pIServerUserItem->GetFrozenedScore();
-
- lstrcpyn(pUserInfoHead.szNickname, pUserInfo->szNickName, CountArray(pUserInfo->szNickName));
- //用户头像地址
- lstrcpyn(pUserInfoHead.szHeadUrl, pUserInfo->szHeadUrl, CountArray(pUserInfo->szHeadUrl));
- //IP地址
- pUserInfoHead.dwClientAddr = pIServerUserItem->GetClientAddr();
-
- UserInfo::PB_CS_S_tagMobileUserInfoHead UserInfoHead;
- UserInfoHead.set_wfaceid(pUserInfoHead.wFaceID);
- UserInfoHead.set_dwgameid(pUserInfoHead.dwGameID);
- UserInfoHead.set_dwuserid(pUserInfoHead.dwUserID);
- UserInfoHead.set_dwcustomid(pUserInfoHead.dwCustomID);
- UserInfoHead.set_cbgender(pUserInfoHead.cbGender);
- UserInfoHead.set_cbmemberorder(pUserInfoHead.cbMemberOrder);
- UserInfoHead.set_wtableid(pUserInfoHead.wTableID);
- UserInfoHead.set_wchairid(pUserInfoHead.wChairID);
- UserInfoHead.set_cbuserstatus(pUserInfoHead.cbUserStatus);
- UserInfoHead.set_lscore(pUserInfoHead.lScore);
- UserInfoHead.set_dwwincount(pUserInfoHead.dwWinCount);
- UserInfoHead.set_dwlostcount(pUserInfoHead.dwLostCount);
- UserInfoHead.set_dwdrawcount(pUserInfoHead.dwDrawCount);
- UserInfoHead.set_dwfleecount(pUserInfoHead.dwFleeCount);
- UserInfoHead.set_dwexperience(pUserInfoHead.dwExperience);
- std::string szNickname = CW2AEX<1024>(pUserInfoHead.szNickname, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(pUserInfoHead.szHeadUrl, CP_UTF8).m_psz;
- UserInfoHead.set_sznickname(szNickname);
- UserInfoHead.set_szheadurl(szHeadUrl);
- UserInfoHead.set_dwclientaddr(pUserInfoHead.dwClientAddr);
- UserInfoHead.set_ixinyong(pUserInfoHead.iXinYong);
- std::string RetTime = CW2AEX<1024>(pUserInfoHead.RetTime, CP_UTF8).m_psz;
- std::string ChengShi = CW2AEX<1024>(pUserInfoHead.ChengShi, CP_UTF8).m_psz;
- UserInfoHead.set_rettime(RetTime);
- UserInfoHead.set_chengshi(ChengShi);
- UserInfoHead.set_lldingweix(pUserInfoHead.llDingWeiX);
- UserInfoHead.set_lldingweiy(pUserInfoHead.llDingWeiY);
- UserInfoHead.set_ijieping(pUserInfoHead.iJiePing);
-
- auto pCTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
-
- if (pCTableFrame)
- {
- for (int j = 0; j < pCTableFrame->GetChairCount(); j++)
- {
- IServerUserItem * pTemp = pCTableFrame->GetTableUserItem(j);
-
- if (pTemp && pTemp != pIServerUserItem)
- {
- //发送数据
- std::string pbdata = UserInfoHead.SerializePartialAsString();
-
- SendData(pTemp, MDM_GR_USER, SUB_GR_USER_ENTER, (void*)pbdata.c_str(), pbdata.length());
- }
- }
-
- WORD wEnumIndex = 0;
- do
- {
- //获取用户
- IServerUserItem * pTemp = pCTableFrame->EnumLookonUserItem(wEnumIndex++);
- if (pTemp == NULL) break;
-
- //发送数据
- std::string pbdata = UserInfoHead.SerializePartialAsString();
-
- SendData(pTemp, MDM_GR_USER, SUB_GR_USER_ENTER, (void*)pbdata.c_str(), pbdata.length());
- } while (true);
- }
- }
- }
- }
- else
- {
- SendDataBatchToMobileUser(wOldTableID, MDM_GR_USER, SUB_GR_USER_STATUS, &UserStatus, sizeof(UserStatus), pIServerUserItem);
- }
- }
-
- //返回大厅
- if (pIServerUserItem->GetUserStatus() == US_FREE)
- {
- pIServerUserItem->GetUserInfo()->wChairID = INVALID_CHAIR;
- pIServerUserItem->GetUserInfo()->wTableID = INVALID_TABLE;
- }
- //离开判断
- if (pIServerUserItem->GetUserStatus() == US_NULL)
- {
- //获取绑定
- WORD wBindIndex = pIServerUserItem->GetBindIndex();
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- //绑带处理
- if (pBindParameter != NULL)
- {
- //绑定处理
- if (pBindParameter->pIServerUserItem == pIServerUserItem)
- {
- pBindParameter->pIServerUserItem = NULL;
- }
-
- //中断网络
- if (pBindParameter->dwSocketID != 0L)
- {
- if (LOWORD(pBindParameter->dwSocketID) >= INDEX_ANDROID)
- {
- //m_AndroidUserManager.DeleteAndroidUserItem(pBindParameter->dwSocketID, false);
- }
- else
- {
- m_pITCPNetworkEngine->ShutDownSocket(pBindParameter->dwSocketID);
- }
- }
- }
-
- //离开处理
- OnEventUserLogout(pIServerUserItem, 0L);
- }
- return true;
- }
-
- //用户权限
- bool CAttemperEngineSink::OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight, BYTE cbRightKind)
- {
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //变量定义
- tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
-
- //比赛权限
- DBR_GR_ManageUserRight ManageUserRight;
- ZeroMemory(&ManageUserRight, sizeof(ManageUserRight));
- ManageUserRight.dwUserID = pUserInfo->dwUserID;
- ManageUserRight.dwAddRight = dwAddRight;
- ManageUserRight.dwRemoveRight = dwRemoveRight;
- ManageUserRight.bGameRight = cbRightKind == UR_KIND_GAME;
- CTraceService::TraceString(TEXT("用户权限已屏蔽 OnEventUserItemRight"), TraceLevel_Warning);
- //发送请求
- //m_pIDBCorrespondManager->PostDataBaseRequest(ManageUserRight.dwUserID, DBR_GR_MANAGE_USER_RIGHT, 0, &ManageUserRight, sizeof(ManageUserRight));
-
- return true;
- }
-
- //登录成功
- bool CAttemperEngineSink::OnDBLogonSuccessSend(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- DBO_GR_LogonSuccess ** pLogon = (DBO_GR_LogonSuccess **)pData;
-
- if (wDataSize != sizeof(PVOID))
- {
- ASSERT(FALSE);
- return false;
- }
-
- CTraceService::TraceString(TEXT("登录成功 OnDBLogonSuccess"), TraceLevel_Debug);
- //变量定义
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
- DBO_GR_LogonSuccess * pDBOLogonSuccess = *pLogon;
- if (pBindParameter == NULL)
- {
- CTraceService::TraceString(TEXT("pBindParameter == NULL"), TraceLevel_Warning);
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return false;
- }
-
- //废弃判断
- if ((pBindParameter->pIServerUserItem != NULL) || (pBindParameter->dwSocketID != dwContextID))
- {
- CTraceService::TraceString(TEXT("(pBindParameter->pIServerUserItem != NULL) || (pBindParameter->dwSocketID != dwContextID)"), TraceLevel_Warning);
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return false;
- }
-
- //解除锁定
- //PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_NORMAL);
-
- //变量定义
- bool bAndroidUser = (wBindIndex >= INDEX_ANDROID);
- bool bMobileUser = (pBindParameter->cbClientKind == CLIENT_KIND_MOBILE);
-
- //切换判断
- IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pDBOLogonSuccess->dwUserID);
- if (pIServerUserItem != NULL)
- {
- CTraceService::TraceString(TEXT("pIServerUserItem != NULL 切换判断"), TraceLevel_Warning);
- auto _iter = Socket_2_UserID.find(dwContextID);
- if (_iter != Socket_2_UserID.end() && pDBOLogonSuccess->dwUserID != _iter->second)
- {
- ASSERT(FALSE);
- }
-
- //切换用户
- SwitchUserItemConnect(pIServerUserItem, pDBOLogonSuccess->szMachineID, wBindIndex, pDBOLogonSuccess->cbDeviceType, pDBOLogonSuccess->wBehaviorFlags, pDBOLogonSuccess->wPageTableCount);
-
- //解除锁定
- PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_USER_IMPACT);
-
- //需要补发房间列表
- DWORD dwUserID = pDBOLogonSuccess->dwUserID;
-
- //清空本地的缓存
- auto iter = m_UserID_2_PriTableIDGROUP.find(dwUserID);
- if (iter != m_UserID_2_PriTableIDGROUP.end())
- {
- m_UserID_2_PriTableIDGROUP.erase(dwUserID);
- }
-
- //汇总用户(所有数据从协调拉取)
- if (m_bCollectUser == true)
- {
- //变量定义
- CMD_CS_C_UserEnter UserEnter;
- ZeroMemory(&UserEnter, sizeof(UserEnter));
-
- //设置变量
- UserEnter.dwUserID = pIServerUserItem->GetUserID();
- UserEnter.dwGameID = pIServerUserItem->GetGameID();
- //lstrcpyn(UserEnter.szNickName, pIServerUserItem->GetNickName(), CountArray(UserEnter.szNickName));
-
- //辅助信息
- UserEnter.cbGender = pIServerUserItem->GetGender();
- UserEnter.cbMemberOrder = pIServerUserItem->GetMemberOrder();
- UserEnter.cbMasterOrder = pIServerUserItem->GetMasterOrder();
-
- //发送消息
- ASSERT(m_pITCPSocketService != NULL);
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_USER_ENTER, &UserEnter, sizeof(UserEnter));
-
-
- //MessageDef::PB_CS_C_UserEnter pUserEnter;
- //pUserEnter.set_dwuserid(pIServerUserItem->GetUserID());
- //pUserEnter.set_dwgameid(pIServerUserItem->GetGameID());
- //pUserEnter.set_cbgender(pIServerUserItem->GetGender());
- //pUserEnter.set_cbmemberorder(pIServerUserItem->GetMemberOrder());
- //pUserEnter.set_cbmasterorder(pIServerUserItem->GetMasterOrder());
- //std::string pbdata = pUserEnter.SerializePartialAsString();
- ////unsigned char* raw_data = ;
-
- //m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_USER_ENTER, (void*)pbdata.c_str(), pbdata.length());
- }
-
- //从新申请列表
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
-
- }
-
- //维护判断
- if ((CServerRule::IsForfendRoomEnter(m_pGameServiceOption->dwServerRule) == true) && (pDBOLogonSuccess->cbMasterOrder == 0))
- {
- CTraceService::TraceString(TEXT("维护判断"), TraceLevel_Warning);
- //发送失败
- SendLogonFailure(TEXT("抱歉,由于系统维护的原因,当前游戏房间禁止用户进入!"), 0, pBindParameter->dwSocketID);
-
- //解除锁定
- PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_SYSTEM);
-
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
- }
-
- //查找机器
- //if (bAndroidUser == true && m_pGameServiceOption->wServerType != GAME_GENRE_MATCH)
- //{
- // CTraceService::TraceString(TEXT("查找机器"), TraceLevel_Warning);
- // //查找机器
- // DWORD dwUserID = pDBOLogonSuccess->dwUserID;
- // IAndroidUserItem * pIAndroidUserItem = m_AndroidUserManager.SearchAndroidUserItem(dwUserID, dwContextID);
-
- // //修改积分
- // if (pIAndroidUserItem != NULL)
- // {
- // //获取配置
- // tagAndroidParameter * pAndroidParameter = pIAndroidUserItem->GetAndroidParameter();
-
- // //调整积分
- // if ((pAndroidParameter->lTakeMinScore != 0L) && (pAndroidParameter->lTakeMaxScore != 0L))
- // {
- // //变量定义
- // SCORE lTakeMinScore = (SCORE)pAndroidParameter->lTakeMinScore;
- // SCORE lTakeMaxScore = (SCORE)__max(pAndroidParameter->lTakeMaxScore, pAndroidParameter->lTakeMinScore);
-
- // //调整积分
- // if ((lTakeMaxScore - lTakeMinScore) > 0L)
- // {
- // SCORE lTakeScore = (lTakeMaxScore - lTakeMinScore) / 10;
- // pDBOLogonSuccess->lScore = (SCORE)(lTakeMinScore + (rand() % 10)*lTakeScore + rand() % lTakeScore);
- // }
- // else
- // {
- // pDBOLogonSuccess->lScore = (SCORE)lTakeMaxScore;
- // }
- // }
- // }
- //}
-
- //最低分数
- if ((m_pGameServiceOption->lMinEnterScore != 0L) && (pDBOLogonSuccess->lScore < m_pGameServiceOption->lMinEnterScore))
- {
- CTraceService::TraceString(TEXT("最低分数"), TraceLevel_Warning);
- //发送失败
- TCHAR szMsg[128] = TEXT("");
- _sntprintf(szMsg, CountArray(szMsg), TEXT("抱歉,您的游戏成绩低于当前游戏房间的最低进入成绩%I64d,不能进入当前游戏房间!"), m_pGameServiceOption->lMinEnterScore);
- SendLogonFailure(szMsg, 0, pBindParameter->dwSocketID);
-
- //解除锁定
- PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_SERVER_CONDITIONS);
-
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
- }
-
- //最高分数
- if ((m_pGameServiceOption->lMaxEnterScore != 0L) && (pDBOLogonSuccess->lScore > m_pGameServiceOption->lMaxEnterScore))
- {
- CTraceService::TraceString(TEXT("最高分数"), TraceLevel_Warning);
- //发送失败
- TCHAR szMsg[128] = TEXT("");
- _sntprintf(szMsg, CountArray(szMsg), TEXT("抱歉,您的游戏成绩高于当前游戏房间的最高进入成绩%I64d,不能进入当前游戏房间!"), m_pGameServiceOption->lMaxEnterScore);
- SendLogonFailure(szMsg, 0, pBindParameter->dwSocketID);
-
- //解除锁定
- PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_SERVER_CONDITIONS);
-
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
- }
-
- //会员判断
- if (m_pGameServiceOption->cbMinEnterMember != 0 && pDBOLogonSuccess->cbMemberOrder < m_pGameServiceOption->cbMinEnterMember && (pDBOLogonSuccess->cbMasterOrder == 0))
- {
- CTraceService::TraceString(TEXT("会员判断"), TraceLevel_Warning);
- //发送失败
- SendLogonFailure(TEXT("抱歉,您的会员级别低于当前游戏房间的最低进入会员条件,不能进入当前游戏房间!"), 0, pBindParameter->dwSocketID);
-
- //解除锁定
- PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_SERVER_CONDITIONS);
-
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
- }
-
- //会员判断
- if (m_pGameServiceOption->cbMaxEnterMember != 0 && pDBOLogonSuccess->cbMemberOrder > m_pGameServiceOption->cbMaxEnterMember && (pDBOLogonSuccess->cbMasterOrder == 0))
- {
- CTraceService::TraceString(TEXT("会员判断"), TraceLevel_Warning);
- //发送失败
- SendLogonFailure(TEXT("抱歉,您的会员级别高于当前游戏房间的最高进入会员条件,不能进入当前游戏房间!"), 0, pBindParameter->dwSocketID);
-
- //解除锁定
- PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_SERVER_CONDITIONS);
-
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
- }
-
- //满人判断
- WORD wMaxPlayer = m_pGameServiceOption->wMaxPlayer;
- DWORD dwOnlineCount = m_ServerUserManager.GetUserItemCount();
- if ((pDBOLogonSuccess->cbMasterOrder == 0) && (dwOnlineCount > (DWORD)(wMaxPlayer - RESERVE_USER_COUNT)))
- {
- //发送失败
- SendLogonFailure(TEXT("抱歉,此房间已经人满啦!"), 66, pBindParameter->dwSocketID);
-
- //解除锁定
- PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_SERVER_FULL);
-
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
- }
-
- //用户变量
- tagUserInfo UserInfo;
- tagUserInfoPlus UserInfoPlus;
- ZeroMemory(&UserInfo, sizeof(UserInfo));
- ZeroMemory(&UserInfoPlus, sizeof(UserInfoPlus));
-
- //属性资料
- UserInfo.llJiePing = pDBOLogonSuccess->llJiePing;
- UserInfo.iXinYong = pDBOLogonSuccess->iXinYong;
-
- UserInfo.wFaceID = pDBOLogonSuccess->wFaceID;
- UserInfo.dwUserID = pDBOLogonSuccess->dwUserID;
- UserInfo.dwGameID = 305;// pDBOLogonSuccess->dwGameID;
- UserInfo.dwGroupID = pDBOLogonSuccess->dwGroupID;
- UserInfo.dwCustomID = pDBOLogonSuccess->dwCustomID;
-
- lstrcpyn(UserInfo.RegisterDate, pDBOLogonSuccess->RegTime, CountArray(UserInfo.RegisterDate));
- lstrcpyn(UserInfo.szNickName, pDBOLogonSuccess->szNickName, CountArray(UserInfo.szNickName));
- UserInfo.szNickName[31] = 0;
- lstrcpyn(UserInfo.szUnionID, pDBOLogonSuccess->szUnionID, CountArray(UserInfo.szUnionID));
- UserInfo.dDaiLi = pDBOLogonSuccess->dDaiLi;
- lstrcpyn(UserInfo.szUnionID, pDBOLogonSuccess->szUnionID, CountArray(UserInfo.szUnionID));
-
- //用户资料
- UserInfo.cbGender = pDBOLogonSuccess->cbGender;
- UserInfo.cbMemberOrder = pDBOLogonSuccess->cbMemberOrder;
- UserInfo.cbMasterOrder = pDBOLogonSuccess->cbMasterOrder;
- //lstrcpyn(UserInfo.szGroupName, pDBOLogonSuccess->szGroupName, CountArray(UserInfo.szGroupName));
- //lstrcpyn(UserInfo.szUnderWrite, pDBOLogonSuccess->szUnderWrite, CountArray(UserInfo.szUnderWrite));
- UserInfo.llJuLi = _wtoll(pDBOLogonSuccess->szDescribeString);
- //状态设置
- UserInfo.cbUserStatus = US_FREE;
- UserInfo.wTableID = INVALID_TABLE;
- UserInfo.wChairID = INVALID_CHAIR;
-
- //积分信息
- UserInfo.lScore = pDBOLogonSuccess->lScore;
- UserInfo.dwBean = pDBOLogonSuccess->dwBean;
- UserInfo.lGrade = pDBOLogonSuccess->lGrade;
- //UserInfo.lIngot = pDBOLogonSuccess->lIngot;
- UserInfo.lInsure = pDBOLogonSuccess->lInsure;
- UserInfo.dwWinCount = pDBOLogonSuccess->dwWinCount;
- UserInfo.dwLostCount = pDBOLogonSuccess->dwLostCount;
- UserInfo.dwDrawCount = pDBOLogonSuccess->dwDrawCount;
- UserInfo.dwFleeCount = pDBOLogonSuccess->dwFleeCount;
- UserInfo.dwExperience = pDBOLogonSuccess->dwExperience;
- UserInfo.lLoveLiness = pDBOLogonSuccess->lLoveLiness;
- UserInfo.dDingWeiX = pDBOLogonSuccess->dX;
- UserInfo.dDingWeiY = pDBOLogonSuccess->dY;
- lstrcpyn(UserInfo.szChengShi, pDBOLogonSuccess->szChengShi, CountArray(pDBOLogonSuccess->szChengShi));
- lstrcpyn(UserInfo.szHeadUrl, pDBOLogonSuccess->szHeadUrl, CountArray(pDBOLogonSuccess->szHeadUrl));
- UserInfo.LeiJiZuanShi = pDBOLogonSuccess->LeiJiZuanShi;
- UserInfo.GouMaiZuanShi = pDBOLogonSuccess->GouMaiZuanShi;
-
- //俱乐部信息
- CopyMemory(UserInfo.dwClubID, pDBOLogonSuccess->dwClubID, sizeof(pDBOLogonSuccess->dwClubID));
-
-
- if (IsJC(UserInfo.dwUserID))
- {
- CString csTestB;
- csTestB.Format(_T("登陆获取以钻石信息 -> GouMaiZuanShi:%d, LeiJiZuanShiID:%d,UserID=%d"), UserInfo.GouMaiZuanShi, UserInfo.LeiJiZuanShi, UserInfo.dwUserID);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
-
- //登录信息
- UserInfoPlus.dwLogonTime = (DWORD)time(NULL);
- UserInfoPlus.dwInoutIndex = pDBOLogonSuccess->dwInoutIndex;
-
- //用户权限
- UserInfoPlus.dwUserRight = pDBOLogonSuccess->dwUserRight;
- UserInfoPlus.dwMasterRight = pDBOLogonSuccess->dwMasterRight;
-
- //辅助变量
- UserInfoPlus.bMobileUser = bMobileUser;
- UserInfoPlus.bAndroidUser = bAndroidUser;
- UserInfoPlus.lRestrictScore = m_pGameServiceOption->lRestrictScore;
- lstrcpyn(UserInfoPlus.szPassword, pDBOLogonSuccess->szPassword, CountArray(UserInfoPlus.szPassword));
-
- //连接信息
- UserInfoPlus.wBindIndex = wBindIndex;
-
- UserInfoPlus.dwClientAddr = pBindParameter->dwClientAddr;
-
- lstrcpyn(UserInfoPlus.szMachineID, pDBOLogonSuccess->szMachineID, CountArray(UserInfoPlus.szMachineID));
-
- lstrcpyn(UserInfo.szName, pDBOLogonSuccess->DaiLiName, CountArray(UserInfo.szName));
- lstrcpyn(UserInfo.szWx, pDBOLogonSuccess->DaiLiWX, CountArray(UserInfo.szWx));
- lstrcpyn(UserInfo.szQQ, pDBOLogonSuccess->DaiLiQQ, CountArray(UserInfo.szQQ));
-
- //激活用户
- m_ServerUserManager.InsertUserItem(&pIServerUserItem, UserInfo, UserInfoPlus);
-
- auto _iter = Socket_2_UserID.find(dwContextID);
- if (_iter == Socket_2_UserID.end())
- {
- std::pair<DWORD, DWORD> Sub(dwContextID, pDBOLogonSuccess->dwUserID);
- Socket_2_UserID.insert(Sub);
- }
- else
- {
- Socket_2_UserID[dwContextID] = pDBOLogonSuccess->dwUserID;
- }
- //用户任务
- //if (pDBOLogonSuccess->wTaskCount > 0)
- //{
- // m_UserTaskManager.SetUserTaskInfo(pIServerUserItem->GetUserID(), pDBOLogonSuccess->UserTaskInfo, pDBOLogonSuccess->wTaskCount);
- //}
- //错误判断
- if (pIServerUserItem == NULL)
- {
- //错误断言
- ASSERT(FALSE);
-
- //解除锁定
- PerformUnlockScore(pDBOLogonSuccess->dwUserID, pDBOLogonSuccess->dwInoutIndex, LER_SERVER_FULL);
-
- //断开用户
- if (bAndroidUser == true)
- {
- //m_AndroidUserManager.DeleteAndroidUserItem(dwContextID, true);
- }
- else
- {
- m_pITCPNetworkEngine->ShutDownSocket(dwContextID);
- }
-
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
- }
-
- //设置用户
- pBindParameter->pIServerUserItem = pIServerUserItem;
-
- //修改参数
- if (pIServerUserItem->IsMobileUser())
- {
- SetMobileUserParameter(pIServerUserItem, pDBOLogonSuccess->cbDeviceType, pDBOLogonSuccess->wBehaviorFlags, pDBOLogonSuccess->wPageTableCount);
- }
-
- DWORD dwUserID = pDBOLogonSuccess->dwUserID;
- auto iter = m_UserID_2_PriTableIDGROUP.find(dwUserID);
- //if (iter == m_UserID_2_PriTableIDGROUP.end())
- //{
- // JN_GR_RoomListGroup Temp;
- // ZeroMemory(&Temp, sizeof(Temp));
-
- // std::pair<DWORD, JN_GR_RoomListGroup> Sub(dwUserID, Temp);
- // m_UserID_2_PriTableIDGROUP.insert(Sub);
-
- // UserInfo::PB_CS_S_RoomListGroupSend GroupSend;
- // for (WORD i = 0; i < Temp.Num; i++)
- // {
- // if (Temp.jgrDate[i].dwRoomNumber == 0)break;
- // UserInfo::PB_CS_S_RoomList* RoomList = GroupSend.add_jgrdate();
- // RoomList->set_dwuserid(Temp.jgrDate[i].dwUserID);
- // RoomList->set_dwserverid(Temp.jgrDate[i].dwServerID);
- // RoomList->set_dwroomnumber(Temp.jgrDate[i].dwRoomNumber);
- // RoomList->set_dwinsert_updata_del(Temp.jgrDate[i].dwInsert_UpData_Del);
- // RoomList->set_dwdifen(Temp.jgrDate[i].dwDiFen);
- // RoomList->set_dwjushu(Temp.jgrDate[i].dwJuShu);
- // RoomList->set_dwreadybody(Temp.jgrDate[i].dwReadyBody);
- // RoomList->set_dwbody(Temp.jgrDate[i].dwBody);
- // RoomList->set_bwanfa(Temp.jgrDate[i].bWanFa);
- // std::string szIp = CW2AEX<1024>(Temp.jgrDate[i].szIp, CP_UTF8).m_psz;
- // RoomList->set_szip(szIp);
- // RoomList->set_bduolai(Temp.jgrDate[i].bDuoLai);
- // RoomList->set_tmp1(Temp.jgrDate[i].tmp1);
- // RoomList->set_tmp2(Temp.jgrDate[i].tmp2);
- // RoomList->set_tmp3(Temp.jgrDate[i].tmp3);
- // RoomList->set_tmp4(Temp.jgrDate[i].tmp4);
- // RoomList->set_tmp5(Temp.jgrDate[i].tmp5);
- // for (WORD i = 0; i < 4; i++)
- // {
- // RoomList->add_tmp6(Temp.jgrDate[i].tmp6[i]);
- // }
- // RoomList->set_wport(Temp.jgrDate[i].wPort);
- // }
- // GroupSend.set_num(Temp.Num);
- // //发送数据
- // std::string pbdata = GroupSend.SerializePartialAsString();
-
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ALL, (void*)pbdata.c_str(), pbdata.length());
- //}
- //else
- //{
- // JN_GR_RoomListGroupSend Temp;
- // ZeroMemory(&Temp, sizeof(JN_GR_RoomListGroupSend));
-
- // for (int i = 0; i < m_UserID_2_PriTableIDGROUP[dwUserID].Num; i++)
- // {
- // CopyMemory(&(Temp.jgrDate[i]), &(m_UserID_2_PriTableIDGROUP[dwUserID].jgrDate[i]), sizeof(JN_GR_RoomList));
-
- // //纠正
- // Temp.jgrDate[i].tmp1 = m_UserID_2_PriTableIDGROUP[dwUserID].jgrDate[i].bRoomCreatePay;
- // Temp.jgrDate[i].tmp2 = m_UserID_2_PriTableIDGROUP[dwUserID].jgrDate[i].tmp1;
- // Temp.jgrDate[i].tmp3 = m_UserID_2_PriTableIDGROUP[dwUserID].jgrDate[i].tmp2;
- // }
- // UserInfo::PB_CS_S_RoomListGroupSend GroupSend;
- // for (WORD i = 0; i < m_UserID_2_PriTableIDGROUP[dwUserID].Num; i++)
- // {
- // UserInfo::PB_CS_S_RoomList* RoomList = GroupSend.add_jgrdate();
- // RoomList->set_dwuserid(Temp.jgrDate[i].dwUserID);
- // RoomList->set_dwserverid(Temp.jgrDate[i].dwServerID);
- // RoomList->set_dwroomnumber(Temp.jgrDate[i].dwRoomNumber);
- // RoomList->set_dwinsert_updata_del(Temp.jgrDate[i].dwInsert_UpData_Del);
- // RoomList->set_dwdifen(Temp.jgrDate[i].dwDiFen);
- // RoomList->set_dwjushu(Temp.jgrDate[i].dwJuShu);
- // RoomList->set_dwreadybody(Temp.jgrDate[i].dwReadyBody);
- // RoomList->set_dwbody(Temp.jgrDate[i].dwBody);
- // RoomList->set_bwanfa(Temp.jgrDate[i].bWanFa);
- // std::string szIp = CW2AEX<1024>(Temp.jgrDate[i].szIp, CP_UTF8).m_psz;
- // RoomList->set_szip(szIp);
- // RoomList->set_bduolai(Temp.jgrDate[i].bDuoLai);
- // RoomList->set_tmp1(Temp.jgrDate[i].tmp1);
- // RoomList->set_tmp2(Temp.jgrDate[i].tmp2);
- // RoomList->set_tmp3(Temp.jgrDate[i].tmp3);
- // RoomList->set_tmp4(Temp.jgrDate[i].tmp4);
- // RoomList->set_tmp5(Temp.jgrDate[i].tmp5);
- // for (WORD i = 0; i < 4; i++)
- // {
- // RoomList->add_tmp6(Temp.jgrDate[i].tmp6[i]);
- // }
- // RoomList->set_wport(Temp.jgrDate[i].wPort);
- // }
- // GroupSend.set_num(m_UserID_2_PriTableIDGROUP[dwUserID].Num);
- // //发送数据
- // std::string pbdata = GroupSend.SerializePartialAsString();
-
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ALL, (void*)pbdata.c_str(), pbdata.length());
- //}
-
- if (IsJC(pIServerUserItem->GetUserID()))
- {
- CString csTestB;
- csTestB.Format(_T("通知创建的所有房间列表 -> GouMaiZuanShi:%d, LeiJiZuanShiID:%d,UserID=%d"), pIServerUserItem->GetUserInfo()->GouMaiZuanShi, pIServerUserItem->GetUserInfo()->LeiJiZuanShi, pIServerUserItem->GetUserID());
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- //登录事件
- OnEventUserLogon(pIServerUserItem, false);
-
- //汇总用户
- if (m_bCollectUser == true)
- {
- //变量定义
- CMD_CS_C_UserEnter UserEnter;
- ZeroMemory(&UserEnter, sizeof(UserEnter));
- //设置变量
- UserEnter.dwUserID = pIServerUserItem->GetUserID();
- UserEnter.dwGameID = pIServerUserItem->GetGameID();
- //lstrcpyn(UserEnter.szNickName, pIServerUserItem->GetNickName(), CountArray(UserEnter.szNickName));
- //辅助信息
- UserEnter.cbGender = pIServerUserItem->GetGender();
- UserEnter.cbMemberOrder = pIServerUserItem->GetMemberOrder();
- UserEnter.cbMasterOrder = pIServerUserItem->GetMasterOrder();
- /*DWORD dTableNum = 0;*/
- if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIServerUserItem->GetTableID());
- TCHAR szTemp[32] = { 0 };
- if (pat) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
- /*if (pat != nullptr && !csTemp.IsEmpty())
- {
- dTableNum = _wtol(csTemp);
- }*/
- }
-
- //发送消息
- ASSERT(m_pITCPSocketService != NULL);
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_USER_ENTER, &UserEnter, sizeof(UserEnter));
-
-
- }
-
- if (IsJC(pIServerUserItem->GetUserID()))
- {
- CString csTestB;
- csTestB.Format(_T("游戏登陆完成 -> GouMaiZuanShi:%d, LeiJiZuanShiID:%d,UserID=%d"), pIServerUserItem->GetUserInfo()->GouMaiZuanShi, pIServerUserItem->GetUserInfo()->LeiJiZuanShi, pIServerUserItem->GetUserID());
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
-
- if (pDBOLogonSuccess) free(pDBOLogonSuccess);
- return true;
- }
-
- //登录成功
- bool CAttemperEngineSink::OnDBLogonSuccess(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- if (!m_pITCPNetworkEngine) return false;
-
- void *pBuffer = malloc(wDataSize);
- CopyMemory(pBuffer, pData, wDataSize);
- PVOID pLogon = pBuffer;
-
- return m_pITCPNetworkEngine->OnTBDataEvent(TB_LOGINOK, dwContextID, &pLogon, sizeof(PVOID));
- }
-
- //登录失败
- bool CAttemperEngineSink::OnDBLogonFailure(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
-
- //判断在线
- tagBindParameter * pBindParameter = GetBindParameter(LOWORD(dwContextID));
- if (NULL == pBindParameter)
- {
- CString strTip;
- strTip.Format(L"Fun=[%hs] 登录失败 pBindParameter为NULL", __FUNCTION__);
- CTraceService::TraceString(strTip, TraceLevel_Exception);
- return true;
- }
-
- TCHAR szClientAddr[16] = TEXT("");
- BYTE * pClientAddr = (BYTE *)&pBindParameter->dwClientAddr;
- _sntprintf(szClientAddr, CountArray(szClientAddr), TEXT("%d.%d.%d.%d"), pClientAddr[0], pClientAddr[1], pClientAddr[2], pClientAddr[3]);
-
- if ((pBindParameter->dwSocketID != dwContextID) || (pBindParameter->pIServerUserItem != NULL))
- {
- CString csTest;
- csTest.Format(_T("登录失败 OnDBLogonFailure, SOCKET数组下标=%d, 数组记录SOCKET=%d, 当前SOCKET=%d, 数组记录pIServerUserItem=%p,数组记录IP=%s ")
- , LOWORD(dwContextID), pBindParameter->dwSocketID, dwContextID, pBindParameter->pIServerUserItem, szClientAddr);
-
- if (pBindParameter->pIServerUserItem != NULL)
- {
- csTest.Format(_T("登录失败 OnDBLogonFailure, SOCKET数组下标=%d, 数组记录SOCKET=%d, 当前SOCKET=%d, 数组记录pIServerUserItem=%p,数组记录IP=%s,数组记录uid=%d")
- , LOWORD(dwContextID), pBindParameter->dwSocketID, dwContextID, pBindParameter->pIServerUserItem, szClientAddr, pBindParameter->pIServerUserItem->GetUserID());
- }
-
- CTraceService::TraceString(csTest, TraceLevel_Exception);
- return true;
- }
-
- //发送错误
- DBO_GR_LogonFailure * pLogonFailure = (DBO_GR_LogonFailure *)pData;
- SendLogonFailure(pLogonFailure->szDescribeString, pLogonFailure->lResultCode, dwContextID);
-
- CString str;
- str.Format(TEXT("登录失败 OnDBLogonFailure 失败原因:%s , SOCKET数组下标=%d, 数组记录SOCKET=%d, 当前SOCKET=%d, 数组记录pIServerUserItem=%p,数组记录IP=%s ")
- , pLogonFailure->szDescribeString, LOWORD(dwContextID), pBindParameter->dwSocketID, dwContextID, pBindParameter->pIServerUserItem, szClientAddr);
-
- CTraceService::TraceString(str, TraceLevel_Normal);
-
- //断开连接
- if (LOWORD(dwContextID) >= INDEX_ANDROID)
- {
- //m_AndroidUserManager.DeleteAndroidUserItem(dwContextID, true);
- }
- else
- {
- m_pITCPNetworkEngine->ShutDownSocket(dwContextID);
- }
-
- return true;
- }
-
-
- bool CAttemperEngineSink::OnDBGetUserGameScoreList(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
- //变量定义
- CMD_GR_GetUserScoreRecordListResp * pGameRecords = (CMD_GR_GetUserScoreRecordListResp *)pData;
-
- UserInfo::PB_CS_S_GetUserScoreRecordListResp ListResp;
- ListResp.set_wparentrecordid(pGameRecords->wParentRecordID);
- ListResp.set_wrecordcount(pGameRecords->wRecordCount);
- for (WORD i = 0; i < pGameRecords->wRecordCount; i++)
- {
- UserInfo::pb_tagGameRecordDrawInfo* GameScoreRecord = ListResp.add_gamescorerecord();
- GameScoreRecord->set_dwdrawid(pGameRecords->GameScoreRecord[i].dwDrawID);
- GameScoreRecord->set_wtableid(pGameRecords->GameScoreRecord[i].wTableID);
- GameScoreRecord->set_wusermedal(pGameRecords->GameScoreRecord[i].wUserMedal);
- GameScoreRecord->set_wusercount(pGameRecords->GameScoreRecord[i].wUserCount);
- GameScoreRecord->set_wparentid(pGameRecords->GameScoreRecord[i].wParentID);
- std::string szPrivateTableID = CW2AEX<1024>(pGameRecords->GameScoreRecord[i].szPrivateTableID, CP_UTF8).m_psz;
- GameScoreRecord->set_szprivatetableid(szPrivateTableID);
- GameScoreRecord->set_systemtimestart(pGameRecords->GameScoreRecord[i].SystemTimeStart);
- GameScoreRecord->set_systemtimeconclude(pGameRecords->GameScoreRecord[i].SystemTimeConclude);
- GameScoreRecord->set_wwanfa(pGameRecords->GameScoreRecord[i].wWanFa % 256);
- GameScoreRecord->set_wplaycount(pGameRecords->GameScoreRecord[i].wWanFa / 256);
- for (WORD j = 0; j < 4; j++)
- {
- UserInfo::pb_tagGameRecordDrawScore* GameChairScore = GameScoreRecord->add_gamechairscore();
- GameChairScore->set_dwdrawid(pGameRecords->GameScoreRecord[i].GameChairScore[j].dwDrawID);
- GameChairScore->set_dwuserid(pGameRecords->GameScoreRecord[i].GameChairScore[j].dwUserID);
- GameChairScore->set_wchairid(pGameRecords->GameScoreRecord[i].GameChairScore[j].wChairID);
- GameChairScore->set_lscore(pGameRecords->GameScoreRecord[i].GameChairScore[j].lScore);
- GameChairScore->set_lgrade(pGameRecords->GameScoreRecord[i].GameChairScore[j].lGrade);
- GameChairScore->set_dwusermedal(pGameRecords->GameScoreRecord[i].GameChairScore[j].dwUserMedal);
- GameChairScore->set_dwplaytimecount(pGameRecords->GameScoreRecord[i].GameChairScore[j].dwPlayTimeCount);
- std::string szUserName = CW2AEX<1024>(pGameRecords->GameScoreRecord[i].GameChairScore[j].szUserName, CP_UTF8).m_psz;
- std::string szHeadImg = CW2AEX<1024>(pGameRecords->GameScoreRecord[i].GameChairScore[j].szHeadImg, CP_UTF8).m_psz;
- GameChairScore->set_szusername(szUserName);
- GameChairScore->set_szheadimg(szHeadImg);
- GameChairScore->set_wwanfa(pGameRecords->GameScoreRecord[i].wWanFa % 256);
- GameChairScore->set_wplaycount(pGameRecords->GameScoreRecord[i].wUserCount / 256);
- }
- }
-
- //发送数据
- std::string pbdata = ListResp.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GET_GAME_SCORE_RECORD_LISTACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
-
- //插入父节点房间的返回
- bool CAttemperEngineSink::OnDBO_GR_GameScoreRecord_RESULT(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(DBR_GR_GameScoreRecordResult));
- if (wDataSize != sizeof(DBR_GR_GameScoreRecordResult)) return false;
-
- //变量定义
- DBR_GR_GameScoreRecordResult * pInfo = (DBR_GR_GameScoreRecordResult *)pData;
-
- auto pTableFrame = GetTableFrame(pInfo->wTableID);
- ASSERT(pTableFrame);
- if (pTableFrame)
- {
- pTableFrame->SetPrivateTableParentNodeID(pInfo->wPrivateTableParentNodeID);
- }
- return true;
- }
-
- //获取刷新元宝
- bool CAttemperEngineSink::OnDBO_GR_GetBearnSEND(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnDBO_GR_GetBearnSEND"), TraceLevel_Debug);
- //效验参数
- ASSERT(wDataSize == sizeof(DBR_GR_GetBearn));
- if (wDataSize < sizeof(DBR_GR_GetBearn)) return false;
-
- DBR_GR_GetBearn *pGet = (DBR_GR_GetBearn *)pData;
-
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- //ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
-
- if (pGet->lResultCode == 0)
- {
- CString csTest;
- csTest.Format(_T("%s%s"), _T("CAttemperEngineSink::OnDBO_GR_GetBearnSEND->"), pGet->strErrorDescribe);
- //数据库查询失败。
- CTraceService::TraceString(csTest, TraceLevel_Warning);
- return true;
- }
-
- if (IsJC(pGet->dwUserID) && pGet->GouMaiZuanShi == 0)
- {
- CString csTestB;
- csTestB.Format(_T("OnDBO_GR_GetBearnSEND钻石信息变化 -> 原 GouMaiZuanShi:%d变%d, LeiJiZuanShiID:%d变%d,UserID=%d")
- , pIServerUserItem->GetUserInfo()->GouMaiZuanShi
- , pGet->GouMaiZuanShi
- , pIServerUserItem->GetUserInfo()->LeiJiZuanShi
- , pGet->LeiJiZuanShi
- , pIServerUserItem->GetUserID());
-
- CTraceService::TraceString(csTestB, TraceLevel_Warning);
- }
-
- pIServerUserItem->GetUserInfo()->dwBean = pGet->Currency;
- pIServerUserItem->GetUserInfo()->GouMaiZuanShi = pGet->GouMaiZuanShi;
- pIServerUserItem->GetUserInfo()->LeiJiZuanShi = pGet->LeiJiZuanShi;
-
- UserInfo::PB_CS_S_UserBean Bean;
- Bean.set_dwcurrbeans(pGet->Currency);
- //发送数据
- std::string pbdata = Bean.SerializePartialAsString();
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_BEAN, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- //获取刷新元宝
- bool CAttemperEngineSink::OnDBO_GR_GetBearn(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- if (m_pITCPNetworkEngine) m_pITCPNetworkEngine->OnTBDataEvent(TB_GR_UPDATA, dwContextID, pData, wDataSize);
-
- return true;
- }
-
- //手机重复绑定查询
- bool CAttemperEngineSink::OnDBO_GR_GetVerifCode(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
-
- CMD_GR_GetVerifCode* pGetVerifCode = (CMD_GR_GetVerifCode*)pData;
- if (pGetVerifCode->IsRepeat == 0)
- {
- //_sntprintf(pUser->PhoneNum, 12, TEXT("18746191484"));
- DWORD dUserID = pIServerUserItem->GetUserID();
- GETDUILIEBASE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIEBASE));
- StringCchCat(Temp.szUnionID, 12, pGetVerifCode->PhoneNum);
-
- Temp.dUserID = dUserID;
- Temp.CommendID = 8; //获取手机验证码(只作透传)
- Temp.dwSocketID = dwContextID;
-
- CHttpClient::AddLog(dwContextID, Temp);
- return true;
- }
- else
- {
- CMD_GR_RequestFailure RequestFailure;
- ZeroMemory(&RequestFailure, sizeof(RequestFailure));
-
- //设置变量
- RequestFailure.lErrorCode = -8;
- lstrcpyn(RequestFailure.szDescribeString, pGetVerifCode->szDescribeString, CountArray(RequestFailure.szDescribeString));
-
- //获取用户
- WORD wBindIndexT = LOWORD(dwContextID);
- IServerUserItem * p_server_user_itemEx = GetBindUserItem(wBindIndexT);
- if (p_server_user_itemEx == NULL) return false;
-
- UserInfo::PB_CS_S_RequestFailure Failure;
- Failure.set_lerrorcode(RequestFailure.lErrorCode);
- std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
- Failure.set_szdescribestring(szDescribeString);
- //发送数据
- std::string pbdata = Failure.SerializePartialAsString();
-
- SendData(p_server_user_itemEx, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, (void*)pbdata.c_str(), pbdata.length());
- }
-
- //SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_CHECK_IPHONE_QUERY, pReq, wDataSize);
- return true;
- }
- //手机绑定查询
- bool CAttemperEngineSink::OnDBO_GR_CheckIphoneQuery(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
-
- CMD_GR_CheckIphone_Query* pReq = (CMD_GR_CheckIphone_Query*)pData;
-
- UserInfo::PB_CS_S_CheckIphone_Query CheckIphone;
- CheckIphone.set_isbingnum(pReq->IsBingNum);
- CheckIphone.set_dwcurrency(pReq->dwCurrency);
- std::string PhoneNum = CW2AEX<1024>(pReq->PhoneNum, CP_UTF8).m_psz;
- CheckIphone.set_phonenum(PhoneNum);
- CheckIphone.set_isbingxianliao(pReq->IsBingXianLiao);
- //发送数据
- std::string pbdata = CheckIphone.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_CHECK_IPHONE_QUERY, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
- //手机绑定
- bool CAttemperEngineSink::OnDBO_GR_CheckIphone(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
-
- CMD_GR_CheckIphone* pReq = (CMD_GR_CheckIphone*)pData;
- if (pReq->IsBingNum == 0)
- {
- CMD_GR_RequestFailure RequestFailure;
- ZeroMemory(&RequestFailure, sizeof(RequestFailure));
-
- //设置变量
- RequestFailure.lErrorCode = 2;
- lstrcpyn(RequestFailure.szDescribeString, pReq->PhoneNum, CountArray(pReq->PhoneNum));
-
- //发送数据
- WORD wDataSizeT = CountStringBuffer(RequestFailure.szDescribeString);
- WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
- if (pIServerUserItem == NULL) return true;
-
- UserInfo::PB_CS_S_RequestFailure Failure;
- Failure.set_lerrorcode(RequestFailure.lErrorCode);
- std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
- Failure.set_szdescribestring(szDescribeString);
- //发送数据
- std::string pbdata = Failure.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- UserInfo::PB_CS_C_CheckIphone CheckIphone;
- CheckIphone.set_isbingnum(pReq->IsBingNum);
- CheckIphone.set_dwcurrency(pReq->dwCurrency);
- std::string PhoneNum = CW2AEX<1024>(pReq->PhoneNum, CP_UTF8).m_psz;
- CheckIphone.set_phonenum(PhoneNum);
- //发送数据
- std::string pbdata = CheckIphone.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_CHECK_IPHONE, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //实名认证查询
- bool CAttemperEngineSink::OnDBO_GR_CheckNameQuery(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
-
- DBR_GR_GetCheckName* pReq = (DBR_GR_GetCheckName*)pData;
-
- UserInfo::PB_CS_S_CheckNameEx NameEx;
- std::string userName = CW2AEX<1024>(pReq->userName, CP_UTF8).m_psz;
- std::string userCard = CW2AEX<1024>(pReq->userCard, CP_UTF8).m_psz;
- std::string userPhoneNum = CW2AEX<1024>(pReq->userPhoneNum, CP_UTF8).m_psz;
- std::string userAddr = CW2AEX<1024>(pReq->userAddr, CP_UTF8).m_psz;
- NameEx.set_name(userName);
- NameEx.set_idcard(userCard);
- NameEx.set_phonenum(userPhoneNum);
- NameEx.set_addr(userAddr);
- //发送数据
- std::string pbdata = NameEx.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_CHECK_NAME_QUERY, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
- //修改地址应答
- bool CAttemperEngineSink::OnDBO_GR_UpdateAddr(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
-
- BYTE* pReq = (BYTE*)pData;//0表示成功,1表示失败
- TurntableLogon::PB_CS_LotteryAddr LotteryAddr;
- LotteryAddr.set_preq(*pReq);
- //发送数据
- std::string pbdata = LotteryAddr.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GF_ROULETEE, SUB_GF_LOTTERY_ADDRESS, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //获取临时积分排行榜
- bool CAttemperEngineSink::OnDBO_GR_GameTmpScoreRankListResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnDBO_GR_GameTmpScoreRankListResult"), TraceLevel_Debug);
- //效验参数
- ASSERT(wDataSize >= sizeof(CMD_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST_RESULT));
- if (wDataSize < sizeof(CMD_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST_RESULT)) return false;
-
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
-
- //变量定义
- if (m_pRankListData)
- {
- delete[] m_pRankListData;
- m_pRankListData = nullptr;
- m_pRankListDataSize = 0;
- }
- m_pRankListData = new char[wDataSize];
- CopyMemory(m_pRankListData, pData, wDataSize);
- m_pRankListDataSize = wDataSize;
- m_lastRankListTime = time(0);
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST_RESULT, pData, wDataSize);
- return true;
- }
-
-
- //获取游戏积分记录详情
- bool CAttemperEngineSink::OnDBGetUserGameScoreReplayRecord(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
-
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
- /*Replay::PB_CS_RECORD_REPLAY aa;
- aa.set_aa((char*)pData);
- std::string pbdata = aa.SerializePartialAsString();
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GET_GAME_SCORE_RECORD_REPLAY, (void*)pbdata.c_str(), pbdata.length());*/
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GET_GAME_SCORE_RECORD_REPLAYACK, pData, wDataSize);
- return true;
- }
-
- //获取游戏积分记录详情
- bool CAttemperEngineSink::OnDBGetUserGameScoreRecordDetail(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize <= sizeof(CMD_GR_GetUserScoreRecordDetail));
- if (wDataSize >= sizeof(CMD_GR_GetUserScoreRecordDetail)) return false;
-
- WORD wBindIndex = LOWORD(dwContextID);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- auto pIServerUserItem = pBindParameter->pIServerUserItem;
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (pBindParameter->dwSocketID != dwContextID)
- {
- return true;
- }
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GET_GAME_SCORE_RECORD_DETAIL_INFO, pData, wDataSize);
- return true;
- }
-
-
- //配置信息
- bool CAttemperEngineSink::OnDBGameParameter(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(DBO_GR_GameParameter));
- if (wDataSize != sizeof(DBO_GR_GameParameter)) return false;
-
- //变量定义
- DBO_GR_GameParameter * pGameParameter = (DBO_GR_GameParameter *)pData;
-
- //汇率信息
- m_pGameParameter->wMedalRate = pGameParameter->wMedalRate;
- m_pGameParameter->wRevenueRate = pGameParameter->wRevenueRate;
- m_pGameParameter->wExchangeRate = pGameParameter->wExchangeRate;
-
- //经验奖励
- m_pGameParameter->dwWinExperience = pGameParameter->dwWinExperience;
-
- //版本信息
- m_pGameParameter->dwClientVersion = pGameParameter->dwClientVersion;
- m_pGameParameter->dwServerVersion = pGameParameter->dwServerVersion;
- int i = 0;//序号索引
- for each (MyStructParameter var in pGameParameter->msParameter)
- {
- i = var.idNum - 1;//下标与序号的关系idNUM固定相差1,数据库取值决定的
- StringCchCopy(m_pGameParameter->msParameter[i].szgameTypeCfg, _countof(m_pGameParameter->msParameter[i].szgameTypeCfg), var.szgameTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[i].diJinCfg, _countof(m_pGameParameter->msParameter[i].diJinCfg), var.diJinCfg);
- StringCchCopy(m_pGameParameter->msParameter[i].payTypeCfg, _countof(m_pGameParameter->msParameter[i].payTypeCfg), var.payTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[i].juShuCfg, _countof(m_pGameParameter->msParameter[i].juShuCfg), var.juShuCfg);
- StringCchCopy(m_pGameParameter->msParameter[i].payCoinCfg, _countof(m_pGameParameter->msParameter[i].payCoinCfg), var.payCoinCfg);
- StringCchCopy(m_pGameParameter->msParameter[i].ipLimitCfg, _countof(m_pGameParameter->msParameter[i].ipLimitCfg), var.ipLimitCfg);
- StringCchCopy(m_pGameParameter->msParameter[i].defaultDeskCfg, _countof(m_pGameParameter->msParameter[i].defaultDeskCfg), var.defaultDeskCfg);
- m_pGameParameter->msParameter[i].idNum = var.idNum;
- }
-
- /*StringCchCopy(m_pGameParameter->msParameter[0].szgameTypeCfg, _countof(m_pGameParameter->msParameter[0].szgameTypeCfg), pGameParameter->msParameter[0].szgameTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[0].diJinCfg, _countof(m_pGameParameter->msParameter[0].diJinCfg), pGameParameter->msParameter[0].diJinCfg);
- StringCchCopy(m_pGameParameter->msParameter[0].payTypeCfg, _countof(m_pGameParameter->msParameter[0].payTypeCfg), pGameParameter->msParameter[0].payTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[0].juShuCfg, _countof(m_pGameParameter->msParameter[0].juShuCfg), pGameParameter->msParameter[0].juShuCfg);
- StringCchCopy(m_pGameParameter->msParameter[0].payCoinCfg, _countof(m_pGameParameter->msParameter[0].payCoinCfg), pGameParameter->msParameter[0].payCoinCfg);
- StringCchCopy(m_pGameParameter->msParameter[0].ipLimitCfg, _countof(m_pGameParameter->msParameter[0].ipLimitCfg), pGameParameter->msParameter[0].ipLimitCfg);
- StringCchCopy(m_pGameParameter->msParameter[0].defaultDeskCfg, _countof(m_pGameParameter->msParameter[0].defaultDeskCfg), pGameParameter->msParameter[0].defaultDeskCfg);
- m_pGameParameter->msParameter[0].idNum = pGameParameter->msParameter[0].idNum;
-
- StringCchCopy(m_pGameParameter->msParameter[1].szgameTypeCfg, _countof(m_pGameParameter->msParameter[1].szgameTypeCfg), pGameParameter->msParameter[1].szgameTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[1].diJinCfg, _countof(m_pGameParameter->msParameter[1].diJinCfg), pGameParameter->msParameter[1].diJinCfg);
- StringCchCopy(m_pGameParameter->msParameter[1].payTypeCfg, _countof(m_pGameParameter->msParameter[1].payTypeCfg), pGameParameter->msParameter[1].payTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[1].juShuCfg, _countof(m_pGameParameter->msParameter[1].juShuCfg), pGameParameter->msParameter[1].juShuCfg);
- StringCchCopy(m_pGameParameter->msParameter[1].payCoinCfg, _countof(m_pGameParameter->msParameter[1].payCoinCfg), pGameParameter->msParameter[1].payCoinCfg);
- StringCchCopy(m_pGameParameter->msParameter[1].ipLimitCfg, _countof(m_pGameParameter->msParameter[1].ipLimitCfg), pGameParameter->msParameter[1].ipLimitCfg);
- StringCchCopy(m_pGameParameter->msParameter[1].defaultDeskCfg, _countof(m_pGameParameter->msParameter[1].defaultDeskCfg), pGameParameter->msParameter[1].defaultDeskCfg);
- m_pGameParameter->msParameter[1].idNum = pGameParameter->msParameter[1].idNum;
-
- StringCchCopy(m_pGameParameter->msParameter[2].szgameTypeCfg, _countof(m_pGameParameter->msParameter[2].szgameTypeCfg), pGameParameter->msParameter[2].szgameTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[2].diJinCfg, _countof(m_pGameParameter->msParameter[2].diJinCfg), pGameParameter->msParameter[2].diJinCfg);
- StringCchCopy(m_pGameParameter->msParameter[2].payTypeCfg, _countof(m_pGameParameter->msParameter[2].payTypeCfg), pGameParameter->msParameter[2].payTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[2].juShuCfg, _countof(m_pGameParameter->msParameter[2].juShuCfg), pGameParameter->msParameter[2].juShuCfg);
- StringCchCopy(m_pGameParameter->msParameter[2].payCoinCfg, _countof(m_pGameParameter->msParameter[2].payCoinCfg), pGameParameter->msParameter[2].payCoinCfg);
- StringCchCopy(m_pGameParameter->msParameter[2].ipLimitCfg, _countof(m_pGameParameter->msParameter[2].ipLimitCfg), pGameParameter->msParameter[2].ipLimitCfg);
- StringCchCopy(m_pGameParameter->msParameter[2].defaultDeskCfg, _countof(m_pGameParameter->msParameter[2].defaultDeskCfg), pGameParameter->msParameter[2].defaultDeskCfg);
- m_pGameParameter->msParameter[2].idNum = pGameParameter->msParameter[2].idNum;
-
- StringCchCopy(m_pGameParameter->msParameter[3].szgameTypeCfg, _countof(m_pGameParameter->msParameter[3].szgameTypeCfg), pGameParameter->msParameter[3].szgameTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[3].diJinCfg, _countof(m_pGameParameter->msParameter[3].diJinCfg), pGameParameter->msParameter[3].diJinCfg);
- StringCchCopy(m_pGameParameter->msParameter[3].payTypeCfg, _countof(m_pGameParameter->msParameter[3].payTypeCfg), pGameParameter->msParameter[3].payTypeCfg);
- StringCchCopy(m_pGameParameter->msParameter[3].juShuCfg, _countof(m_pGameParameter->msParameter[3].juShuCfg), pGameParameter->msParameter[3].juShuCfg);
- StringCchCopy(m_pGameParameter->msParameter[3].payCoinCfg, _countof(m_pGameParameter->msParameter[3].payCoinCfg), pGameParameter->msParameter[3].payCoinCfg);
- StringCchCopy(m_pGameParameter->msParameter[3].ipLimitCfg, _countof(m_pGameParameter->msParameter[3].ipLimitCfg), pGameParameter->msParameter[3].ipLimitCfg);
- StringCchCopy(m_pGameParameter->msParameter[3].defaultDeskCfg, _countof(m_pGameParameter->msParameter[3].defaultDeskCfg), pGameParameter->msParameter[3].defaultDeskCfg);
- m_pGameParameter->msParameter[3].idNum = pGameParameter->msParameter[3].idNum;*/
-
-
- ////版本效验
- //if (VERSION_EFFICACY == TRUE)
- //{
- // //版本判断
- // bool bVersionInvalid = false;
- // if (m_pGameParameter->dwClientVersion != m_pGameServiceAttrib->dwClientVersion) bVersionInvalid = true;
- // if (m_pGameParameter->dwServerVersion != m_pGameServiceAttrib->dwServerVersion) bVersionInvalid = true;
-
- // //提示信息
- // if (bVersionInvalid == true)
- // {
- // CTraceService::TraceString(TEXT("平台数据库服务组件版本注册信息与当前组件版本信息不一致"), TraceLevel_Warning);
- // }
- //}
-
- //获取状态
- CServiceUnits* pServiceUnits = CServiceUnits::g_pServiceUnits;
- enServiceStatus ServiceStatus = pServiceUnits->GetServiceStatus();
- //事件通知
- if (ServiceStatus != ServiceStatus_Service)
- {
- CP_ControlResult ControlResult;
- ControlResult.cbSuccess = ER_SUCCESS;
- SendUIControlPacket(UI_SERVICE_CONFIG_RESULT, &ControlResult, sizeof(ControlResult));
- }
-
- return true;
- }
-
- //列表信息
- //bool CAttemperEngineSink::OnDBGameColumnInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //变量定义
- // DBO_GR_GameColumnInfo * pGameColumnInfo = (DBO_GR_GameColumnInfo *)pData;
- // WORD wHeadSize = sizeof(DBO_GR_GameColumnInfo) - sizeof(pGameColumnInfo->ColumnItemInfo);
- //
- // //效验参数
- // ASSERT((wDataSize >= wHeadSize) && (wDataSize == (wHeadSize + pGameColumnInfo->cbColumnCount * sizeof(pGameColumnInfo->ColumnItemInfo[0]))));
- // if ((wDataSize < wHeadSize) || (wDataSize != (wHeadSize + pGameColumnInfo->cbColumnCount * sizeof(pGameColumnInfo->ColumnItemInfo[0])))) return false;
- //
- // //数据处理
- // if (pGameColumnInfo->cbColumnCount == 0)
- // {
- // //默认列表
- // }
- // else
- // {
- // //拷贝数据
- // m_DataConfigColumn.cbColumnCount = pGameColumnInfo->cbColumnCount;
- // CopyMemory(m_DataConfigColumn.ColumnItem, pGameColumnInfo->ColumnItemInfo, pGameColumnInfo->cbColumnCount * sizeof(pGameColumnInfo->ColumnItemInfo[0]));
- // }
- //
- // return true;
- //}
-
- ////机器信息
- //bool CAttemperEngineSink::OnDBGameAndroidInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //变量定义
- // DBO_GR_GameAndroidInfo * pGameAndroidInfo = (DBO_GR_GameAndroidInfo *)pData;
- // WORD wHeadSize = sizeof(DBO_GR_GameAndroidInfo) - sizeof(pGameAndroidInfo->AndroidAccountsInfo);
- //
- // //效验参数
- // ASSERT((wDataSize >= wHeadSize) && (wDataSize == (wHeadSize + pGameAndroidInfo->wAndroidCount * sizeof(pGameAndroidInfo->AndroidAccountsInfo[0]))));
- // if ((wDataSize < wHeadSize) || (wDataSize != (wHeadSize + pGameAndroidInfo->wAndroidCount * sizeof(pGameAndroidInfo->AndroidAccountsInfo[0])))) return false;
- //
- // //设置机器
- // if (pGameAndroidInfo->lResultCode == DB_SUCCESS)
- // {
- // m_AndroidUserManager.InsertAndroidInfo(pGameAndroidInfo->AndroidAccountsInfo, pGameAndroidInfo->wAndroidCount, pGameAndroidInfo->dwBatchID);
- // }
- //
- // return true;
- //}
- //
- ////机器参数
- //bool CAttemperEngineSink::OnDBGameAndroidParameter(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //变量定义
- // DBO_GR_GameAndroidParameter * pGameAndroidParameter = (DBO_GR_GameAndroidParameter *)pData;
- // WORD wHeadSize = sizeof(DBO_GR_GameAndroidParameter) - sizeof(pGameAndroidParameter->AndroidParameter);
- //
- // //效验参数
- // ASSERT((wDataSize >= wHeadSize) && (wDataSize == (wHeadSize + pGameAndroidParameter->wParameterCount * sizeof(pGameAndroidParameter->AndroidParameter[0]))));
- // if ((wDataSize < wHeadSize) || (wDataSize != (wHeadSize + pGameAndroidParameter->wParameterCount * sizeof(pGameAndroidParameter->AndroidParameter[0])))) return false;
- //
- // //设置机器
- // if (pGameAndroidParameter->lResultCode == DB_SUCCESS)
- // {
- // m_AndroidUserManager.AddAndroidParameter(pGameAndroidParameter->AndroidParameter, pGameAndroidParameter->wParameterCount);
- // }
- //
- // return true;
- //}
- //
- //道具信息
- //bool CAttemperEngineSink::OnDBGamePropertyInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //变量定义
- // DBO_GR_GamePropertyInfo * pGamePropertyInfo = (DBO_GR_GamePropertyInfo *)pData;
- // WORD wHeadSize = sizeof(DBO_GR_GamePropertyInfo) - sizeof(pGamePropertyInfo->PropertyInfo);
- //
- // //效验参数
- // ASSERT((wDataSize >= wHeadSize) && (wDataSize == (wHeadSize + pGamePropertyInfo->cbPropertyCount * sizeof(pGamePropertyInfo->PropertyInfo[0]))));
- // if ((wDataSize < wHeadSize) || (wDataSize != (wHeadSize + pGamePropertyInfo->cbPropertyCount * sizeof(pGamePropertyInfo->PropertyInfo[0])))) return false;
- //
- // //获取状态
- // CServiceUnits * pServiceUnits = CServiceUnits::g_pServiceUnits;
- // enServiceStatus ServiceStatus = pServiceUnits->GetServiceStatus();
- //
- // //设置道具
- // if (pGamePropertyInfo->lResultCode == DB_SUCCESS)
- // {
- // //设置管理
- // m_GamePropertyManager.SetGamePropertyInfo(pGamePropertyInfo->PropertyInfo, pGamePropertyInfo->cbPropertyCount);
- //
- // //拷贝数据
- // //m_DataConfigProperty.cbPropertyCount = pGamePropertyInfo->cbPropertyCount;
- // //CopyMemory(m_DataConfigProperty.PropertyInfo, pGamePropertyInfo->PropertyInfo, pGamePropertyInfo->cbPropertyCount * sizeof(pGamePropertyInfo->PropertyInfo[0]));
- // }
- //
- // //事件通知
- // if (ServiceStatus != ServiceStatus_Service)
- // {
- // CP_ControlResult ControlResult;
- // ControlResult.cbSuccess = ER_SUCCESS;
- // SendUIControlPacket(UI_SERVICE_CONFIG_RESULT, &ControlResult, sizeof(ControlResult));
- // }
- //
- // return true;
- //}
-
- ////会员参数
- //bool CAttemperEngineSink::OnDBGameMemberParameter(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //变量定义
- // DBO_GR_MemberParameter * pMemberParameter = (DBO_GR_MemberParameter *)pData;
- //
- // //拷贝数据
- // m_wMemberCount = pMemberParameter->wMemberCount;
- // CopyMemory(m_MemberParameter, pMemberParameter->MemberParameter, sizeof(tagMemberParameter)*m_wMemberCount);
- //
- // return true;
- //}
- //
- ////银行信息
- //bool CAttemperEngineSink::OnDBUserInsureInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //判断在线
- // tagBindParameter * pBindParameter = GetBindParameter(LOWORD(dwContextID));
- // if ((pBindParameter->dwSocketID != dwContextID) || (pBindParameter->pIServerUserItem == NULL)) return true;
- //
- // //获取用户
- // ASSERT(GetBindUserItem(LOWORD(dwContextID)) != NULL);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(LOWORD(dwContextID));
- //
- // //变量定义
- // DBO_GR_UserInsureInfo * pUserInsureInfo = (DBO_GR_UserInsureInfo *)pData;
- //
- // //变量定义
- // CMD_GR_S_UserInsureInfo UserInsureInfo;
- // ZeroMemory(&UserInsureInfo, sizeof(UserInsureInfo));
- //
- // //构造数据
- // UserInsureInfo.cbActivityGame = pUserInsureInfo->cbActivityGame;
- // UserInsureInfo.cbEnjoinTransfer = pUserInsureInfo->cbEnjoinTransfer;
- // UserInsureInfo.wRevenueTake = pUserInsureInfo->wRevenueTake;
- // UserInsureInfo.wRevenueTransfer = pUserInsureInfo->wRevenueTransfer;
- // UserInsureInfo.wRevenueTransferMember = pUserInsureInfo->wRevenueTransferMember;
- // UserInsureInfo.wServerID = pUserInsureInfo->wServerID;
- // UserInsureInfo.lUserInsure = pUserInsureInfo->lUserInsure;
- // UserInsureInfo.lUserScore += pIServerUserItem->GetUserScore();
- // UserInsureInfo.lUserScore += pIServerUserItem->GetTrusteeScore();
- // UserInsureInfo.lUserScore += pIServerUserItem->GetFrozenedScore();
- // UserInsureInfo.lTransferPrerequisite = pUserInsureInfo->lTransferPrerequisite;
- //
- // DWORD dTableNum = 0;
- // if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- // {
- // auto pat = GetTableFrame(pIServerUserItem->GetTableID());
- //
- // TCHAR szTemp[32] = { 0 };
- // if (pat) pat->GetPrivateTableID(szTemp, 32);
- // CString csTemp = szTemp;
- //
- // if (pat != nullptr && !csTemp.IsEmpty())
- // {
- // dTableNum = _wtol(csTemp);
- // }
- // }
- //
- // CString csSend;
- // CString csTest = AfxGetAppName();
- //
- // csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_INSURE, SUB_GR_USER_INSURE_INFO);
- // //OutputDebugString(csSend);
- //
- // Commend::ToShow(this, MDM_GR_INSURE, SUB_GR_USER_INSURE_INFO, &UserInsureInfo, sizeof(UserInsureInfo), dTableNum, pIServerUserItem == NULL ? NULL : pIServerUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- //
- //
- // //发送数据
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_INSURE, SUB_GR_USER_INSURE_INFO, &UserInsureInfo, sizeof(UserInsureInfo));
- //
- // return true;
- //}
- //
- ////银行成功
- //bool CAttemperEngineSink::OnDBUserInsureSuccess(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //判断在线
- // tagBindParameter * pBindParameter = GetBindParameter(LOWORD(dwContextID));
- // if ((pBindParameter->dwSocketID != dwContextID) || (pBindParameter->pIServerUserItem == NULL)) return true;
- //
- // //获取用户
- // ASSERT(GetBindUserItem(LOWORD(dwContextID)) != NULL);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(LOWORD(dwContextID));
- //
- // //变量定义
- // DBO_GR_UserInsureSuccess * pUserInsureSuccess = (DBO_GR_UserInsureSuccess *)pData;
- //
- // //变量定义
- // SCORE lFrozenedScore = pUserInsureSuccess->lFrozenedScore;
- // SCORE lInsureRevenue = pUserInsureSuccess->lInsureRevenue;
- // SCORE lVariationScore = pUserInsureSuccess->lVariationScore;
- // SCORE lVariationInsure = pUserInsureSuccess->lVariationInsure;
- //
- // //解冻积分
- // if ((lFrozenedScore > 0L) && (pIServerUserItem->UnFrozenedUserScore(lFrozenedScore) == false))
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // //银行操作
- // if (pIServerUserItem->ModifyUserInsure(lVariationScore, lVariationInsure, lInsureRevenue) == false)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // //变量定义
- // CMD_GR_S_UserInsureSuccess UserInsureSuccess;
- // ZeroMemory(&UserInsureSuccess, sizeof(UserInsureSuccess));
- //
- // //构造变量
- // UserInsureSuccess.cbActivityGame = pUserInsureSuccess->cbActivityGame;
- // UserInsureSuccess.lUserScore = pIServerUserItem->GetUserScore() + pIServerUserItem->GetTrusteeScore();
- // UserInsureSuccess.lUserInsure = pUserInsureSuccess->lSourceInsure + pUserInsureSuccess->lVariationInsure;
- // lstrcpyn(UserInsureSuccess.szDescribeString, pUserInsureSuccess->szDescribeString, CountArray(UserInsureSuccess.szDescribeString));
- //
- // //发送数据
- // WORD wDescribe = CountStringBuffer(UserInsureSuccess.szDescribeString);
- // WORD wHeadSize = sizeof(UserInsureSuccess) - sizeof(UserInsureSuccess.szDescribeString);
- // SendData(pIServerUserItem, MDM_GR_INSURE, SUB_GR_USER_INSURE_SUCCESS, &UserInsureSuccess, wHeadSize + wDescribe);
- //
- // return true;
- //}
- //
- ////操作失败
- //bool CAttemperEngineSink::OnDBUserInsureFailure(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //判断在线
- // tagBindParameter * pBindParameter = GetBindParameter(LOWORD(dwContextID));
- // if ((pBindParameter->dwSocketID != dwContextID) || (pBindParameter->pIServerUserItem == NULL)) return true;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwContextID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //发送错误
- // DBO_GR_UserInsureFailure * pUserInsureFailure = (DBO_GR_UserInsureFailure *)pData;
- // SendInsureFailure(pIServerUserItem, pUserInsureFailure->szDescribeString, pUserInsureFailure->lResultCode, pUserInsureFailure->cbActivityGame);
- //
- // //解冻积分
- // if ((pUserInsureFailure->lFrozenedScore > 0L) && (pIServerUserItem->UnFrozenedUserScore(pUserInsureFailure->lFrozenedScore) == false))
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // return true;
- //}
- //
- ////用户信息
- //bool CAttemperEngineSink::OnDBUserInsureUserInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //判断在线
- // tagBindParameter * pBindParameter = GetBindParameter(LOWORD(dwContextID));
- // if ((pBindParameter->dwSocketID != dwContextID) || (pBindParameter->pIServerUserItem == NULL)) return true;
- //
- // //获取用户
- // ASSERT(GetBindUserItem(LOWORD(dwContextID)) != NULL);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(LOWORD(dwContextID));
- //
- // //变量定义
- // DBO_GR_UserTransferUserInfo * pTransferUserInfo = (DBO_GR_UserTransferUserInfo *)pData;
- //
- // //变量定义
- // CMD_GR_S_UserTransferUserInfo UserTransferUserInfo;
- // ZeroMemory(&UserTransferUserInfo, sizeof(UserTransferUserInfo));
- //
- // //构造变量
- // UserTransferUserInfo.cbActivityGame = pTransferUserInfo->cbActivityGame;
- // UserTransferUserInfo.dwTargetGameID = pTransferUserInfo->dwGameID;
- // lstrcpyn(UserTransferUserInfo.szAccounts, pTransferUserInfo->szAccounts, CountArray(UserTransferUserInfo.szAccounts));
- //
- // //发送数据
- // SendData(pIServerUserItem, MDM_GR_INSURE, SUB_GR_USER_TRANSFER_USER_INFO, &UserTransferUserInfo, sizeof(UserTransferUserInfo));
- //
- // return true;
- //}
- //
- ////开通结果
- //bool CAttemperEngineSink::OnDBUserInsureEnableResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //判断在线
- // tagBindParameter * pBindParameter = GetBindParameter(LOWORD(dwContextID));
- // if ((pBindParameter->dwSocketID != dwContextID) || (pBindParameter->pIServerUserItem == NULL)) return true;
- //
- // //获取用户
- // ASSERT(GetBindUserItem(LOWORD(dwContextID)) != NULL);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(LOWORD(dwContextID));
- //
- // //变量定义
- // DBO_GR_UserInsureEnableResult * pUserInsureEnableResult = (DBO_GR_UserInsureEnableResult *)pData;
- //
- // //变量定义
- // CMD_GR_S_UserInsureEnableResult UserInsureEnableResult;
- // ZeroMemory(&UserInsureEnableResult, sizeof(UserInsureEnableResult));
- //
- // //构造变量
- // UserInsureEnableResult.cbInsureEnabled = pUserInsureEnableResult->cbInsureEnabled;
- // lstrcpyn(UserInsureEnableResult.szDescribeString, pUserInsureEnableResult->szDescribeString, CountArray(UserInsureEnableResult.szDescribeString));
- //
- // //计算大小
- // WORD wHeadSize = CountStringBuffer(UserInsureEnableResult.szDescribeString);
- // wHeadSize += sizeof(UserInsureEnableResult) - sizeof(UserInsureEnableResult.szDescribeString);
- //
- // //发送数据
- // SendData(pIServerUserItem, MDM_GR_INSURE, SUB_GR_USER_INSURE_ENABLE_RESULT, &UserInsureEnableResult, wHeadSize);
- //
- // return true;
- //}
-
- //直接扣除游戏豆
- bool CAttemperEngineSink::OnDBR_GR_USER_ZHIJIE_BEANS_RETURNSEND(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- DBO_GR_UserReduceResult* pInfo = (DBO_GR_UserReduceResult*)pData;
- IServerUserItem * pIServerUserItem = SearchUserItem(pInfo->dwUserID);
-
- if (pIServerUserItem == NULL)
- {
- //用户不在此服务器上,上报中央服务器。
- return false;
- }
-
- if (0 != pInfo->result)
- {
- //扣款失败,应该退出或删除创建的房间。此处尚未处理
-
- SendRequestFailure(pIServerUserItem, pInfo->szDescribeString, pInfo->result);
- return true;
- }
-
- if (IsJC(pIServerUserItem->GetUserID()))
- {
- CString csTestB;
- csTestB.Format(_T("OnDBR_GR_USER_ZHIJIE_BEANS_RETURNSEND钻石信息变化 -> 原 LeiJiZuanShiID:%d变%d,UserID=%d")
- , pIServerUserItem->GetUserInfo()->LeiJiZuanShi
- , pIServerUserItem->GetUserInfo()->LeiJiZuanShi + pInfo->dwCurrBeans
- , pIServerUserItem->GetUserID());
-
- CTraceService::TraceString(csTestB, TraceLevel_Warning);
- }
-
- pIServerUserItem->GetUserInfo()->dwBean = pInfo->dwCurrBeans;
- pIServerUserItem->GetUserInfo()->LeiJiZuanShi = pIServerUserItem->GetUserInfo()->LeiJiZuanShi + pInfo->dwCurrBeans;
- //变量定义
- CMD_GR_UserBean UserBeans;
- ZeroMemory(&UserBeans, sizeof(UserBeans));
-
- //构造变量
- UserBeans.dwCurrBeans = pInfo->dwCurrBeans;
-
- UserInfo::PB_CS_S_UserBean Bean;
- Bean.set_dwcurrbeans(UserBeans.dwCurrBeans);
- //发送数据
- std::string pbdata = Bean.SerializePartialAsString();
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_BEAN, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
- //直接扣除游戏豆
- bool CAttemperEngineSink::OnDBR_GR_USER_ZHIJIE_BEANS_RETURN(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- if (m_pITCPNetworkEngine) m_pITCPNetworkEngine->OnTBDataEvent(TB_GR_ZJXF, dwContextID, pData, wDataSize);
-
- return true;
- }
-
- //消耗元宝不需要通知客户
- bool CAttemperEngineSink::OnDBR_GR_USER_REDUCE_BEANS_RETURNSEND(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- DBO_GR_UserReduceResult* pInfo = (DBO_GR_UserReduceResult*)pData;
- IServerUserItem * pIServerUserItem = SearchUserItem(pInfo->dwUserID);
-
- if (pIServerUserItem == NULL)
- {
- //更新房间内元宝冻结值
- auto pTableFrame = GetTableFrame(pInfo->dwTable);
- if (0 == pInfo->result && pTableFrame)
- {
- if (pTableFrame->SetUserLockData(pInfo->dwUserID, 0) == true) return true;
- }
- return false;
- }
-
- if (0 != pInfo->result)
- {
- //消耗失败,此处需要记录日志
- SendRequestFailure(pIServerUserItem, pInfo->szDescribeString, pInfo->result);
- return true;
- }
-
- pIServerUserItem->GetUserInfo()->dwBean = pInfo->dwCurrBeans;
-
- //变量定义
- CMD_GR_UserBean UserBeans;
- ZeroMemory(&UserBeans, sizeof(UserBeans));
-
- if (IsJC(pIServerUserItem->GetUserID()) && pIServerUserItem->GetUserInfo()->LeiJiZuanShi + pInfo->dwCurrBeans == 0)
- {
- CString csTestB;
- csTestB.Format(_T("OnDBR_GR_USER_REDUCE_BEANS_RETURNSEND钻石信息变化 -> 原 LeiJiZuanShiID:%d变%d,UserID=%d")
- , pIServerUserItem->GetUserInfo()->LeiJiZuanShi
- , pIServerUserItem->GetUserInfo()->LeiJiZuanShi + pInfo->dwCurrBeans
- , pIServerUserItem->GetUserID());
-
- CTraceService::TraceString(csTestB, TraceLevel_Warning);
- }
-
- //构造变量
- UserBeans.dwCurrBeans = pInfo->dwCurrBeans;
- pIServerUserItem->GetUserInfo()->LeiJiZuanShi = pIServerUserItem->GetUserInfo()->LeiJiZuanShi + pInfo->dwCurrBeans;
- //发送数据
- //SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_BEAN, &UserBeans, sizeof(UserBeans));
-
- //更新房间内元宝冻结值
- auto pTableFrame = GetTableFrame(pInfo->dwTable);
-
- if (pTableFrame)
- {
- if (pTableFrame->SetUserLockData(pInfo->dwUserID, 0) == true) return true;
- }
- return true;
- }
- //消耗元宝不需要通知
- bool CAttemperEngineSink::OnDBR_GR_USER_REDUCE_BEANS_RETURN(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- if (m_pITCPNetworkEngine) m_pITCPNetworkEngine->OnTBDataEvent(TB_GR_XF, dwContextID, pData, wDataSize);
-
- return true;
- }
- //冻结执行
- bool CAttemperEngineSink::OnDBR_GR_USER_LOCK_BEANS_RETURNSEND(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- DBO_GR_UserReduceResult* pInfo = (DBO_GR_UserReduceResult*)pData;
- IServerUserItem * pIServerUserItem = SearchUserItem(pInfo->dwUserID);
-
- if (0 != pInfo->result)
- {
- auto pTableFrame = GetTableFrame(pInfo->dwTable);
- if (pTableFrame == nullptr)
- {
- return false;
- }
- pTableFrame->DeletePrivateTableNow();
- return true;
- }
-
- if (pIServerUserItem == NULL)
- {
- //用户不在此服务器上,上报中央服务器。
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_UPDATAOWNBEANS_LOCK, pData, wDataSize/*, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
- //更新房间内元宝冻结值
- auto pTableFrame = GetTableFrame(pInfo->dwTable);
- if (0 == pInfo->result && pTableFrame)
- {
- if (pTableFrame->SetUserLockData(pInfo->dwUserID, pInfo->dwActiveBeans) == true) return true;
- }
- return false;
- }
-
-
- pIServerUserItem->GetUserInfo()->dwBean = pInfo->dwCurrBeans;
-
- //变量定义
- CMD_GR_UserBean UserBeans;
- ZeroMemory(&UserBeans, sizeof(UserBeans));
-
- //构造变量
- UserBeans.dwCurrBeans = pInfo->dwCurrBeans;
-
- UserInfo::PB_CS_S_UserBean Bean;
- Bean.set_dwcurrbeans(UserBeans.dwCurrBeans);
- //发送数据
- std::string pbdata = Bean.SerializePartialAsString();
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_BEAN, (void*)pbdata.c_str(), pbdata.length());
-
- //更新房间内元宝冻结值
- auto pTableFrame = GetTableFrame(pInfo->dwTable);
-
- if (pTableFrame)
- {
- if (pTableFrame->SetUserLockData(pIServerUserItem->GetUserID(), pInfo->dwActiveBeans) == true) return true;
- }
-
- return true;
- }
- //冻结元宝通知客户
- bool CAttemperEngineSink::OnDBR_GR_USER_LOCK_BEANS_RETURN(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- if (m_pITCPNetworkEngine) m_pITCPNetworkEngine->OnTBDataEvent(TB_GR_LOCK, dwContextID, pData, wDataSize);
-
- return true;
- }
- //解冻元宝通知客户
- bool CAttemperEngineSink::OnDBR_GR_USER_UNLOCK_BEANS_RETURN(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- if (m_pITCPNetworkEngine) m_pITCPNetworkEngine->OnTBDataEvent(TB_GR_UNLOCK, dwContextID, pData, wDataSize);
-
- return true;
- }
- //解冻执行
- bool CAttemperEngineSink::OnDBR_GR_USER_UNLOCK_BEANS_RETURNSEND(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- DBO_GR_UserReduceResult* pInfo = (DBO_GR_UserReduceResult*)pData;
- IServerUserItem * pIServerUserItem = SearchUserItem(pInfo->dwUserID);
-
- if (pIServerUserItem == NULL)
- {
- //用户不在此服务器上,上报中央服务器。
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_UPDATAOWNBEANS_UNLOCK, pData, wDataSize/*, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
- //更新房间内元宝冻结值
- auto pTableFrame = GetTableFrame(pInfo->dwTable);
- if (0 == pInfo->result && pTableFrame)
- {
- if (pTableFrame->SetUserLockData(pInfo->dwUserID, 0) == true) return true;
- }
- return false;
- }
-
- if (0 != pInfo->result)
- {
- //解冻失败,此处需要记录日志
- SendRequestFailure(pIServerUserItem, pInfo->szDescribeString, pInfo->result);
- return true;
- }
-
- pIServerUserItem->GetUserInfo()->dwBean = pInfo->dwCurrBeans;
-
- //变量定义
- CMD_GR_UserBean UserBeans;
- ZeroMemory(&UserBeans, sizeof(UserBeans));
- //构造变量
- UserBeans.dwCurrBeans = pInfo->dwCurrBeans;
-
- UserInfo::PB_CS_S_UserBean Bean;
- Bean.set_dwcurrbeans(UserBeans.dwCurrBeans);
- //发送数据
- std::string pbdata = Bean.SerializePartialAsString();
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_BEAN, (void*)pbdata.c_str(), pbdata.length());
-
- //更新房间内元宝冻结值
- auto pTableFrame = GetTableFrame(pInfo->dwTable);
-
- if (pTableFrame)
- {
- if (pTableFrame->SetUserLockData(pIServerUserItem->GetUserID(), 0) == true) return true;
- }
-
- return true;
- }
-
- //道具成功
- //bool CAttemperEngineSink::OnDBPropertySuccess(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //变量定义
- // DBO_GR_S_PropertySuccess * pPropertySuccess = (DBO_GR_S_PropertySuccess *)pData;
- //
- // //获取用户
- // IServerUserItem * pISourceUserItem = m_ServerUserManager.SearchUserItem(pPropertySuccess->dwSourceUserID);
- // IServerUserItem * pITargetUserItem = m_ServerUserManager.SearchUserItem(pPropertySuccess->dwTargetUserID);
- //
- // //赠送用户
- // if (pISourceUserItem != NULL)
- // {
- // //变量定义
- // SCORE lFrozenedScore = pPropertySuccess->lFrozenedScore;
- //
- // //解冻积分
- // if ((lFrozenedScore > 0L) && (pISourceUserItem->UnFrozenedUserScore(lFrozenedScore) == false))
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- // }
- //
- // //更新魅力
- // if (pISourceUserItem != NULL)
- // {
- // pISourceUserItem->ModifyUserProperty(0, pPropertySuccess->lSendLoveLiness);
- // }
- //
- // //更新魅力
- // if (pITargetUserItem != NULL)
- // {
- // pITargetUserItem->ModifyUserProperty(0, pPropertySuccess->lRecvLoveLiness);
- // }
- //
- // //变量定义
- // DWORD dwCurrentTime = (DWORD)time(NULL);
- // tagUserProperty * pUserProperty = pITargetUserItem->GetUserProperty();
- //
- // //道具处理
- // switch (pPropertySuccess->wPropertyIndex)
- // {
- // case PROPERTY_ID_TWO_CARD: //双倍积分
- // {
- // //使用判断
- // if ((pUserProperty->wPropertyUseMark&PT_USE_MARK_DOUBLE_SCORE) != 0)
- // {
- // //变量定义
- // DWORD dwValidTime = pUserProperty->PropertyInfo[0].wPropertyCount*pUserProperty->PropertyInfo[0].dwValidNum;
- // if (pUserProperty->PropertyInfo[0].dwEffectTime + dwValidTime < dwCurrentTime)
- // {
- // pUserProperty->PropertyInfo[0].dwEffectTime = dwCurrentTime;
- // pUserProperty->PropertyInfo[0].wPropertyCount = pPropertySuccess->wItemCount;
- // pUserProperty->PropertyInfo[0].dwValidNum = VALID_TIME_DOUBLE_SCORE;
- // }
- // else
- // {
- // //数目累加
- // pUserProperty->PropertyInfo[0].wPropertyCount += pPropertySuccess->wItemCount;
- // }
- // }
- // else
- // {
- // //设置信息
- // pUserProperty->PropertyInfo[0].dwEffectTime = dwCurrentTime;
- // pUserProperty->PropertyInfo[0].wPropertyCount = pPropertySuccess->wItemCount;
- // pUserProperty->PropertyInfo[0].dwValidNum = VALID_TIME_DOUBLE_SCORE;
- // pUserProperty->wPropertyUseMark |= PT_USE_MARK_DOUBLE_SCORE;
- // }
- //
- // break;
- // }
- // case PROPERTY_ID_FOUR_CARD: //四倍积分
- // {
- // //使用判断
- // if ((pUserProperty->wPropertyUseMark&PT_USE_MARK_FOURE_SCORE) != 0)
- // {
- // //变量定义
- // DWORD dwValidTime = pUserProperty->PropertyInfo[1].wPropertyCount*pUserProperty->PropertyInfo[1].dwValidNum;
- // if (pUserProperty->PropertyInfo[1].dwEffectTime + dwValidTime < dwCurrentTime)
- // {
- // pUserProperty->PropertyInfo[1].dwEffectTime = dwCurrentTime;
- // pUserProperty->PropertyInfo[1].wPropertyCount = pPropertySuccess->wItemCount;
- // pUserProperty->PropertyInfo[1].dwValidNum = VALID_TIME_FOUR_SCORE;
- // }
- // else
- // {
- // //数目累加
- // pUserProperty->PropertyInfo[1].wPropertyCount += pPropertySuccess->wItemCount;
- // }
- // }
- // else
- // {
- // //设置信息
- // pUserProperty->PropertyInfo[1].dwEffectTime = dwCurrentTime;
- // pUserProperty->PropertyInfo[1].wPropertyCount = pPropertySuccess->wItemCount;
- // pUserProperty->PropertyInfo[1].dwValidNum = VALID_TIME_FOUR_SCORE;
- // pUserProperty->wPropertyUseMark |= PT_USE_MARK_FOURE_SCORE;
- // }
- // break;
- // }
- // case PROPERTY_ID_SCORE_CLEAR: //负分清零
- // {
- // //变量定义
- // SCORE lCurrScore = pITargetUserItem->GetUserScore();
- // if (lCurrScore < 0)
- // {
- // //用户信息
- // tagUserInfo * pUserInfo = pITargetUserItem->GetUserInfo();
- // if (pUserInfo == NULL) return true;
- //
- // //修改积分
- // pUserInfo->lScore = 0;
- // }
- // break;
- // }
- // case PROPERTY_ID_ESCAPE_CLEAR: //逃跑清零
- // {
- // //用户信息
- // tagUserInfo * pUserInfo = pITargetUserItem->GetUserInfo();
- // if (pUserInfo == NULL) return true;
- //
- // //修改逃跑率
- // if (pUserInfo->dwFleeCount > 0)
- // {
- // pUserInfo->dwFleeCount = 0;
- // }
- //
- // break;
- // }
- // case PROPERTY_ID_GUARDKICK_CARD: //防踢卡
- // {
- // //使用判断
- // if ((pUserProperty->wPropertyUseMark&PT_USE_MARK_GUARDKICK_CARD) != 0)
- // {
- // //变量定义
- // DWORD dwValidTime = pUserProperty->PropertyInfo[2].wPropertyCount*pUserProperty->PropertyInfo[2].dwValidNum;
- // if (pUserProperty->PropertyInfo[2].dwEffectTime + dwValidTime < dwCurrentTime)
- // {
- // pUserProperty->PropertyInfo[2].dwEffectTime = dwCurrentTime;
- // pUserProperty->PropertyInfo[2].wPropertyCount = pPropertySuccess->wItemCount;
- // pUserProperty->PropertyInfo[2].dwValidNum = VALID_TIME_GUARDKICK_CARD;
- // }
- // else
- // {
- // //数目累加
- // pUserProperty->PropertyInfo[2].wPropertyCount += pPropertySuccess->wItemCount;
- // }
- // }
- // else
- // {
- // //设置信息
- // pUserProperty->PropertyInfo[2].dwEffectTime = dwCurrentTime;
- // pUserProperty->PropertyInfo[2].wPropertyCount = pPropertySuccess->wItemCount;
- // pUserProperty->PropertyInfo[2].dwValidNum = VALID_TIME_GUARDKICK_CARD;
- // pUserProperty->wPropertyUseMark |= PT_USE_MARK_GUARDKICK_CARD;
- // }
- //
- // break;
- // }
- // case PROPERTY_ID_POSSESS: //附身符
- // {
- // //使用判断
- // if ((pUserProperty->wPropertyUseMark&PT_USE_MARK_POSSESS) != 0)
- // {
- // //变量定义
- // DWORD dwValidTime = pUserProperty->PropertyInfo[3].wPropertyCount*pUserProperty->PropertyInfo[3].dwValidNum;
- // if (pUserProperty->PropertyInfo[3].dwEffectTime + dwValidTime < dwCurrentTime)
- // {
- // pUserProperty->PropertyInfo[3].dwEffectTime = dwCurrentTime;
- // pUserProperty->PropertyInfo[3].wPropertyCount = pPropertySuccess->wItemCount;
- // pUserProperty->PropertyInfo[3].dwValidNum = VALID_TIME_POSSESS;
- // }
- // else
- // {
- // //数目累加
- // pUserProperty->PropertyInfo[3].wPropertyCount += pPropertySuccess->wItemCount;
- // }
- // }
- // else
- // {
- // //设置信息
- // pUserProperty->PropertyInfo[3].dwEffectTime = dwCurrentTime;
- // pUserProperty->PropertyInfo[3].wPropertyCount = pPropertySuccess->wItemCount;
- // pUserProperty->PropertyInfo[3].dwValidNum = VALID_TIME_POSSESS;
- // pUserProperty->wPropertyUseMark |= PT_USE_MARK_POSSESS;
- // }
- //
- // break;
- // }
- // case PROPERTY_ID_BLUERING_CARD: //蓝钻会员
- // case PROPERTY_ID_YELLOWRING_CARD://黄钻会员
- // case PROPERTY_ID_WHITERING_CARD: //白钻会员
- // case PROPERTY_ID_REDRING_CARD: //红钻会员
- // case PROPERTY_ID_VIPROOM_CARD: //VIP会员
- // {
- // //用户信息
- // tagUserInfo * pUserInfo = pITargetUserItem->GetUserInfo();
- // if (pUserInfo == NULL) return true;
- //
- // //更新会员
- // pUserInfo->cbMemberOrder = pPropertySuccess->cbMemberOrder;
- //
- // //修改权限
- // pITargetUserItem->ModifyUserRight(pPropertySuccess->dwUserRight, 0);
- //
- // //发送消息
- // SendPropertyEffect(pITargetUserItem);
- //
- // break;
- // }
- // default: // 全部礼物
- // {
- // break;
- // }
- // }
- //
- // //消费方式
- // if (pPropertySuccess->cbConsumeScore == FALSE)
- // {
- // pISourceUserItem->ModifyUserInsure(0, -pPropertySuccess->lConsumeGold, 0);
- // }
- //
- // //喇叭判断
- // if (pPropertySuccess->wPropertyIndex == PROPERTY_ID_TRUMPET || pPropertySuccess->wPropertyIndex == PROPERTY_ID_TYPHON)
- // return true;
- //
- // //变量定义
- // CMD_GR_S_PropertySuccess PropertySuccess;
- // ZeroMemory(&PropertySuccess, sizeof(PropertySuccess));
- //
- // //设置变量
- // PropertySuccess.cbRequestArea = pPropertySuccess->cbRequestArea;
- // PropertySuccess.wItemCount = pPropertySuccess->wItemCount;
- // PropertySuccess.wPropertyIndex = pPropertySuccess->wPropertyIndex;
- // PropertySuccess.dwSourceUserID = pPropertySuccess->dwSourceUserID;
- // PropertySuccess.dwTargetUserID = pPropertySuccess->dwTargetUserID;
- //
- // //发送消息
- // if (pISourceUserItem != NULL)
- // {
- // SendData(pISourceUserItem, MDM_GR_USER, SUB_GR_PROPERTY_SUCCESS, &PropertySuccess, sizeof(PropertySuccess));
- // }
- //
- // //发送消息
- // if (pITargetUserItem != NULL && pITargetUserItem != pISourceUserItem)
- // {
- // SendData(pITargetUserItem, MDM_GR_USER, SUB_GR_PROPERTY_SUCCESS, &PropertySuccess, sizeof(PropertySuccess));
- // }
- //
- // //广播礼物
- // if (GetPropertyType(pPropertySuccess->wPropertyIndex) == PT_TYPE_PRESENT)
- // SendPropertyMessage(PropertySuccess.dwSourceUserID, PropertySuccess.dwTargetUserID, PropertySuccess.wPropertyIndex,
- // PropertySuccess.wItemCount);
- //
- // return true;
- //}
- //
- ////道具失败
- //bool CAttemperEngineSink::OnDBPropertyFailure(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //参数校验
- // ASSERT(wDataSize == sizeof(DBO_GR_PropertyFailure));
- // if (wDataSize != sizeof(DBO_GR_PropertyFailure)) return false;
- //
- // //提取数据
- // DBO_GR_PropertyFailure * pPropertyFailure = (DBO_GR_PropertyFailure *)pData;
- // if (pPropertyFailure == NULL) return false;
- //
- // //变量定义
- // WORD wBindIndex = LOWORD(dwContextID);
- // tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
- // if (pBindParameter == NULL) return false;
- // if (pBindParameter->pIServerUserItem == NULL) return false;
- //
- // //发送消息
- // return SendPropertyFailure(pBindParameter->pIServerUserItem, pPropertyFailure->szDescribeString, 0L, pPropertyFailure->cbRequestArea);
- //}
- //
- ////购买结果
- //bool CAttemperEngineSink::OnDBPurchaseResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //获取用户
- // WORD wBindIndex = LOWORD(dwContextID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //提取数据
- // DBO_GR_PurchaseResult * pPurchaseResult = (DBO_GR_PurchaseResult *)pData;
- //
- // //构造结构
- // CMD_GR_PurchaseResult PurchaseResult;
- // ZeroMemory(&PurchaseResult, sizeof(PurchaseResult));
- //
- // //设置变量
- // PurchaseResult.bSuccessed = pPurchaseResult->bSuccessed;
- // PurchaseResult.lCurrScore = pPurchaseResult->lCurrScore;
- // PurchaseResult.cbMemberOrder = pPurchaseResult->cbMemberOrder;
- // lstrcpyn(PurchaseResult.szNotifyContent, pPurchaseResult->szNotifyContent, CountArray(PurchaseResult.szNotifyContent));
- //
- // //发送数据
- // WORD wSendDataSize = sizeof(PurchaseResult) - sizeof(PurchaseResult.szNotifyContent);
- // wSendDataSize += CountStringBuffer(PurchaseResult.szNotifyContent);
- //
- // DWORD dTableNum = 0;
- // if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- // {
- // auto pat = GetTableFrame(pIServerUserItem->GetTableID());
- //
- // TCHAR szTemp[32] = { 0 };
- // if (pat) pat->GetPrivateTableID(szTemp, 32);
- // CString csTemp = szTemp;
- //
- // if (pat != nullptr && !csTemp.IsEmpty())
- // {
- // dTableNum = _wtol(csTemp);
- // }
- // }
- //
- // CString csSend;
- // CString csTest = AfxGetAppName();
- //
- // csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_EXCHANGE, SUB_GR_PURCHASE_RESULT);
- // //OutputDebugString(csSend);
- // Commend::ToShow(this, MDM_GR_EXCHANGE, SUB_GR_PURCHASE_RESULT, pData, wDataSize, dTableNum, pIServerUserItem == NULL ? NULL : pIServerUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- //
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_EXCHANGE, SUB_GR_PURCHASE_RESULT, &PurchaseResult, wSendDataSize);
- //
- // //结果判断
- // if (PurchaseResult.bSuccessed == true)
- // {
- // //设置权限
- // pIServerUserItem->ModifyUserRight(pPurchaseResult->dwUserRight, 0, UR_KIND_SERVER);
- //
- // //更新游戏币
- // if (m_pGameServiceOption->wServerType == GAME_GENRE_GOLD)
- // {
- // pIServerUserItem->ModifyUserInsure(PurchaseResult.lCurrScore - pIServerUserItem->GetUserScore(), 0, 0);
- // }
- // }
- //
- // return true;
- //}
- //
- ////兑换结果(钻石交换金币的结果)
- //bool CAttemperEngineSink::OnDBExChangeResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //获取用户
- // WORD wBindIndex = LOWORD(dwContextID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //提取数据
- // DBO_GR_ExchangeResult * pExchangeResult = (DBO_GR_ExchangeResult *)pData;
- //
- // //构造结构
- // //CMD_GP_ExchangeResult ExchangeResult;
- // //ZeroMemory(&ExchangeResult, sizeof(ExchangeResult));
- //
- // ////设置变量
- // //ExchangeResult.bSuccessed = pExchangeResult->bSuccessed;
- // //ExchangeResult.lCurrScore = pExchangeResult->lCurrScore;
- // //ExchangeResult.lCurrIngot = pExchangeResult->lCurrIngot;
- // //lstrcpyn(ExchangeResult.szNotifyContent, pExchangeResult->szNotifyContent, CountArray(ExchangeResult.szNotifyContent));
- //
- // //TRACE(L"\n***兑换结果 UserID=%d lCurrIngot=%lld lCurrScore=%llld\n", pIServerUserItem->GetUserID(), ExchangeResult.lCurrIngot, ExchangeResult.lCurrScore);
- //
- // ////发送数据
- // //WORD wSendDataSize = sizeof(ExchangeResult) - sizeof(ExchangeResult.szNotifyContent);
- // //wSendDataSize += CountStringBuffer(ExchangeResult.szNotifyContent);
- //
- // DWORD dTableNum = 0;
- // if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- // {
- // auto pat = GetTableFrame(pIServerUserItem->GetTableID());
- // if (pat != nullptr && !pat->GetPrivateTableID().empty())
- // {
- // dTableNum = _wtol(pat->GetPrivateTableID().c_str());
- // }
- // }
- //
- // CString csSend;
- // CString csTest = AfxGetAppName();
- //
- // csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_EXCHANGE, SUB_GR_EXCHANGE_RESULT);
- // //OutputDebugString(csSend);
- // Commend::ToShow(this, MDM_GR_EXCHANGE, SUB_GR_EXCHANGE_RESULT, pData, wDataSize, dTableNum, pIServerUserItem == NULL ? NULL : pIServerUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- //
- // //m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_EXCHANGE, SUB_GR_EXCHANGE_RESULT, &ExchangeResult, sizeof(ExchangeResult));
- //
- // //TRACE(L"\n***sizeof(ExchangeResult)=%d, sizeof(SCORE)=%d \n", sizeof(ExchangeResult), sizeof(SCORE));
- //
- // /////[+++兑换成功,更新下
- // //if (ExchangeResult.bSuccessed)
- // //{
- // // pIServerUserItem->GetUserInfo()->lScore = ExchangeResult.lCurrScore;
- // // pIServerUserItem->GetUserInfo()->dwBean = ExchangeResult.lCurrIngot;
- // //}
- // ///+++]
- //
- // //更新游戏币 ---好友场也会兑换的
- // ////if (ExchangeResult.bSuccessed == true)
- // ////{ ///差值即是兑换产生的金币
- // //// pIServerUserItem->ModifyUserInsure(ExchangeResult.lCurrScore - pIServerUserItem->GetUserScore(), 0, 0);
- // ////}
- //
- // return true;
- //}
- //
- ////任务列表
- //bool CAttemperEngineSink::OnDBUserTaskList(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //变量定义
- // DBO_GR_TaskListInfo * pTaskListInfo = (DBO_GR_TaskListInfo *)pData;
- //
- // //拷贝数据
- // WORD wTaskCount = __min(pTaskListInfo->wTaskCount, CountArray(m_TaskParameter) - m_wTaskCount);
- // CopyMemory(m_TaskParameter + m_wTaskCount, ++pTaskListInfo, sizeof(tagTaskParameter)*wTaskCount);
- //
- // //设置变量
- // m_wTaskCount += wTaskCount;
- //
- // return true;
- //}
- //
- ////任务结束
- //bool CAttemperEngineSink::OnDBUserTaskListEnd(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //移除任务
- // m_UserTaskManager.RemoveTaskParameter();
- //
- // //添加任务
- // m_UserTaskManager.AddTaskParameter(m_TaskParameter, m_wTaskCount);
- //
- // return true;
- //}
- //
- ////任务信息
- //bool CAttemperEngineSink::OnDBUserTaskInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //判断在线
- // ASSERT(wDataSize <= sizeof(DBO_GR_TaskInfo));
- // if (wDataSize > sizeof(DBO_GR_TaskInfo)) return false;
- //
- // //变量定义
- // DBO_GR_TaskInfo * pTaskInfo = (DBO_GR_TaskInfo *)pData;
- //
- // //网络数据
- // WORD wTaskCount = 0;
- // BYTE cbDataBuffer[SOCKET_TCP_PACKET];
- // LPBYTE pDataBuffer = cbDataBuffer;
- //
- // //设置数量
- // pDataBuffer += sizeof(wTaskCount);
- // WORD wSendSize = sizeof(wTaskCount);
- //
- // //变量定义
- // POSITION Position = NULL;
- // do
- // {
- // tagTaskParameter * pTaskParameter = m_UserTaskManager.EnumTaskParameter(Position);
- // if (pTaskParameter != NULL)
- // {
- // //越界判断
- // if (wSendSize + sizeof(tagTaskParameter) > SOCKET_TCP_PACKET)
- // {
- // //重置变量
- // pDataBuffer = cbDataBuffer;
- // *(WORD*)pDataBuffer = wTaskCount;
- //
- // CString csSend;
- // CString csTest = AfxGetAppName();
- //
- // csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_TASK, SUB_GR_TASK_LIST);
- // //OutputDebugString(csSend);
- // Commend::ToShow(this, MDM_GR_TASK, SUB_GR_TASK_LIST, pData, wDataSize, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- //
- // //发送数据
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_TASK, SUB_GR_TASK_LIST, pDataBuffer, wSendSize);
- //
- // //重置变量
- // wTaskCount = 0;
- // pDataBuffer += sizeof(wSendSize);
- // wSendSize = sizeof(wSendSize);
- // }
- //
- // //计算大小
- // WORD wParameterSize = sizeof(tagTaskParameter) - sizeof(pTaskParameter->szTaskDescribe) + CountStringBuffer(pTaskParameter->szTaskDescribe);
- // *(WORD *)pDataBuffer = wParameterSize;
- // pDataBuffer += sizeof(wParameterSize);
- // wSendSize += sizeof(wParameterSize);
- //
- // //拷贝数据
- // CopyMemory(pDataBuffer, pTaskParameter, wParameterSize);
- //
- // //推进指针
- // wTaskCount++;
- // pDataBuffer += wParameterSize;
- // wSendSize += wParameterSize;
- // }
- // } while (Position != NULL);
- //
- // //剩余发送
- // if (wTaskCount > 0 && wSendSize)
- // {
- // //重置变量
- // pDataBuffer = cbDataBuffer;
- // *(WORD *)pDataBuffer = wTaskCount;
- //
- // CString csSend;
- // CString csTest = AfxGetAppName();
- //
- // csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_TASK, SUB_GR_TASK_LIST);
- // //OutputDebugString(csSend);
- // Commend::ToShow(this, MDM_GR_TASK, SUB_GR_TASK_LIST, pData, wDataSize, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- //
- // //发送数据
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_TASK, SUB_GR_TASK_LIST, pDataBuffer, wSendSize);
- // }
- //
- // //构造结构
- // CMD_GR_S_TaskInfo TaskInfo;
- // TaskInfo.wTaskCount = pTaskInfo->wTaskCount;
- // CopyMemory(TaskInfo.TaskStatus, pTaskInfo->TaskStatus, sizeof(TaskInfo.TaskStatus[0])*pTaskInfo->wTaskCount);
- //
- // //发送数据
- // WORD wSendDataSize = sizeof(TaskInfo) - sizeof(TaskInfo.TaskStatus);
- // wSendDataSize += sizeof(TaskInfo.TaskStatus[0])*TaskInfo.wTaskCount;
- //
- // CString csSend;
- // CString csTest = AfxGetAppName();
- //
- // csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_TASK, SUB_GR_TASK_INFO);
- // //OutputDebugString(csSend);
- // Commend::ToShow(this, MDM_GR_TASK, SUB_GR_TASK_INFO, &TaskInfo, wSendDataSize, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- //
- //
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_TASK, SUB_GR_TASK_INFO, &TaskInfo, wSendDataSize);
- //
- // return true;
- //}
- //
- ////任务结果
- //bool CAttemperEngineSink::OnDBUserTaskResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //判断在线
- // ASSERT(wDataSize <= sizeof(DBO_GR_TaskResult));
- // if (wDataSize > sizeof(DBO_GR_TaskResult)) return false;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwContextID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //变量定义
- // DBO_GR_TaskResult * pTaskResult = (DBO_GR_TaskResult *)pData;
- //
- // //变量定义
- // CMD_GR_S_TaskResult TaskResult;
- // ZeroMemory(&TaskResult, sizeof(TaskResult));
- //
- // //构造变量
- // TaskResult.wCommandID = pTaskResult->wCommandID;
- // TaskResult.bSuccessed = pTaskResult->bSuccessed;
- // TaskResult.lCurrScore = pTaskResult->lCurrScore;
- // TaskResult.lCurrIngot = pTaskResult->lCurrIngot;
- // lstrcpyn(TaskResult.szNotifyContent, pTaskResult->szNotifyContent, CountArray(TaskResult.szNotifyContent));
- //
- // //发送数据
- // WORD wSendSize = sizeof(TaskResult) - sizeof(TaskResult.szNotifyContent) + CountStringBuffer(TaskResult.szNotifyContent);
- //
- // CString csSend;
- // CString csTest = AfxGetAppName();
- //
- // csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_TASK, SUB_GR_TASK_RESULT);
- // //OutputDebugString(csSend);
- // Commend::ToShow(this, MDM_GR_TASK, SUB_GR_TASK_RESULT, &TaskResult, wSendSize, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- //
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_TASK, SUB_GR_TASK_RESULT, &TaskResult, wSendSize);
- //
- // //设置任务
- // if (TaskResult.bSuccessed == true && TaskResult.wCommandID == SUB_GR_TASK_TAKE)
- // {
- // tagTaskParameter * pTaskParameter = m_UserTaskManager.SearchTaskParameter(pTaskResult->wCurrTaskID);
- // if (pTaskParameter != NULL && pTaskParameter->wKindID == m_pGameServiceOption->wKindID)
- // {
- // //变量定义
- // tagUserTaskInfo UserTaskInfo;
- //
- // //设置任务
- // UserTaskInfo.wTaskProgress = 0;
- // UserTaskInfo.cbTaskStatus = TASK_STATUS_UNFINISH;
- // UserTaskInfo.wTaskID = pTaskResult->wCurrTaskID;
- // UserTaskInfo.dwResidueTime = pTaskParameter->dwTimeLimit;
- // UserTaskInfo.dwLastUpdateTime = (DWORD)time(NULL);
- //
- // //设置任务
- // m_UserTaskManager.SetUserTaskInfo(pIServerUserItem->GetUserID(), &UserTaskInfo, 1);
- // }
- // }
- //
- // return true;
- //}
- //
- //系统消息
- //bool CAttemperEngineSink::OnDBSystemMessage(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //参数校验
- // ASSERT(wDataSize == sizeof(DBR_GR_SystemMessage));
- // if (wDataSize != sizeof(DBR_GR_SystemMessage)) return false;
- //
- // //提取数据
- // DBR_GR_SystemMessage * pSystemMessage = (DBR_GR_SystemMessage *)pData;
- // if (pSystemMessage == NULL) return false;
- //
- // for (INT_PTR nIndex = m_SystemMessageBuffer.GetCount() - 1; nIndex >= 0; nIndex--)
- // {
- // tagSystemMessage *pTagSystemMessage = m_SystemMessageBuffer[nIndex];
- // if (pTagSystemMessage && pTagSystemMessage->SystemMessage.dwMessageID == pSystemMessage->dwMessageID)
- // {
- // CopyMemory(&pTagSystemMessage->SystemMessage, pSystemMessage, sizeof(DBR_GR_SystemMessage));
- // m_SystemMessageActive.Add(pTagSystemMessage);
- // m_SystemMessageBuffer.RemoveAt(nIndex);
- //
- // return true;
- // }
- // }
- //
- // //定义变量
- // tagSystemMessage *pSendMessage = new tagSystemMessage;
- // ZeroMemory(pSendMessage, sizeof(tagSystemMessage));
- //
- // //设置变量
- // pSendMessage->dwLastTime = (DWORD)pSystemMessage->tStartTime;
- // CopyMemory(&pSendMessage->SystemMessage, pSystemMessage, sizeof(DBR_GR_SystemMessage));
- //
- // //记录消息
- // m_SystemMessageActive.Add(pSendMessage);
- //
- // return true;
- //}
- //
- //
- ////加载完成
- //bool CAttemperEngineSink::OnDBSystemMessageFinish(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //处理临时消息
- // if (m_SystemMessageBuffer.GetCount() > 0)
- // {
- // //变量定义
- // tagSystemMessage *pTagSystemMessage = NULL;
- //
- // for (INT_PTR nIndex = m_SystemMessageBuffer.GetCount() - 1; nIndex >= 0; nIndex--)
- // {
- // pTagSystemMessage = m_SystemMessageBuffer[nIndex];
- // if (pTagSystemMessage && pTagSystemMessage->SystemMessage.dwMessageID == TEMP_MESSAGE_ID)
- // {
- // m_SystemMessageActive.Add(pTagSystemMessage);
- // m_SystemMessageBuffer.RemoveAt(nIndex);
- // }
- // }
- // }
- //
- // return true;
- //}
-
- //加载敏感词
- //bool CAttemperEngineSink::OnDBSensitiveWords(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //开始加载
- // if (dwContextID == 0xfffe)
- // {
- // m_WordsFilter.ResetSensitiveWordArray();
- // m_pITimerEngine->KillTimer(IDI_LOAD_SENSITIVE_WORD);
- // return true;
- // }
- //
- // //加载完成
- // if (dwContextID == 0xffff)
- // {
- // m_WordsFilter.FinishAdd();
- // return true;
- // }
- //
- // //加载敏感词
- // const TCHAR *pWords = (const TCHAR*)pData;
- // m_WordsFilter.AddSensitiveWords(pWords);
- // return true;
- //}
-
- //注册事件
- bool CAttemperEngineSink::OnTCPSocketMainRegister(WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
- switch (wSubCmdID)
- {
- case SUB_CS_S_REGISTER_FAILURE: //注册失败
- {
- //变量定义
- CMD_CS_S_RegisterFailure * pRegisterFailure = (CMD_CS_S_RegisterFailure *)pData;
-
- //效验参数
- ASSERT(wDataSize >= (sizeof(CMD_CS_S_RegisterFailure) - sizeof(pRegisterFailure->szDescribeString)));
- if (wDataSize < (sizeof(CMD_CS_S_RegisterFailure) - sizeof(pRegisterFailure->szDescribeString))) return false;
-
- //关闭处理
- m_bNeekCorrespond = false;
- m_pITCPSocketService->CloseSocket();
-
- //显示消息
- if (lstrlen(pRegisterFailure->szDescribeString) > 0)
- {
- CTraceService::TraceString(pRegisterFailure->szDescribeString, TraceLevel_Exception);
- }
-
- //事件通知
- CP_ControlResult ControlResult;
- ControlResult.cbSuccess = ER_FAILURE;
- SendUIControlPacket(UI_CORRESPOND_RESULT, &ControlResult, sizeof(ControlResult));
-
- return true;
- }
- default: break;
- }
-
- return true;
- }
-
- //列表事件
- bool CAttemperEngineSink::OnTCPSocketMainServiceInfo(WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
- switch (wSubCmdID)
- {
- case SUB_CS_S_SERVER_INFO: //房间信息
- {
- //废弃列表
- m_ServerListManager.DisuseServerItem();
-
- //注册比赛
- if (m_pGameServiceOption->wServerType == GAME_GENRE_MATCH)
- {
- //构造结构
- CMD_CS_C_RegisterMatch RegitsterMatch;
- ZeroMemory(&RegitsterMatch, sizeof(RegitsterMatch));
-
- //设置结构
- RegitsterMatch.wServerID = m_pGameServiceOption->wServerID;
- RegitsterMatch.dwMatchID = m_pGameMatchOption->dwMatchID;
- RegitsterMatch.dwMatchNO = m_pGameMatchOption->dwMatchNO;
- RegitsterMatch.cbMatchType = m_pGameMatchOption->cbMatchType;
- RegitsterMatch.lMatchFee = m_pGameMatchOption->lMatchFee;
- RegitsterMatch.cbMatchFeeType = m_pGameMatchOption->cbMatchFeeType;
- RegitsterMatch.cbMemberOrder = m_pGameMatchOption->cbMemberOrder;
- RegitsterMatch.wRewardCount = m_pGameMatchOption->wRewardCount;
-
- //拷贝信息
- lstrcpyn(RegitsterMatch.szMatchName, m_pGameMatchOption->szMatchName, CountArray(RegitsterMatch.szMatchName));
-
- //定时赛制
- if (m_pGameMatchOption->cbMatchType == MATCH_TYPE_LOCKTIME)
- {
- RegitsterMatch.MatchEndTime = m_pGameMatchOption->MatchType.LockTime.MatchEndTime;
- RegitsterMatch.MatchStartTime = m_pGameMatchOption->MatchType.LockTime.MatchStartTime;
- RegitsterMatch.wMatchPlayCount = m_pGameMatchOption->MatchType.LockTime.wMatchPlayCount;
- }
-
- //即时赛制
- if (m_pGameMatchOption->cbMatchType == MATCH_TYPE_IMMEDIATE)
- {
- RegitsterMatch.wMatchPlayCount = m_pGameMatchOption->MatchType.Immediate.cbPlayCount;
- RegitsterMatch.wStartUserCount = m_pGameMatchOption->MatchType.Immediate.wStartUserCount;
- }
-
- //发送数据
- ASSERT(m_pITCPSocketService != NULL);
- m_pITCPSocketService->SendData(MDM_CS_REGISTER, SUB_CS_C_REGISTER_MATCH, &RegitsterMatch, sizeof(RegitsterMatch)/*,0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
- }
-
- return true;
- }
- case SUB_CS_S_SERVER_STAT:
- {
- //游戏节点状态改变
- //效验参数
- ASSERT(wDataSize == sizeof(JN_GR_SERVICESTAT));
- if (wDataSize != sizeof(JN_GR_SERVICESTAT)) return false;
-
- //变量定义
- JN_GR_SERVICESTAT * pServerModify = (JN_GR_SERVICESTAT *)pData;
-
- //查找房间
- ASSERT(m_ServerListManager.SearchGameServer(pServerModify->dwServerID));
- CGameServerItem * pGameServerItem = m_ServerListManager.SearchGameServer(pServerModify->dwServerID);
- //设置房间
- if (pGameServerItem != NULL)
- {
- //修改房间信息
- pGameServerItem->m_GameServer.bService = pServerModify->bService;
- }
- return true;
- }
- case SUB_CS_S_SERVER_ONLINE: //房间人数
- {
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_CS_S_ServerOnLine));
- if (wDataSize != sizeof(CMD_CS_S_ServerOnLine)) return false;
-
- //变量定义
- CMD_CS_S_ServerOnLine * pServerOnLine = (CMD_CS_S_ServerOnLine *)pData;
-
- //查找房间
- CGameServerItem * pGameServerItem = m_ServerListManager.SearchGameServer(pServerOnLine->wServerID);
-
- //设置人数
- if (pGameServerItem != NULL)
- {
- pGameServerItem->m_GameServer.dwOnLineCount = pServerOnLine->dwOnLineCount;
- pGameServerItem->m_GameServer.wTableFullCount = pServerOnLine->wTableFullCount;
- pGameServerItem->m_GameServer.wTableOnlineCount = pServerOnLine->wTableOnlineCount;
- ///汇总同一场馆的人数
- //SumOnlineCount(pGameServerItem->m_GameServer.wNodeID);
- }
-
- return true;
- }
- case SUB_CS_S_SERVER_INSERT: //房间插入
- {
- //效验参数
- ASSERT(wDataSize % sizeof(tagGameServer) == 0);
- if (wDataSize % sizeof(tagGameServer) != 0) return false;
-
- //变量定义
- WORD wItemCount = wDataSize / sizeof(tagGameServer);
- tagGameServer * pGameServer = (tagGameServer *)pData;
-
- //更新数据
- for (WORD i = 0; i < wItemCount; i++)
- {
-
- CString csTestB;
- csTestB.Format(_T("房间插入[%d] -> %s:%d "), pGameServer->wServerID , pGameServer->szServerAddr, pGameServer->wServerPort);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
-
- m_ServerListManager.InsertGameServer(pGameServer++);
- }
-
- //更新加载通道
- UpDataTongDao();
-
- return true;
- }
- case SUB_CS_S_SERVER_MODIFY: //房间修改
- {
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_CS_S_ServerModify));
- if (wDataSize != sizeof(CMD_CS_S_ServerModify)) return false;
-
- //变量定义
- CMD_CS_S_ServerModify * pServerModify = (CMD_CS_S_ServerModify *)pData;
-
- //查找房间
- CGameServerItem * pGameServerItem = m_ServerListManager.SearchGameServer(pServerModify->wServerID);
-
- //设置房间
- if (pGameServerItem != NULL)
- {
- pGameServerItem->m_GameServer.wNodeID = pServerModify->wNodeID;
- pGameServerItem->m_GameServer.wSortID = pServerModify->wSortID;
- pGameServerItem->m_GameServer.wServerPort = pServerModify->wServerPort;
- pGameServerItem->m_GameServer.dwOnLineCount = pServerModify->dwOnLineCount;
- pGameServerItem->m_GameServer.dwFullCount = pServerModify->dwFullCount;
- lstrcpyn(pGameServerItem->m_GameServer.szServerName, pServerModify->szServerName, CountArray(pGameServerItem->m_GameServer.szServerName));
- lstrcpyn(pGameServerItem->m_GameServer.szServerAddr, pServerModify->szServerAddr, CountArray(pGameServerItem->m_GameServer.szServerAddr));
- }
-
- return true;
- }
- case SUB_CS_S_SERVER_REMOVE: //房间删除
- {
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_CS_S_ServerRemove));
- if (wDataSize != sizeof(CMD_CS_S_ServerRemove)) return false;
-
- //变量定义
- CMD_CS_S_ServerRemove * pServerRemove = (CMD_CS_S_ServerRemove *)pData;
-
- //变量定义
- m_ServerListManager.DeleteGameServer(pServerRemove->wServerID);
-
- return true;
- }
- case SUB_CS_S_SERVER_FINISH: //房间完成
- {
- //清理列表
- m_ServerListManager.CleanServerItem();
-
- //事件处理
- CP_ControlResult ControlResult;
- ControlResult.cbSuccess = ER_SUCCESS;
- SendUIControlPacket(UI_CORRESPOND_RESULT, &ControlResult, sizeof(ControlResult));
-
- return true;
- }
- case SUB_CS_S_SERVER_USER_INFO: //用户房间信息
- {
- return true;
- }
- case SUB_CS_C_SERVER_JULI_ACK:
- {
- ASSERT(wDataSize == sizeof(CMD_CS_C_JULI));
- if (wDataSize != sizeof(CMD_CS_C_JULI)) return true;
-
- CMD_CS_C_JULI *p = (CMD_CS_C_JULI*)pData;
- m_MapUserIDJuli[p->dUserID] = p->llJuLi;
-
- return true;
- }
- default: break;
- }
-
- return true;
- }
-
- //汇总事件
- bool CAttemperEngineSink::OnTCPSocketMainUserCollect(WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
- switch (wSubCmdID)
- {
- case SUB_CS_DISSOLVEROOM:
- {
- //群主解散俱乐部房间
- ASSERT(wDataSize == sizeof(DWORD));
- if (wDataSize != sizeof(DWORD)) return false;
- DWORD *dwRoomID = (DWORD *)pData;
- GetTCPNetworkEngine()->OnTBDataEvent(DBO_GR_GAME_JSROOM, 0, dwRoomID, sizeof(DWORD));
- break;
- }
- case SUB_CS_ChangServer:
- {
- //自动创房
- ASSERT(wDataSize == sizeof(CMD_GR_ClubAction2_XT));
- if (wDataSize != sizeof(CMD_GR_ClubAction2_XT)) return false;
- CMD_GR_ClubAction2_XT * pClubAction = (CMD_GR_ClubAction2_XT *)pData;
- this->OnAutoCreateRoomToDB(pClubAction->dwClubID, 0, pClubAction->wWanFa);
- //m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET, 0, pData, wDataSize);
- break;
- }
- case SUB_CS_C_USER_ONLINE:
- {
- //OutputDebugStringA("收到用户上线相通知");
- CMD_CS_C_UserEnter * pUserChat = (CMD_CS_C_UserEnter *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_CS_C_UserEnter));
-
- //效验参数
- if (wDataSize != sizeof(CMD_CS_C_UserEnter)) return false;
-
-
- auto iter = m_OnLineUserAll.find(pUserChat->dwUserID);
- if (iter != m_OnLineUserAll.end())
- {
- m_OnLineUserAll.erase(iter);
- }
- m_OnLineUserAll[pUserChat->dwUserID] = *pUserChat;
-
- break;
- }
- case SUB_CS_C_USER_OFFLINE:
- {
- //OutputDebugStringA("收到用户离线通知");
- CMD_CS_C_UserLeave * pUserChat = (CMD_CS_C_UserLeave *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_CS_C_UserLeave));
-
- //效验参数
- if (wDataSize != sizeof(CMD_CS_C_UserLeave)) return false;
-
- auto iter = m_OnLineUserAll.find(pUserChat->dwUserID);
- if (iter != m_OnLineUserAll.end())
- {
- m_OnLineUserAll.erase(iter);
- }
- break;
-
- }
- case SUB_CS_C_USER_DisCONN:
- {
- //OutputDebugStringA("强行断开某用户通知");
- //DWORD *pUserID = (DWORD*)pData;
- //IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(*pUserID);
- ////断开用户
- //if (pIServerUserItem && pIServerUserItem->GetBindIndex() != INVALID_WORD)
- //{
- // //发送通知
- // LPCTSTR pszMessage = TEXT("网络连接不稳定,请重试.");
- // SendRoomMessage(pIServerUserItem, pszMessage, SMT_CLOSE_SEND);
-
- // //绑定参数
- // WORD wSourceIndex = pIServerUserItem->GetBindIndex();
- // tagBindParameter * pSourceParameter = GetBindParameter(wSourceIndex);
-
- // //解除绑定
- // ASSERT((pSourceParameter != NULL) && (pSourceParameter->pIServerUserItem == pIServerUserItem));
- // if ((pSourceParameter != NULL) && (pSourceParameter->pIServerUserItem == pIServerUserItem))
- // {
- // pSourceParameter->pIServerUserItem = NULL;
- // }
-
- // //断开用户
- // if (pIServerUserItem->IsAndroidUser() == true)
- // {
- // m_AndroidUserManager.DeleteAndroidUserItem(pSourceParameter->dwSocketID, true);
- // }
- // else
- // {
- // m_pITCPNetworkEngine->ShutDownSocket(pSourceParameter->dwSocketID);
- // }
- // m_ServerUserManager.DeleteUserItem(pIServerUserItem);
- //}
- break;
- }
- case SUB_CS_C_USER_SendMessage:
- {
-
- CMD_GR_Club_NotifyEX_ACK * pUserChat = (CMD_GR_Club_NotifyEX_ACK *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_GR_Club_NotifyEX_ACK));
-
- //效验参数
- if (wDataSize != sizeof(CMD_GR_Club_NotifyEX_ACK)) return false;
- if ((pUserChat->Notify.newsFalg == 99) || (pUserChat->Notify.newsFalg == 100))
- {
- CMD_GR_Club_Make_A_Sample Sample;
- ZeroMemory(&Sample, sizeof(Sample));
- Sample.dwClubID = pUserChat->Notify.dwClubID;
- if (pUserChat->Notify.newsFalg == 99)
- {
- Sample.IsSample = 0;
- }
- else
- {
- Sample.IsSample = 1;
- }
- //本地在线用户
- WORD wUserIndex = 0;
- IServerUserItem * pIServerUserItemSend = NULL;
- while (true)
- {
- pIServerUserItemSend = m_ServerUserManager.EnumUserItem(wUserIndex++);
- if (pIServerUserItemSend == NULL) break;
-
- if (pIServerUserItemSend->GetUserID() == pUserChat->dwUserId)
- {
- tagBindParameter * pBindParameter = GetBindParameter(pIServerUserItemSend->GetBindIndex());
- //发送数据
- if (pBindParameter != NULL)
- {
- Club::PB_CS_Club_Make_A_Sample MakeSample;
- MakeSample.set_dwclubid(Sample.dwClubID);
- MakeSample.set_issample(Sample.IsSample);
- //发送数据
- std::string pbdata = MakeSample.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(pBindParameter->dwSocketID, MDM_GR_CLUB, SUB_GR_CLUB_GET_MAKEA_SAMPLE_ACK, (void*)pbdata.c_str(), pbdata.length());
- break;
- }
- }
-
- }
- }
- else
- {
- CMD_GR_Club_Notify_ACKEX NotifyAck;
- ZeroMemory(&NotifyAck, sizeof(NotifyAck));
-
- NotifyAck.newsFalg = pUserChat->Notify.newsFalg;
- NotifyAck.dwClubID = pUserChat->Notify.dwClubID;
- NotifyAck.dwUserCount = pUserChat->Notify.dwUserCount;
- CopyMemory(NotifyAck.Message, pUserChat->Notify.Message, sizeof(NotifyAck.Message));
-
- //本地在线用户
- WORD wUserIndex = 0;
- while (true)
- {
- IServerUserItem * pIServerUserItemSend = m_ServerUserManager.EnumUserItem(wUserIndex++);
- if (pIServerUserItemSend == NULL) break;
-
- if (pIServerUserItemSend->GetUserID() == pUserChat->dwUserId)
- {
- tagBindParameter * pBindParameter = GetBindParameter(pIServerUserItemSend->GetBindIndex());
- //发送数据
- if (pBindParameter != NULL)
- {
- //广播新申请用户
- if (pUserChat->Notify.newsFalg == 3)
- {
- CMD_GR_TableOtherInfo_Notify TableOtherInfo;
- ZeroMemory(&TableOtherInfo, sizeof(TableOtherInfo));
-
- TableOtherInfo.ClubID = pUserChat->Notify.dwClubID;
- TableOtherInfo.Type = 16;
- TableOtherInfo.newUserNum = pUserChat->Notify.dwUserCount;
-
- Club::PB_CS_S_TableOtherInfo_Notify Notify;
- Notify.set_clubid(TableOtherInfo.ClubID);
- Notify.set_newmsgnum(TableOtherInfo.newMsgNum);
- Notify.set_newusernum(TableOtherInfo.newUserNum);
- Notify.set_onlineusernum(TableOtherInfo.onlineUserNum);
- Notify.set_playtablenum(TableOtherInfo.playTableNum);
- Notify.set_totaltablenum(TableOtherInfo.totalTableNum);
- Notify.set_totalusernum(TableOtherInfo.totalUserNum);
- Notify.set_type(TableOtherInfo.Type);
- Notify.set_waittablenum(TableOtherInfo.waitTableNum);
- //发送数据
- std::string pbdata = Notify.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(pBindParameter->dwSocketID, MDM_GR_CLUB, SUB_GR_USER_CLUBCHANGE_NOTIFY_ACK, (void*)pbdata.c_str(), pbdata.length());
- }
- Club::PB_CS_S_Club_Notify_ACKEX NotifyACK;
- NotifyACK.set_newsfalg(NotifyAck.newsFalg);
- NotifyACK.set_temp(NotifyAck.Temp);
- std::string Message = CW2AEX<1024>(NotifyAck.Message, CP_UTF8).m_psz;
- NotifyACK.set_message(Message);
- NotifyACK.set_dwclubid(NotifyAck.dwClubID);
- NotifyACK.set_dwusercount(NotifyAck.dwUserCount);
- //发送数据
- std::string pbdata = NotifyACK.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(pBindParameter->dwSocketID, MDM_GR_CLUB, SUB_GR_USER_NOTIFY_ACK, (void*)pbdata.c_str(), pbdata.length());
- break;
- }
- }
-
- }
- }
-
- break;
-
- }
- case SUB_CS_C_GET_ROOMID:
- {
- //效验参数
- ASSERT(wDataSize >= sizeof(CMD_GR_UserSitDownEx));
- if (wDataSize < sizeof(CMD_GR_UserSitDownEx)) return false;
-
- CMD_GR_UserSitDownEx * pEx = (CMD_GR_UserSitDownEx *)pData;
- IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pEx->dwUserID);
- if (pIServerUserItem && pIServerUserItem->GetBindIndex() != INVALID_WORD && pEx->cbAuto == 0 && pEx->dwUserID>=100000)
- {
- tagBindParameter * pBindParameter = GetBindParameter(pIServerUserItem->GetBindIndex());
- OnTCPNetworkSubUserCreateRoomEx(pData, wDataSize, pBindParameter->dwSocketID);
- }
- else
- {
- //自动开房
- OnTCPNetworkSubUserCreateRoomEx2(pData, wDataSize, 0);
- }
-
-
- break;
- }
- case SUB_CS_UPDATAOWNROOMLIST://个人创建房间的总列表
- {
- JN_GR_RoomListGroupSend * pUserChat = (JN_GR_RoomListGroupSend *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(JN_GR_RoomListGroupSend));
- if (wDataSize != sizeof(JN_GR_RoomListGroupSend)) return false;
-
- //找到他的连接
- IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pUserChat->jgrDate[0].dwUserID);
- if (pIServerUserItem != NULL)
- {
- UserInfo::PB_CS_S_RoomListGroupSend GroupSend;
- for (WORD i = 0; i < pUserChat->Num; i++)
- {
- if (pUserChat->jgrDate[i].dwRoomNumber == 0)break;
- UserInfo::PB_CS_S_RoomList* RoomList = GroupSend.add_jgrdate();
- RoomList->set_dwuserid(pUserChat->jgrDate[i].dwUserID);
- RoomList->set_dwserverid(pUserChat->jgrDate[i].dwServerID);
- RoomList->set_dwroomnumber(pUserChat->jgrDate[i].dwRoomNumber);
- RoomList->set_dwinsert_updata_del(pUserChat->jgrDate[i].dwInsert_UpData_Del);
- RoomList->set_dwdifen(pUserChat->jgrDate[i].dwDiFen);
- RoomList->set_dwjushu(pUserChat->jgrDate[i].dwJuShu);
- RoomList->set_dwreadybody(pUserChat->jgrDate[i].dwReadyBody);
- RoomList->set_dwbody(pUserChat->jgrDate[i].dwBody);
- RoomList->set_bwanfa(pUserChat->jgrDate[i].bWanFa);
- std::string szIp = CW2AEX<1024>(pUserChat->jgrDate[i].szIp, CP_UTF8).m_psz;
- RoomList->set_szip(szIp);
- RoomList->set_bduolai(pUserChat->jgrDate[i].bDuoLai);
- RoomList->set_wfengding(pUserChat->jgrDate[i].wFengDing);
- RoomList->set_tmp1(pUserChat->jgrDate[i].tmp1);
- RoomList->set_tmp2(pUserChat->jgrDate[i].tmp2);
- RoomList->set_tmp3(pUserChat->jgrDate[i].tmp3);
- RoomList->set_tmp4(pUserChat->jgrDate[i].tmp4);
- RoomList->set_tmp5(pUserChat->jgrDate[i].tmp5);
- for (WORD i = 0; i < 4; i++)
- {
- RoomList->add_tmp6(pUserChat->jgrDate[i].tmp6[i]);
- }
- RoomList->set_wport(pUserChat->jgrDate[i].wPort);
- }
- GroupSend.set_num(pUserChat->Num);
- //发送数据
- std::string pbdata = GroupSend.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ALL, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- break;
- }
- case SUB_CS_UPDATAOTHERROOM: //更新其他服务器私有房间
- {
- OnUpdataBodyOtherRoom(pData, wDataSize);
- break;
- }
- case SUB_CS_UPDATAOWNROOM://房间动态信息
- {
- OnUpdataBodyOwnRoom(pData, wDataSize);
- break;
- }
- case SUB_CS_UPDATAOWNBEANS_UNLOCK:
- {
- DBO_GR_UserReduceResult * pUserChat = (DBO_GR_UserReduceResult *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(DBO_GR_UserReduceResult));
- if (wDataSize != sizeof(DBO_GR_UserReduceResult)) return false;
-
- IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pUserChat->dwUserID);
-
- if (pIServerUserItem)
- {
- auto UserInfo = pIServerUserItem->GetUserInfo();
- if (UserInfo)
- {
- UserInfo->dwBean = pUserChat->dwCurrBeans;
- }
-
- //变量定义
- CMD_GR_UserBean UserBeans;
- ZeroMemory(&UserBeans, sizeof(UserBeans));
- //构造变量
- UserBeans.dwCurrBeans = pUserChat->dwCurrBeans;
-
- UserInfo::PB_CS_S_UserBean Bean;
- Bean.set_dwcurrbeans(UserBeans.dwCurrBeans);
- //发送数据
- std::string pbdata = Bean.SerializePartialAsString();
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_BEAN, (void*)pbdata.c_str(), pbdata.length());
- }
-
- break;
- }
- case SUB_CS_UPDATAOWNBEANS_LOCK:
- {
- DBO_GR_UserReduceResult * pUserChat = (DBO_GR_UserReduceResult *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(DBO_GR_UserReduceResult));
- if (wDataSize != sizeof(DBO_GR_UserReduceResult)) return false;
-
- IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pUserChat->dwUserID);
-
- if (pIServerUserItem)
- {
- auto UserInfo = pIServerUserItem->GetUserInfo();
- if (UserInfo)
- {
- UserInfo->dwBean = pUserChat->dwCurrBeans;
- }
-
- //变量定义
- CMD_GR_UserBean UserBeans;
- ZeroMemory(&UserBeans, sizeof(UserBeans));
-
- //构造变量
- UserBeans.dwCurrBeans = pUserChat->dwCurrBeans;
-
- UserInfo::PB_CS_S_UserBean Bean;
- Bean.set_dwcurrbeans(UserBeans.dwCurrBeans);
- //发送数据
- std::string pbdata = Bean.SerializePartialAsString();
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_BEAN, (void*)pbdata.c_str(), pbdata.length());
- }
-
- break;
- }
- case SUB_CS_S_COLLECT_REQUEST: //用户汇总
- {
- //变量定义
- CMD_CS_C_UserEnter UserEnter;
- ZeroMemory(&UserEnter, sizeof(UserEnter));
-
- //发送用户
- WORD wIndex = 0;
- do
- {
- //获取用户
- IServerUserItem * pIServerUserItem = m_ServerUserManager.EnumUserItem(wIndex++);
- if (pIServerUserItem == NULL) break;
-
- //设置变量
- UserEnter.dwUserID = pIServerUserItem->GetUserID();
- UserEnter.dwGameID = pIServerUserItem->GetGameID();
- //lstrcpyn(UserEnter.szNickName, pIServerUserItem->GetNickName(), CountArray(UserEnter.szNickName));
-
- //辅助信息
- UserEnter.cbGender = pIServerUserItem->GetGender();
- UserEnter.cbMemberOrder = pIServerUserItem->GetMemberOrder();
- UserEnter.cbMasterOrder = pIServerUserItem->GetMasterOrder();
-
- /*DWORD dTableNum = 0;*/
- if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIServerUserItem->GetTableID());
-
- TCHAR szTemp[32] = { 0 };
- if (pat) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- /*if (pat != nullptr && !csTemp.IsEmpty())
- {
- dTableNum = _wtol(csTemp);
- }*/
- }
- //发送数据
- ASSERT(m_pITCPSocketService != NULL);
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_USER_ENTER, &UserEnter, sizeof(UserEnter)/*, dTableNum, pIServerUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
-
- } while (true);
-
- //汇报完成
- m_bCollectUser = true;
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_USER_FINISH/*, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
-
- return true;
- }
- default: break;
- }
-
- return true;
- }
-
- //管理服务
- bool CAttemperEngineSink::OnTCPSocketMainManagerService(WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
- switch (wSubCmdID)
- {
- case SUB_CS_S_SYSTEM_MESSAGE: //系统消息
- {
- CTraceService::TraceString(TEXT("系统消息已屏蔽 SUB_CS_S_SYSTEM_MESSAGE"), TraceLevel_Warning);
- //消息处理
- //SendSystemMessage((CMD_GR_SendMessage *)pData, wDataSize);
- return true;
- }
- case SUB_CS_S_PROPERTY_TRUMPET: //喇叭消息
- {
- CString csSend;
- CString csTest = AfxGetAppName();
-
- csSend.Format(_T("进程【%s】【群发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_USER, SUB_GR_PROPERTY_TRUMPET);
- //OutputDebugString(csSend);
- //Commend::ToShow(this, MDM_GR_USER, SUB_GR_PROPERTY_TRUMPET, pData, wDataSize, 0, 0, m_pIGameServiceManager->GetDataString());
- CTraceService::TraceString(TEXT("喇叭消息 SUB_CS_S_PROPERTY_TRUMPET"), TraceLevel_Warning);
- //发送数据
- m_pITCPNetworkEngine->SendDataBatch(MDM_GR_USER, SUB_GR_PROPERTY_TRUMPET, pData, wDataSize, BG_COMPUTER);
-
- return true;
- }
- case SUB_CS_S_PLATFORM_PARAMETER: //平台参数
- {
- //清除任务
- m_wTaskCount = 0;
- ZeroMemory(m_TaskParameter, sizeof(m_TaskParameter));
- //CTraceService::TraceString(TEXT("平台参数 加载配置已屏蔽 SUB_CS_S_PLATFORM_PARAMETER"), TraceLevel_Warning);
- //加载配置
- m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_PARAMETER, 0L, NULL, 0L);
-
- //加载任务
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_TASK_LOAD_LIST, 0L, NULL, 0L);
-
- //会员参数
- //CTraceService::TraceString(TEXT("会员参数已屏蔽 DBR_GR_LOAD_MEMBER_PARAMETER"), TraceLevel_Warning);
- //m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOAD_MEMBER_PARAMETER, 0, NULL, 0);
-
- return true;
- }
- default: break;
- }
-
- return true;
- }
-
- //机器服务
- //bool CAttemperEngineSink::OnTCPSocketMainAndroidService(WORD wSubCmdID, VOID * pData, WORD wDataSize)
- //{
- // switch (wSubCmdID)
- // {
- // case SUB_CS_S_ADDPARAMETER: //添加参数
- // {
- // //参数校验
- // ASSERT(sizeof(CMD_CS_S_AddParameter) == wDataSize);
- // if (sizeof(CMD_CS_S_AddParameter) != wDataSize) return false;
- //
- // //提取数据
- // CMD_CS_S_AddParameter * pAddParameter = (CMD_CS_S_AddParameter *)pData;
- //
- // //添加参数
- // //m_AndroidUserManager.AddAndroidParameter(&pAddParameter->AndroidParameter, 1);
- //
- // return true;
- // }
- // case SUB_CS_S_MODIFYPARAMETER: //修改参数
- // {
- // //参数校验
- // ASSERT(sizeof(CMD_CS_S_ModifyParameter) == wDataSize);
- // if (sizeof(CMD_CS_S_ModifyParameter) != wDataSize) return false;
- //
- // //提取数据
- // CMD_CS_S_ModifyParameter * pModifyParameter = (CMD_CS_S_ModifyParameter *)pData;
- //
- // //修改参数
- // //m_AndroidUserManager.AddAndroidParameter(&pModifyParameter->AndroidParameter, 1);
- //
- // return true;
- // }
- // case SUB_CS_S_DELETEPARAMETER: //删除参数
- // {
- // //参数校验
- // ASSERT(sizeof(CMD_CS_S_DeleteParameter) == wDataSize);
- // if (sizeof(CMD_CS_S_DeleteParameter) != wDataSize) return false;
- //
- // //提取数据
- // CMD_CS_S_DeleteParameter * pDeleteParameter = (CMD_CS_S_DeleteParameter *)pData;
- //
- // //删除参数
- // //m_AndroidUserManager.RemoveAndroidParameter(pDeleteParameter->dwBatchID);
- //
- // return true;
- // }
- // default: break;
- // }
- //
- // return true;
- //}
-
- //登录处理
- bool CAttemperEngineSink::OnTCPNetworkMainLogon(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- switch (wSubCmdID)
- {
- //case SUB_GR_LOGON_USERID: //I D 登录
- //{
- // return OnTCPNetworkSubLogonUserID(pData, wDataSize, dwSocketID);
- //}
- case SUB_GR_LOGON_MOBILE: //手机登录
- {
- m_Data.dLoginQ++;
- return OnTCPNetworkSubLogonMobile(pData, wDataSize, dwSocketID);
- }
- default: break;
- //case SUB_GR_LOGON_ACCOUNTS: //帐号登录
- //{
- // return OnTCPNetworkSubLogonAccounts(pData, wDataSize, dwSocketID);
- //}
- }
-
- return false;
- }
-
- //用户处理
- bool CAttemperEngineSink::OnTCPNetworkMainUser(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- ///for test
- //if (SUB_GR_USER_CREATE == wSubCmdID)
- //{
- // OnTCPNetworkShareInfo(pData, wDataSize, dwSocketID);
- // OnTCPNetworkShareAwardBean(pData, wDataSize, dwSocketID);
- //}
-
- switch (wSubCmdID)
- {
- case SUB_GP_WELFARE_INFO: ///===福利领取信息
- {
- return OnTCPNetworkWelfareInfo(pData, wDataSize, dwSocketID);
- }
- case SUB_GP_CHECKIN_REWARD2: //签到奖品
- {
- return OnTCPNetworkCheckinReward(pData, wDataSize, dwSocketID);
- }
- case SUB_GP_CHECKIN_INFO2: //查询签到
- {
- return OnTCPNetworkCheckinQuery(pData, wDataSize, dwSocketID);
- }
- case SUB_GP_CHECKIN_DONE2: //执行签到
- {
- return OnTCPNetworkCheckinDone(pData, wDataSize, dwSocketID);
- }
- //case SUB_GR_USER_PRIVATE_GAME_SVR: ///+++拉取好友房服务器
- //{
- // return OnTCPNetworkPrivateGameSvr(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_USER_GET_RELIEF: //领取破产补助
- //{
- // return OnTCPNetworkGetRelief(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_USER_TOP_WIN_LIST: //胜局榜(战神列表)
- //{
- // return OnTCPNetworkTopWinList(pData, wDataSize, dwSocketID);
- //}
- case SUB_GR_USER_SHRAE_INFO: //分享奖励钻石
- {
- return OnTCPNetworkShareInfo(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_SHRAE_AWARD_BEAN: //分享奖励钻石
- {
- return OnTCPNetworkShareAwardBean(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_BEAN: //请求元宝
- {
- return OnTCPNetworkGetBearn(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_QINGQIUJIESAN: //房主请求解散
- {
- return OnTCPNetworkFangZhuJieSan(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_DELETE_PRIVATE_TABLE_REQ: //申请解散
- {
- return OnTCPNetworkSubDeletePrivateTableReq(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_DELETE_PRIVATE_TABLE_RESP: //个人投票表决
- {
- return OnTCPNetworkSubDeletePrivateTableResp(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_RULE: //用户规则
- {
- return OnTCPNetworkSubUserRule(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_LOOKON: //用户旁观
- {
- return OnTCPNetworkSubUserLookon(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_STANDUP: //用户起立
- {
- return OnTCPNetworkSubUserStandUp(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CHAT: //用户聊天
- {
- return OnTCPNetworkSubUserChat(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_EXPRESSION: //用户表情
- {
- return OnTCPNetworkSubUserExpression(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_WISPER_CHAT: //用户私聊
- {
- return OnTCPNetworkSubWisperChat(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_WISPER_EXPRESSION: //私聊表情
- {
- return OnTCPNetworkSubWisperExpression(pData, wDataSize, dwSocketID);
- }
- //case SUB_GR_PROPERTY_BUY: //购买道具
- //{
- // return OnTCPNetworkSubPropertyBuy(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_PROPERTY_TRUMPET: //喇叭道具
- //{
- // return OnTCPNetwordSubSendTrumpet(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_USER_INVITE_REQ: //邀请用户
- //{
- // return OnTCPNetworkSubUserInviteReq(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_USER_REPULSE_SIT: //拒绝厌友
- //{
- // return OnTCPNetworkSubUserRepulseSit(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_USER_KICK_USER: //踢出用户
- //{
- // return OnTCPNetworkSubMemberKickUser(pData, wDataSize, dwSocketID);
- //}
- case SUB_GR_USER_INFO_REQ: //请求用户信息
- {
- return OnTCPNetworkSubUserInfoReq(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CHAIR_REQ: //请求更换位置
- {
- return OnTCPNetworkSubUserChairReq(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CHAIR_INFO_REQ: //请求椅子用户信息
- {
- return OnTCPNetworkSubChairUserInfoReq(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_GAME_SCORE_RECORD_LIST://获取牌桌游戏数据简要列表
- {
- return OnTCPSocketGetUserGameScoreRecordList(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_GAME_SCORE_RECORD_DETAIL_INFO:
- {
- return OnTCPSocketGetUserGameScoreRecordDetail(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_GAME_SCORE_RECORD_REPLAY: //获取回放记录
- {
- return OnTCPSocketGetUserGameReplayRecord(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST: //获取临时积分排行榜
- {
- return OnTCPSocketGetUserGameTempScoreRankList(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CREATE://创建房间
- {
- return OnTCPNetworkSubUserCreateRoom(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GETADD_INFO://获取加入房间的信息
- {
- return OnTCPNetworkSubUserJoinRoomInfo(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_ADD: //加入房间
- {
- return OnTCPNetworkSubUserJoinRoom(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_SEAT: //玩家坐下请求
- {
- return OnTCPNetworkSubUserDown(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_DINGDAN: //请求订单
- {
- return OnTCPNetworkSubUserGetDingdan(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_DINGDAN_NEW: //请求订单
- {
- return OnTCPNetworkSubUserGetDingdanNew(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_VERIF_CODE: //获取手机验证码
- {
- return OnTCPNetworkSubUserCheckVerifCode(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CHECK_IPHONE: //绑定手机
- {
- return OnTCPNetworkSubUserCheckIphone(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CHECK_IPHONE_QUERY: //绑定手机查询
- {
- return OnTCPNetworkSubUserCheckIphoneQuery(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CHECK_XIANLIAO: //绑定闲聊
- {
- return OnTCPNetworkSubUserXianLiao(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CHECK_NAME: //实名认证
- {
- return OnTCPNetworkSubUserCheckName(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CHECK_NAME_QUERY:
- {
- return OnTCPNetworkSubUserCheckNameQuery(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_DINGDANLIST: //获取购买记录
- {
- return OnTCPNetworkSubUserGetDingdanList(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_BANGDING: //绑定代理
- {
- return OnTCPNetworkSubUseBangDing(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_DAILI_INFO: //获取绑定代理信息
- {
- return OnTCPNetworkSubUseGetDaiLiInfo(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_APPLY_UNTIE_AGENT: //玩家自主申请解绑
- {
- return OnTCPNetworkSubUserUntieAgent(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_UNTIE_AGENT_INFO: //用户获得代理解绑相关信息
- {
- return OnTCPNetworkSubUserAgentInfo(pData, wDataSize, dwSocketID);
- }
- case SUB_GP_WENLIN_SHUFFLE: //温岭洗牌动画
- {
- return OnWlShuffleGameHandle(pData, wDataSize, dwSocketID);
- }
- default: break;
- }
-
- return false;
- }
-
- //银行处理
- //bool CAttemperEngineSink::OnTCPNetworkMainInsure(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // switch (wSubCmdID)
- // {
- // case SUB_GR_ENABLE_INSURE_REQUEST: //开通银行
- // {
- // return OnTCPNetworkSubEnableInsureRequest(pData, wDataSize, dwSocketID);
- // }
- // case SUB_GR_QUERY_INSURE_INFO: //银行查询
- // {
- // return OnTCPNetworkSubQueryInsureInfo(pData, wDataSize, dwSocketID);
- // }
- // case SUB_GR_SAVE_SCORE_REQUEST: //存款请求
- // {
- // return OnTCPNetworkSubSaveScoreRequest(pData, wDataSize, dwSocketID);
- // }
- // case SUB_GR_TAKE_SCORE_REQUEST: //取款请求
- // {
- // return OnTCPNetworkSubTakeScoreRequest(pData, wDataSize, dwSocketID);
- // }
- // case SUB_GR_TRANSFER_SCORE_REQUEST: //转帐请求
- // {
- // return OnTCPNetworkSubTransferScoreRequest(pData, wDataSize, dwSocketID);
- // }
- // case SUB_GR_QUERY_USER_INFO_REQUEST://查询用户
- // {
- // return OnTCPNetworkSubQueryUserInfoRequest(pData, wDataSize, dwSocketID);
- // }
- // default: break;
- // }
- //
- // return false;
- //}
-
- //任务处理
- //bool CAttemperEngineSink::OnTCPNetworkMainTask(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // switch (wSubCmdID)
- // {
- // case SUB_GR_TASK_TAKE: //领取任务
- // {
- // return OnTCPNetworkSubTakeTaskRequest(pData, wDataSize, dwSocketID);
- // }
- // case SUB_GR_TASK_REWARD: //领取奖励
- // {
- // return OnTCPNetworkSubTaskRewardRequest(pData, wDataSize, dwSocketID);
- // }
- // case SUB_GR_TASK_LOAD_INFO: //加载任务
- // {
- // return OnTCPNetworkSubLoadTaskInfoRequest(pData, wDataSize, dwSocketID);
- // }
- // default: break;
- // }
- //
- // return false;
- //}
-
- //兑换处理
- //bool CAttemperEngineSink::OnTCPNetworkMainExchange(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // switch (wSubCmdID)
- // {
- // case SUB_GR_EXCHANGE_LOAD_INFO: //查询信息
- // {
- // return OnTCPNetworkSubQueryExchangeInfo(pData, wDataSize, dwSocketID);
- // }
- // /*case SUB_GR_PURCHASE_MEMBER: //购买会员
- // {
- // return OnTCPNetworkSubPurchaseMember(pData, wDataSize, dwSocketID);
- // }*/
- // case SUB_GR_EXCHANGE_SCORE: //兑换游戏币
- // {
- // return OnTCPNetworkSubExchangeScore(pData, wDataSize, dwSocketID);
- // }
- // default: break;
- // }
- //
- // return false;
- //}
-
- //俱乐部处理
- bool CAttemperEngineSink::OnTCPNetworkMainClub(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- switch (wSubCmdID)
- {
- case SUB_GR_USER_GET_CLUBLIST: //获取俱乐部列表
- {
- return OnTCPNetworkSubGetClubList(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_CLUBUSER: //获取俱乐部会员
- {
- return OnTCPNetworkSubGetClubUser(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_CLUBUSE_EX:
- {
- return OnTCPNetworkSubGetClubUserEx(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_CLUBMESSAGE://获取俱乐部消息
- {
- return OnTCPNetworkSubGetClubMessage(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_CLUBRECORD://获取俱乐部记录
- {
- return OnTCPNetworkSubGetClubRecord(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_CREATE_CLUB://创建俱乐部
- {
- return OnTCPNetworkSubCreateClub(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_UPDATE_CLUB://修改俱乐部
- {
- return OnTCPNetworkSubUpdateClub(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_DELETE_CLUB://删除俱乐部
- {
- return OnTCPNetworkSubDeleteClub(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_CLUB://查看俱乐部
- {
- return OnTCPNetworkSubGetClub(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_JOIN_CLUB://加入俱乐部
- {
- return OnTCPNetworkSubJoinClub(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_QUIT_CLUB://退出俱乐部
- {
- return OnTCPNetworkSubQuitClub(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_ISAGREE_CLUB: //同意加入俱乐部
- {
- return OnTCPNetworkSubAgreeClub(pData, wDataSize, dwSocketID);
- }
- //case SUB_GR_USER_GET_CLUBONLINE://获取俱乐部在线信息
- //{
- // return OnTCPNetworkSubGetClubOnLine(pData, wDataSize, dwSocketID);
- //}
- case SUB_GR_USER_GET_CLUBONLINE_EX://获取在线信息
- {
- return OnTCPNetworkSubGetClubOnLineEx(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_CLUBBLACKUSER://获取黑名单和管理员名单
- {
- return OnTCPNetworkSubGetClubBlackUser(pData,wDataSize,dwSocketID);
- }
- case SUB_GR_USER_GET_PROTOLCOL://获取协议
- {
- return OnTCPNetworkSubGetClubProtocol(pData,wDataSize,dwSocketID);
- }
- case SUB_GR_USER_GET_PROTOLCOLAGREE://同意协议
- {
- return OnTCPNetworkSubAgreeClubProtocol(pData,wDataSize,dwSocketID);
- }
- case SUB_GR_USER_GET_NOTICE://获取公告
- {
- return OnTCPNetworkSubGetClubNotice(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_CLUBONLINE_TABLE://获取在线桌子
- {
- return OnTCPNetworkSubGetClubTable(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_DISSOLVE_ROOM://群主解散俱乐部房间
- {
- return OnTCPNetworkSubDissolveRoom(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_SAVE_MORE_WANFA:// 额外玩法修改请求
- {
- return OnTCPNetworkSubUpdateAddClub(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_USER_GET_MORE_WANFA://获取额外玩法
- {
- return OnTCPNetworkSubUpdateAddClub(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_CLUB_GET_COUNT_EXPLOITS: //俱乐部统计该俱乐部战绩
- {
- return OnTCPNetworkSubGetClubCountExploits(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_CLUB_GET_COUNT_PLAYGAEMS: //俱乐部统计对局数
- {
- return OnTCPNetworkSubGetClubCountPlaygames(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_CLUB_GET_COUNT_INTEGRAL: //俱乐部统计积分数
- {
- return OnTCPNetworkSubGetClubCountIntegral(pData, wDataSize, dwSocketID);
- }
- case SUB_GR_CLUB_GET_MAKEA_SAMPLE: //俱乐部打样
- {
- return OnTCPNetworkSubGetClubSample(pData, wDataSize, dwSocketID);
- }
- default: break;
- }
- return false;
- }
-
- //管理处理
- bool CAttemperEngineSink::OnTCPNetworkMainManage(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //switch (wSubCmdID)
- //{
- //case SUB_GR_QUERY_OPTION: //查询设置
- //{
- // return OnTCPNetworkSubQueryOption(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_OPTION_SERVER: //房间设置
- //{
- // return OnTCPNetworkSubOptionServer(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_KILL_USER: //踢出用户
- //{
- // return OnTCPNetworkSubManagerKickUser(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_LIMIT_USER_CHAT: //限制聊天
- //{
- // return true;//OnTCPNetworkSubLimitUserChat(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_KICK_ALL_USER: //踢出用户
- //{
- // return OnTCPNetworkSubKickAllUser(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_SEND_MESSAGE: //发布消息
- //{
- // return false;//OnTCPNetworkSubSendMessage(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_DISMISSGAME: //管理员强制解散游戏
- //{
- // return OnTCPNetworkSubDismissGame(pData, wDataSize, dwSocketID);
- //}
- //case SUB_GR_SEND_WARNING: //警告用户
- //{
- // return OnTCPNetworkSubWarningUser(pData, wDataSize, dwSocketID);
- //}
- //}
-
- return false;
- }
-
- //比赛命令
- //bool CAttemperEngineSink::OnTCPNetworkMainMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //获取信息
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //效验接口
- // ASSERT(m_pIMatchServiceManager != NULL);
- // if (m_pIMatchServiceManager == NULL) return false;
- //
- // //消息处理
- // return m_pIMatchServiceManager->OnEventSocketMatch(wSubCmdID, pData, wDataSize, pIServerUserItem, dwSocketID);
- //}
-
- //游戏处理
- bool CAttemperEngineSink::OnTCPNetworkMainGame(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取信息
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //处理过虑
- WORD wTableID = pIServerUserItem->GetTableID();
- WORD wChairID = pIServerUserItem->GetChairID();
- if ((wTableID == INVALID_TABLE) || (wChairID == INVALID_CHAIR)) return true;
-
- //消息处理
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
- return pTableFrame->OnEventSocketGame(wSubCmdID, pData, wDataSize, pIServerUserItem);
- }
-
- //框架处理
- bool CAttemperEngineSink::OnTCPNetworkMainFrame(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取信息
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //处理过虑
- WORD wTableID = pIServerUserItem->GetTableID();
- //WORD wChairID = pIServerUserItem->GetChairID();
- if ((wTableID == INVALID_TABLE)) return true;
-
- //消息处理
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
-
- return pTableFrame->OnEventSocketFrame(wSubCmdID, pData, wDataSize, pIServerUserItem);
- }
-
- //手机登录
- bool CAttemperEngineSink::OnTCPNetworkSubLogonMobile(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- TurntableLogon::PB_CS_C_LogonMobile pLogonMobile;
- pLogonMobile.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_LogonMobile LogonMobile;
- ZeroMemory(&LogonMobile, sizeof(LogonMobile));
- LogonMobile.wGameID = pLogonMobile.wgameid();
- LogonMobile.dwProcessVersion = pLogonMobile.dwprocessversion();
- LogonMobile.cbDeviceType = pLogonMobile.cbdevicetype();
- LogonMobile.wPageTableCount = pLogonMobile.wgameid();
- LogonMobile.dwUserID = pLogonMobile.dwuserid();
- CString szpassword = (CA2CTEX<2048>(pLogonMobile.szpassword().c_str(), CP_UTF8)).m_szBuffer;
- CString szmachineid = (CA2CTEX<2048>(pLogonMobile.szmachineid().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(LogonMobile.szPassword, CountArray(LogonMobile.szPassword), TEXT("%s"), szpassword);
- _sntprintf(LogonMobile.szMachineID, CountArray(LogonMobile.szMachineID), TEXT("%s"), szmachineid);
- LogonMobile.dX = pLogonMobile.dx();
- LogonMobile.dY = pLogonMobile.dy();
- CString szchengshi = (CA2CTEX<2048>(pLogonMobile.szchengshi().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(LogonMobile.szChengShi, CountArray(LogonMobile.szChengShi), TEXT("%s"), szchengshi);
- LogonMobile.szPassword[CountArray(LogonMobile.szPassword) - 1] = 0;
- LogonMobile.szMachineID[CountArray(LogonMobile.szMachineID) - 1] = 0;
- //绑定信息
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIBindUserItem = GetBindUserItem(wBindIndex);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- ///---用户信息置空 yd 2017-11-15
- /*if (pIBindUserItem != NULL)
- {
- pIBindUserItem = NULL;
- }*/
-
- //重复判断 判断分配的tagBindParameter 是否是没有人用过的
- if ((pBindParameter == NULL) || (pIBindUserItem != NULL))
- {
- if (pIBindUserItem != NULL)
- {
- CString strErr;
- strErr.Format(_T("绑定用户失败 wBindIndex=%d,pBindParameter->pIServerUserItem != NULL"), wBindIndex);
- CTraceService::TraceString(strErr, TraceLevel_Normal);
- }
- else
- {
- CString strErr;
- strErr.Format(_T("重复判断,登录失败 wBindIndex=%d,pBindParameter=NULL"), wBindIndex);
- CTraceService::TraceString(strErr, TraceLevel_Normal);
- ASSERT(FALSE);
- }
-
- ///---add by yd
- //m_pITCPNetworkEngine->ShutDownSocket(dwSocketID);
- return false;
- }
-
- //机器人和真人不许互踢
- IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(LogonMobile.dwUserID);
-
- //密码判断
- CString strPassword = LogonMobile.szPassword;
- strPassword.Trim();
- if (pBindParameter->dwClientAddr != 0L && strPassword.GetLength() == 0)
- {
- //发送失败
- CString csTest;
- csTest.Format(_T("客户端登录失败。原因:很抱歉,您的登录密码为0,不允许继续进入!"));
- CTraceService::TraceString(csTest, TraceLevel_Normal);
- return true;
- }
-
- //版本信息
- pBindParameter->cbClientKind = CLIENT_KIND_MOBILE;
- pBindParameter->dwProcessVersion = LogonMobile.dwProcessVersion;
-
- //大厅版本
- //DWORD dwClientVersion = pLogonMobile->dwProcessVersion;
- //if (PerformCheckVersion(0L, 0L, dwClientVersion, dwSocketID) == false)
- //{
- // CString csTest;
- // csTest.Format(_T("客户端[%d]登录失败。原因:大厅版本校验失败!"), pIServerUserItem->GetUserID());
- // CTraceService::TraceString(csTest, TraceLevel_Normal);
-
- //发送失败
- // SendRequestFailure(pIServerUserItem, TEXT("客户端[%d]登录失败。原因:大厅版本校验失败!"), 0);
- // return true;
- //}
-
- //切换判断
- if ((pIServerUserItem != NULL) && (pIServerUserItem->ContrastLogonPass(LogonMobile.szPassword) == true))
- {
- auto _iter = Socket_2_UserID.find(dwSocketID);
- if (_iter != Socket_2_UserID.end() && LogonMobile.dwUserID != _iter->second)
- {
- CString csTest1;
- csTest1.Format(_T("断线重连,dwSocketID变化了,userid和dwSocketID绑定和之前不一样了!"));
- CTraceService::TraceString(csTest1, TraceLevel_Warning);
- ASSERT(FALSE);
- }
-
- SwitchUserItemConnect(pIServerUserItem, LogonMobile.szMachineID, wBindIndex, LogonMobile.cbDeviceType, LogonMobile.wBehaviorFlags, LogonMobile.wPageTableCount);
- return true;
- }
-
- //比赛效验
- //if (m_pIMatchServiceManager != NULL&&m_pIMatchServiceManager->OnEventEnterMatch(dwSocketID, pData, pBindParameter->dwClientAddr, true))
- //{
- // return true;
- //}
-
- if (IsJC(7777))
- {
- TCHAR szString[512] = TEXT("");
- _sntprintf(szString, CountArray(szString), TEXT("用户 (%d) 数据库登录"), LogonMobile.dwUserID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
- }
-
- //变量定义
- DBR_GR_LogonMobile LogonMobiles;
- ZeroMemory(&LogonMobiles, sizeof(LogonMobiles));
-
- //构造数据
- LogonMobiles.dwUserID = LogonMobile.dwUserID;
- LogonMobiles.dwClientAddr = pBindParameter->dwClientAddr;
- lstrcpyn(LogonMobiles.szPassword, LogonMobile.szPassword, CountArray(LogonMobiles.szPassword));
- lstrcpyn(LogonMobiles.szMachineID, LogonMobile.szMachineID, CountArray(LogonMobiles.szMachineID));
- LogonMobiles.cbDeviceType = LogonMobile.cbDeviceType;
- LogonMobiles.wBehaviorFlags = LogonMobile.wBehaviorFlags;
- LogonMobiles.wPageTableCount = LogonMobile.wPageTableCount;
-
- LogonMobiles.dX = LogonMobile.dX;
- LogonMobiles.dY = LogonMobile.dY;
- lstrcpyn(LogonMobiles.szChengShi, LogonMobile.szChengShi, CountArray(LogonMobiles.szChengShi));
-
-
- //投递请求
- m_pIDBCorrespondManager->PostDataBaseRequest(LogonMobiles.dwUserID, DBR_GR_LOGON_MOBILE, dwSocketID, &LogonMobiles, sizeof(LogonMobiles));
-
- return true;
- }
-
- //帐号登录
- bool CAttemperEngineSink::OnTCPNetworkSubLogonAccounts(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CTraceService::TraceString(TEXT("帐号登录 OnTCPNetworkSubLogonAccounts"), TraceLevel_Debug);
- //效验参数
- ASSERT(wDataSize >= sizeof(CMD_GR_LogonAccounts));
- if (wDataSize <= sizeof(CMD_GR_LogonAccounts)) return false;
-
- //处理消息
- CMD_GR_LogonAccounts * pLogonAccounts = (CMD_GR_LogonAccounts *)pData;
- pLogonAccounts->szPassword[CountArray(pLogonAccounts->szPassword) - 1] = 0;
- pLogonAccounts->szAccounts[CountArray(pLogonAccounts->szAccounts) - 1] = 0;
- pLogonAccounts->szMachineID[CountArray(pLogonAccounts->szMachineID) - 1] = 0;
-
- //绑定信息
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIBindUserItem = GetBindUserItem(wBindIndex);
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- //重复判断
- if (pIBindUserItem != NULL)
- {
- ASSERT(FALSE);
- return false;
- }
-
- //机器人和真人不许互踢
- IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pLogonAccounts->szAccounts);
- if (pIServerUserItem != NULL)
- {
- if ((pIServerUserItem->IsAndroidUser() && (pBindParameter->dwClientAddr != 0L))
- || (!pIServerUserItem->IsAndroidUser() && (pBindParameter->dwClientAddr == 0L)))
- {
- SendRequestFailure(pIServerUserItem, TEXT("该帐号已在此房间游戏,且不允许踢出,请咨询管理员!"), 0);
- //SendRoomMessage(dwSocketID, TEXT("该帐号已在此房间游戏,且不允许踢出,请咨询管理员!"), SMT_CHAT | SMT_EJECT | SMT_GLOBAL | SMT_CLOSE_ROOM, (pBindParameter->dwClientAddr == 0L));
- return false;
- }
- }
-
- //密码判断
- CString strPassword = pLogonAccounts->szPassword;
- strPassword.Trim();
- if (pBindParameter->dwClientAddr != 0L && strPassword.GetLength() == 0)
- {
- //发送失败
- SendLogonFailure(TEXT("很抱歉,您的登录密码错误,不允许继续进入!"), LOGON_FAIL_SERVER_INVALIDATION, dwSocketID);
- return true;
- }
-
- //版本信息
- pBindParameter->cbClientKind = CLIENT_KIND_COMPUTER;
- pBindParameter->dwPlazaVersion = pLogonAccounts->dwPlazaVersion;
- pBindParameter->dwFrameVersion = pLogonAccounts->dwFrameVersion;
- pBindParameter->dwProcessVersion = pLogonAccounts->dwProcessVersion;
-
- //大厅版本
- DWORD dwPlazaVersion = pLogonAccounts->dwPlazaVersion;
- DWORD dwFrameVersion = pLogonAccounts->dwFrameVersion;
- DWORD dwClientVersion = pLogonAccounts->dwProcessVersion;
- if (PerformCheckVersion(dwPlazaVersion, dwFrameVersion, dwClientVersion, dwSocketID) == false) return true;
-
- //切换判断
- if ((pIServerUserItem != NULL) && (pIServerUserItem->ContrastLogonPass(pLogonAccounts->szPassword) == true))
- {
- SwitchUserItemConnect(pIServerUserItem, pLogonAccounts->szMachineID, wBindIndex);
- return true;
- }
-
- //变量定义
- DBR_GR_LogonAccounts LogonAccounts;
- ZeroMemory(&LogonAccounts, sizeof(LogonAccounts));
-
- //构造数据
- LogonAccounts.dwClientAddr = pBindParameter->dwClientAddr;
- lstrcpyn(LogonAccounts.szAccounts, pLogonAccounts->szAccounts, CountArray(LogonAccounts.szAccounts));
- lstrcpyn(LogonAccounts.szPassword, pLogonAccounts->szPassword, CountArray(LogonAccounts.szPassword));
- lstrcpyn(LogonAccounts.szMachineID, pLogonAccounts->szMachineID, CountArray(LogonAccounts.szMachineID));
-
- //投递请求
- m_pIDBCorrespondManager->PostDataBaseRequest(0L, DBR_GR_LOGON_ACCOUNTS, dwSocketID, &LogonAccounts, sizeof(LogonAccounts));
-
- return true;
- }
-
- //用户规则
- bool CAttemperEngineSink::OnTCPNetworkSubUserRule(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- ASSERT(wDataSize >= sizeof(CMD_GR_UserRule));
- if (wDataSize < sizeof(CMD_GR_UserRule)) return false;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //规则判断
- //ASSERT(CServerRule::IsForfendGameRule(m_pGameServiceOption->dwServerRule)==false);
- if (CServerRule::IsForfendGameRule(m_pGameServiceOption->dwServerRule) == true || m_pGameServiceOption->wServerType == GAME_GENRE_MATCH) return true;
-
- //消息处理
- tagUserRule * pUserRule = pIServerUserItem->GetUserRule();
- CMD_GR_UserRule * pCMDUserRule = (CMD_GR_UserRule *)pData;
-
- //规则标志
- pUserRule->bLimitSameIP = ((pCMDUserRule->cbRuleMask&UR_LIMIT_SAME_IP) > 0);
- pUserRule->bLimitWinRate = ((pCMDUserRule->cbRuleMask&UR_LIMIT_WIN_RATE) > 0);
- pUserRule->bLimitFleeRate = ((pCMDUserRule->cbRuleMask&UR_LIMIT_FLEE_RATE) > 0);
- pUserRule->bLimitGameScore = ((pCMDUserRule->cbRuleMask&UR_LIMIT_GAME_SCORE) > 0);
-
- //规则属性
- pUserRule->szPassword[0] = 0;
- pUserRule->wMinWinRate = pCMDUserRule->wMinWinRate;
- pUserRule->wMaxFleeRate = pCMDUserRule->wMaxFleeRate;
- pUserRule->lMaxGameScore = pCMDUserRule->lMaxGameScore;
- pUserRule->lMinGameScore = pCMDUserRule->lMinGameScore;
-
- //桌子密码
- if (wDataSize > sizeof(CMD_GR_UserRule))
- {
- tagDataDescribe DataDescribe;
- CRecvPacketHelper RecvPacket(pCMDUserRule + 1, wDataSize - sizeof(CMD_GR_UserRule));
-
- //提取处理
- while (true)
- {
- //提取数据
- auto pDataBuffer = RecvPacket.GetData(DataDescribe);
- if (DataDescribe.wDataDescribe == DTP_NULL) break;
-
- //数据分析
- switch (DataDescribe.wDataDescribe)
- {
- case DTP_GR_TABLE_PASSWORD: //桌子密码
- {
- //效验数据
- ASSERT(pDataBuffer != NULL);
- ASSERT(DataDescribe.wDataSize <= sizeof(pUserRule->szPassword));
-
- //规则判断
- ASSERT(CServerRule::IsForfendLockTable(m_pGameServiceOption->dwServerRule) == false);
- if (CServerRule::IsForfendLockTable(m_pGameServiceOption->dwServerRule) == true) break;
-
- //设置数据
- if (DataDescribe.wDataSize <= sizeof(pUserRule->szPassword))
- {
- CopyMemory(&pUserRule->szPassword, pDataBuffer, DataDescribe.wDataSize);
- pUserRule->szPassword[CountArray(pUserRule->szPassword) - 1] = 0;
- }
-
- break;
- }
- default: break;
- }
- }
- }
-
- return true;
- }
-
- //用户旁观
- bool CAttemperEngineSink::OnTCPNetworkSubUserLookon(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_UserLookon Lookon;
- Lookon.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_UserLookon pUserLookon;
- ZeroMemory(&pUserLookon, sizeof(pUserLookon));
- pUserLookon.wTableID = Lookon.wtableid();
- CString szprivtetableid = (CA2CTEX<2048>(Lookon.szprivtetableid().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUserLookon.szPrivteTableID, CountArray(pUserLookon.szPrivteTableID), TEXT("%s"), szprivtetableid);
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //消息处理
- WORD wTableID = pIServerUserItem->GetTableID();
- //WORD wChairID = pIServerUserItem->GetChairID();
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if ((wTableID == pUserLookon.wTableID) && (cbUserStatus == US_LOOKON)) return true;
-
- //用户判断
- if (cbUserStatus == US_PLAYING)
- {
- SendRequestFailure(pIServerUserItem, TEXT("您正在游戏中,暂时不能离开,请先结束当前游戏!"), 0);
-
- if (IsJC(1234))
- {
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%s,状态:%d"), L"OnTCPNetworkSubUserLookon", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->szPrivateTableID
- , cbUserStatus);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- return true;
- }
-
- //离开处理
- if (wTableID != INVALID_TABLE)
- {
- std::shared_ptr<CTableFrame> pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
- if (pTableFrame->PerformStandUpAction(pIServerUserItem) == false) return true;
- }
-
- if (pUserLookon.wTableID != 0 && pUserLookon.wTableID != INVALID_TABLE)
- {
- //坐下处理
- std::shared_ptr<CTableFrame> pTableFrame = GetTableFrame(pUserLookon.wTableID);
- if (!pTableFrame)
- {
- return false;
- //SendRequestFailure(pIServerUserItem, TEXT("没有这个房间,请确认后再试!"), 0);
- }
- pTableFrame->PerformLookonAction(pIServerUserItem);
- }
- else
- {
- std::shared_ptr<CTableFrame> pTableFrame = GetPriTableFrame(pUserLookon.szPrivteTableID);
- if (!pTableFrame)
- {
- SendRequestFailure(pIServerUserItem, TEXT("没有这个房间,请确认后再试!"), 0);
- return true;
- }
- pTableFrame->PerformLookonAction(pIServerUserItem);
- }
- return true;
- }
-
- //字牌检测
- bool CAttemperEngineSink::CheckConfigZiPai(tagGameConfig UserSitDown)
- {
- CString juShuCfg;
- CString gameTypeCfg;
- CString diJinCfg;
- CString payTypeCfg;
-
- juShuCfg = m_pGameParameter->msParameter[3].juShuCfg;
- gameTypeCfg = m_pGameParameter->msParameter[3].szgameTypeCfg;
- diJinCfg = m_pGameParameter->msParameter[3].diJinCfg;
- payTypeCfg = m_pGameParameter->msParameter[3].payTypeCfg;
-
- CList<int> list1;
- CList<int> list2;
- CList<int> list3;
- CList<int> list4;
-
- int pos = juShuCfg.Find(_T('#'));
- int i = 0;
- while (pos != -1)
- {
- CString field = juShuCfg.Left(pos);
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- i++;
- juShuCfg = juShuCfg.Right(juShuCfg.GetLength() - pos - 1);
- pos = juShuCfg.Find(_T('#'));
- }
- if (juShuCfg.GetLength() > 0)
- {
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- }
-
- pos = gameTypeCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = gameTypeCfg.Left(pos);
-
- int iRet = _wtoi(gameTypeCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- gameTypeCfg.ReleaseBuffer();
- i++;
- gameTypeCfg = gameTypeCfg.Right(gameTypeCfg.GetLength() - pos - 1);
- pos = gameTypeCfg.Find(_T('#'));
- }
- if (gameTypeCfg.GetLength() > 0)
- {
- int iRet = _wtoi(gameTypeCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- gameTypeCfg.ReleaseBuffer();
- }
-
- pos = diJinCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = diJinCfg.Left(pos);
-
- int iRet = _wtoi(diJinCfg.GetBuffer(0));
- list3.AddTail(iRet);
-
- diJinCfg.ReleaseBuffer();
- i++;
- diJinCfg = diJinCfg.Right(diJinCfg.GetLength() - pos - 1);
- pos = diJinCfg.Find(_T('#'));
- }
- if (diJinCfg.GetLength() > 0)
- {
- int iRet = _wtoi(diJinCfg.GetBuffer(0));
- list3.AddTail(iRet);
-
- diJinCfg.ReleaseBuffer();
- }
-
- pos = payTypeCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = payTypeCfg.Left(pos);
-
- int iRet = _wtoi(payTypeCfg.GetBuffer(0));
- list4.AddTail(iRet);
-
- payTypeCfg.ReleaseBuffer();
- i++;
- payTypeCfg = payTypeCfg.Right(payTypeCfg.GetLength() - pos - 1);
- pos = payTypeCfg.Find(_T('#'));
- }
- if (payTypeCfg.GetLength() > 0)
- {
- int iRet = _wtoi(payTypeCfg.GetBuffer(0));
- list4.AddTail(iRet);
-
- payTypeCfg.ReleaseBuffer();
- }
-
- bool bFind = false;
- int iCount = list1.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list1.GetAt(list1.FindIndex(var));
- if (iRet == UserSitDown.wPlayCountRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list2.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list2.GetAt(list2.FindIndex(var));
- if (iRet == UserSitDown.wSubGameID)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list3.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list3.GetAt(list3.FindIndex(var));
- if (iRet == UserSitDown.wPlayRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list4.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list4.GetAt(list4.FindIndex(var));
- if (iRet == UserSitDown.wMaxFanRule || iRet + 10 == UserSitDown.wMaxFanRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
- return true;
- }
-
- //戳瞎子检测
- bool CAttemperEngineSink::CheckConfigXiaZi(tagGameConfig UserSitDown)
- {
- CString juShuCfg;
- CString gameTypeCfg;
- CString diJinCfg;
- CString payTypeCfg;
-
- juShuCfg = m_pGameParameter->msParameter[2].juShuCfg;
- gameTypeCfg = m_pGameParameter->msParameter[2].szgameTypeCfg;
- diJinCfg = m_pGameParameter->msParameter[2].diJinCfg;
- payTypeCfg = m_pGameParameter->msParameter[2].payTypeCfg;
-
- CList<int> list1;
- CList<int> list2;
- CList<int> list3;
- CList<int> list4;
-
- int pos = juShuCfg.Find(_T('#'));
- int i = 0;
- while (pos != -1)
- {
- CString field = juShuCfg.Left(pos);
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- i++;
- juShuCfg = juShuCfg.Right(juShuCfg.GetLength() - pos - 1);
- pos = juShuCfg.Find(_T('#'));
- }
- if (juShuCfg.GetLength() > 0)
- {
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- }
-
- pos = gameTypeCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = gameTypeCfg.Left(pos);
-
- int iRet = _wtoi(gameTypeCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- gameTypeCfg.ReleaseBuffer();
- i++;
- gameTypeCfg = gameTypeCfg.Right(gameTypeCfg.GetLength() - pos - 1);
- pos = gameTypeCfg.Find(_T('#'));
- }
- if (gameTypeCfg.GetLength() > 0)
- {
- int iRet = _wtoi(gameTypeCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- gameTypeCfg.ReleaseBuffer();
- }
-
- pos = diJinCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = diJinCfg.Left(pos);
-
- int iRet = _wtoi(diJinCfg.GetBuffer(0));
- list3.AddTail(iRet);
-
- diJinCfg.ReleaseBuffer();
- i++;
- diJinCfg = diJinCfg.Right(diJinCfg.GetLength() - pos - 1);
- pos = diJinCfg.Find(_T('#'));
- }
- if (diJinCfg.GetLength() > 0)
- {
- int iRet = _wtoi(diJinCfg.GetBuffer(0));
- list3.AddTail(iRet);
-
- diJinCfg.ReleaseBuffer();
- }
-
- pos = payTypeCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = payTypeCfg.Left(pos);
-
- int iRet = _wtoi(payTypeCfg.GetBuffer(0));
- list4.AddTail(iRet);
-
- payTypeCfg.ReleaseBuffer();
- i++;
- payTypeCfg = payTypeCfg.Right(payTypeCfg.GetLength() - pos - 1);
- pos = payTypeCfg.Find(_T('#'));
- }
- if (payTypeCfg.GetLength() > 0)
- {
- int iRet = _wtoi(payTypeCfg.GetBuffer(0));
- list4.AddTail(iRet);
-
- payTypeCfg.ReleaseBuffer();
- }
-
- bool bFind = false;
- int iCount = list1.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list1.GetAt(list1.FindIndex(var));
- if (iRet == UserSitDown.wPlayCountRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list2.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list2.GetAt(list2.FindIndex(var));
- if (iRet == UserSitDown.wSubGameID)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list3.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list3.GetAt(list3.FindIndex(var));
- if (iRet == UserSitDown.wPlayRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list4.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list4.GetAt(list4.FindIndex(var));
- if (iRet == UserSitDown.wMaxFanRule || iRet + 10 == UserSitDown.wMaxFanRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
- return true;
- }
-
- bool CAttemperEngineSink::CheckConfig(tagGameConfig UserSitDown)
- {
- CString juShuCfg;
- CString gameTypeCfg;
- CString diJinCfg;
- CString payTypeCfg;
-
- juShuCfg = m_pGameParameter->msParameter[0].juShuCfg;
- gameTypeCfg = m_pGameParameter->msParameter[0].szgameTypeCfg;
- diJinCfg = m_pGameParameter->msParameter[0].diJinCfg;
- payTypeCfg = m_pGameParameter->msParameter[0].payTypeCfg;
-
- CList<int> list1;
- CList<int> list2;
- CList<int> list3;
- CList<int> list4;
-
- int pos = juShuCfg.Find(_T('#'));
- int i = 0;
- while (pos != -1)
- {
- CString field = juShuCfg.Left(pos);
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- i++;
- juShuCfg = juShuCfg.Right(juShuCfg.GetLength() - pos - 1);
- pos = juShuCfg.Find(_T('#'));
- }
- if (juShuCfg.GetLength() > 0)
- {
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- }
-
- pos = gameTypeCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = gameTypeCfg.Left(pos);
-
- int iRet = _wtoi(gameTypeCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- gameTypeCfg.ReleaseBuffer();
- i++;
- gameTypeCfg = gameTypeCfg.Right(gameTypeCfg.GetLength() - pos - 1);
- pos = gameTypeCfg.Find(_T('#'));
- }
- if (gameTypeCfg.GetLength() > 0)
- {
- int iRet = _wtoi(gameTypeCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- gameTypeCfg.ReleaseBuffer();
- }
-
- pos = diJinCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = diJinCfg.Left(pos);
-
- int iRet = _wtoi(diJinCfg.GetBuffer(0));
- list3.AddTail(iRet);
-
- diJinCfg.ReleaseBuffer();
- i++;
- diJinCfg = diJinCfg.Right(diJinCfg.GetLength() - pos - 1);
- pos = diJinCfg.Find(_T('#'));
- }
- if (diJinCfg.GetLength() > 0)
- {
- int iRet = _wtoi(diJinCfg.GetBuffer(0));
- list3.AddTail(iRet);
-
- diJinCfg.ReleaseBuffer();
- }
-
- pos = payTypeCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = payTypeCfg.Left(pos);
-
- int iRet = _wtoi(payTypeCfg.GetBuffer(0));
- list4.AddTail(iRet);
-
- payTypeCfg.ReleaseBuffer();
- i++;
- payTypeCfg = payTypeCfg.Right(payTypeCfg.GetLength() - pos - 1);
- pos = payTypeCfg.Find(_T('#'));
- }
- if (payTypeCfg.GetLength() > 0)
- {
- int iRet = _wtoi(payTypeCfg.GetBuffer(0));
- list4.AddTail(iRet);
-
- payTypeCfg.ReleaseBuffer();
- }
-
- bool bFind = false;
- int iCount = list1.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list1.GetAt(list1.FindIndex(var));
- if (iRet == UserSitDown.wPlayCountRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list2.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list2.GetAt(list2.FindIndex(var));
- if (iRet == UserSitDown.wSubGameID)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list3.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list3.GetAt(list3.FindIndex(var));
- if (iRet == UserSitDown.wPlayRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list4.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list4.GetAt(list4.FindIndex(var));
- if (iRet == UserSitDown.wMaxFanRule || iRet + 10 == UserSitDown.wMaxFanRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
- return true;
- }
-
- bool CAttemperEngineSink::CheckConfigXueLiu(tagGameConfig UserSitDown)
- {
- CString juShuCfg;
- CString gameTypeCfg;
- CString diJinCfg;
- CString payTypeCfg;
-
- juShuCfg = m_pGameParameter->msParameter[1].juShuCfg;
- gameTypeCfg = m_pGameParameter->msParameter[1].szgameTypeCfg;
- diJinCfg = m_pGameParameter->msParameter[1].diJinCfg;
- payTypeCfg = m_pGameParameter->msParameter[1].payTypeCfg;
-
- CList<int> list1;
- CList<int> list2;
- CList<int> list3;
- CList<int> list4;
-
- int pos = juShuCfg.Find(_T('#'));
- int i = 0;
- while (pos != -1)
- {
- CString field = juShuCfg.Left(pos);
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- i++;
- juShuCfg = juShuCfg.Right(juShuCfg.GetLength() - pos - 1);
- pos = juShuCfg.Find(_T('#'));
- }
- if (juShuCfg.GetLength() > 0)
- {
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- }
-
- pos = gameTypeCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = gameTypeCfg.Left(pos);
-
- int iRet = _wtoi(gameTypeCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- gameTypeCfg.ReleaseBuffer();
- i++;
- gameTypeCfg = gameTypeCfg.Right(gameTypeCfg.GetLength() - pos - 1);
- pos = gameTypeCfg.Find(_T('#'));
- }
- if (gameTypeCfg.GetLength() > 0)
- {
- int iRet = _wtoi(gameTypeCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- gameTypeCfg.ReleaseBuffer();
- }
-
- pos = diJinCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = diJinCfg.Left(pos);
-
- int iRet = _wtoi(diJinCfg.GetBuffer(0));
- list3.AddTail(iRet);
-
- diJinCfg.ReleaseBuffer();
- i++;
- diJinCfg = diJinCfg.Right(diJinCfg.GetLength() - pos - 1);
- pos = diJinCfg.Find(_T('#'));
- }
- if (diJinCfg.GetLength() > 0)
- {
- int iRet = _wtoi(diJinCfg.GetBuffer(0));
- list3.AddTail(iRet);
-
- diJinCfg.ReleaseBuffer();
- }
-
- pos = payTypeCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = payTypeCfg.Left(pos);
-
- int iRet = _wtoi(payTypeCfg.GetBuffer(0));
- list4.AddTail(iRet);
-
- payTypeCfg.ReleaseBuffer();
- i++;
- payTypeCfg = payTypeCfg.Right(payTypeCfg.GetLength() - pos - 1);
- pos = payTypeCfg.Find(_T('#'));
- }
- if (payTypeCfg.GetLength() > 0)
- {
- int iRet = _wtoi(payTypeCfg.GetBuffer(0));
- list4.AddTail(iRet);
-
- payTypeCfg.ReleaseBuffer();
- }
-
- bool bFind = false;
- int iCount = list1.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list1.GetAt(list1.FindIndex(var));
- if (iRet == UserSitDown.wPlayCountRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list2.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list2.GetAt(list2.FindIndex(var));
- if (iRet == UserSitDown.wSubGameID)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list3.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list3.GetAt(list3.FindIndex(var));
- if (iRet == UserSitDown.wPlayRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
-
- bFind = false;
- iCount = list4.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list4.GetAt(list4.FindIndex(var));
- if (iRet == UserSitDown.wMaxFanRule || iRet+10 == UserSitDown.wMaxFanRule)
- {
- bFind = true;
- break;
- }
- }
-
- if (!bFind)
- {
- return false;
- }
- return true;
- }
-
- //用户创建私有房间第二步
- bool CAttemperEngineSink::OnTCPNetworkSubUserCreateRoomEx(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- ASSERT(wDataSize >= sizeof(CMD_GR_UserSitDownEx));
- if (wDataSize < sizeof(CMD_GR_UserSitDownEx)) return false;
-
- //效验数据
- CMD_GR_UserSitDownEx * pUserSitDown = (CMD_GR_UserSitDownEx *)pData;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- //ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (1 != pUserSitDown->data.cbCreateTable)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("请求协议错误"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if (cbUserStatus == US_PLAYING || cbUserStatus == US_READY || cbUserStatus == US_SIT || cbUserStatus == US_PLAYINGWAIT)//用户判断
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("您正在游戏中,暂时不能离开,请先结束当前游戏!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
- if (IsJC(1234))
- {
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%d,状态:%d"), L"OnTCPNetworkSubUserCreateRoomEx", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID
- , cbUserStatus);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- //SendRequestFailure(pIServerUserItem, TEXT("您正在游戏中,暂时不能离开,请先结束当前游戏!"), 0);
- return true;
- }
- if (cbUserStatus == US_SIT
- || US_READY == cbUserStatus
- || US_LOOKON == cbUserStatus)//用户判断
- {
- //SendRequestFailure(pIServerUserItem, TEXT("您正在游戏中,不允许创建!"), 0);
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("您正在游戏中,不允许创建!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
-
- WORD wTableID = pIServerUserItem->GetTableID();
- if (wTableID != INVALID_TABLE)
- {
- //如果还在哪桌打麻将呢,则先离开处理
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
- if (pTableFrame->PerformStandUpAction(pIServerUserItem) == false) return true;
- }
-
- tagGameConfig* ptagGameConfig = (tagGameConfig*)pUserSitDown->data.TableConfig;
- if (ptagGameConfig->wSubGameID >= 10 && ptagGameConfig->wSubGameID < 14)
- {
- //新版本 血流
- if (!CheckConfigXueLiu(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
- //纸牌
- if (!CheckConfigZiPai(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- //戳瞎子
- if (!CheckConfigXiaZi(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID < 3)
- {
- //检验房间参数
- if (!CheckConfig(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID >= 20)
- {
- //检验房间参数
- /*if (!CheckConfig(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- req.szText;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, &req, sizeof(TCHAR) * 32 + 1);
- return true;
- }*/
- }
-
- JN_GR_RoomListGroup sPrivateTableID;
- ZeroMemory(&sPrivateTableID, sizeof(JN_GR_RoomListGroup));
- std::shared_ptr<CTableFrame> pTableFrame;
- std::wstring str;
- //查看自己创建的房间
- auto iter = m_UserID_2_PriTableIDGROUP.find(pIServerUserItem->GetUserID());
- if (iter != m_UserID_2_PriTableIDGROUP.end())
- {
- sPrivateTableID = iter->second;
-
- if (sPrivateTableID.Num > 29)
- {
- //SendRequestFailure(pIServerUserItem, TEXT("创建房间数超限,请先解散当前房间!"), 0);
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("当前状态不允许创建!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else
- {
- std::pair<DWORD, JN_GR_RoomListGroup> temp(pIServerUserItem->GetUserID(), sPrivateTableID);
- m_UserID_2_PriTableIDGROUP.insert(temp);
- }
-
- //添加房间信息
- tagGameConfig* pConfig = (tagGameConfig*)pUserSitDown->data.TableConfig;
- UINT wReduceBeans = 0;
- UINT wBean = 0;
-
- if (ptagGameConfig->wSubGameID >= 10 && ptagGameConfig->wSubGameID < 14)
- {
- //新版本 血流
- wBean = GetNeedPayEx(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
-
- //纸牌
- wBean = GetNeedPayZhiP(pConfig->wPlayCountRule);
-
- }
- else if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- //戳瞎子
- wBean = GetNeedPayCxz(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID < 3)
- {
- //检验房间参数
- wBean = GetNeedPay(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID >= 20)
- {
- wBean = GetNeedPay(pConfig->wPlayCountRule);
- }
-
- if (wBean == 0xff)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("创建规则校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- if (pConfig->wMaxFanRule == 0)
- {
- //房主支付
- wReduceBeans = wBean;
-
- int iRet = pIServerUserItem->GetUserInfo()->GouMaiZuanShi - pIServerUserItem->GetUserInfo()->LeiJiZuanShi;
-
- if (iRet <= 0 && pIServerUserItem->GetUserInfo()->GouMaiZuanShi < 20)
- {
- //使用的是赠送的钻石,限制其房主支付
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("免费赠送钻石,不能用于房主开房。如需房主开房,请充值。"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if (pConfig->wMaxFanRule >= 10)
- {
- //群主支付
- wReduceBeans = wBean;
- }
- else
- {
- if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- wReduceBeans = wBean / 3;
- }
- else if(ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
- wReduceBeans = wBean / 3;
- }
- else
- {
- wReduceBeans = wBean / MAX_CHAIR;
- }
- }
-
- if (wReduceBeans > 24)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置错误,请确认后再试!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- auto UserInfo = pIServerUserItem->GetUserInfo();
- if (pConfig->wMaxFanRule < 10 && UserInfo->dwBean < wReduceBeans)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("钻石不足,不能创建房间!")); ///---元宝改钻石 2017-8-3
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
-
- if (pUserSitDown->data.tableType == 1/*pConfig->wMaxFanRule >= 10*/)
- {
- //返回数据
- void * pBuffer = NULL;
-
- try
- {
- pBuffer = malloc(sizeof(CMD_GR_UserSitDownEx2) + sizeof(tagGameConfig));
- ZeroMemory(pBuffer, sizeof(CMD_GR_UserSitDownEx2) + sizeof(tagGameConfig));
-
- CMD_GR_UserSitDownEx2 * pEx = (CMD_GR_UserSitDownEx2 *)pBuffer;
-
- CopyMemory(&(pEx->hostInfo), &(pUserSitDown->hostInfo), sizeof(CMD_GR_UserInfo));
- CopyMemory(&(pEx->data), &(pUserSitDown->data), sizeof(CMD_GR_UserSitDown));
- CopyMemory(&(pEx->data.TableConfig), pUserSitDown->data.TableConfig, sizeof(tagGameConfig));
- pEx->cbWanFa = pUserSitDown->cbWanFa;
- pEx->RoomID = pUserSitDown->RoomID;
- pEx->ReduceBeans = wReduceBeans;
- //返回数据
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_HOSTINFO, dwSocketID, pBuffer, sizeof(CMD_GR_UserSitDownEx2) + sizeof(tagGameConfig));
-
- if (pBuffer) free(pBuffer);
- pBuffer = NULL;
- }
- catch (...)
- {
- if (pBuffer) free(pBuffer);
- }
-
- return true;
- }
- else
- {
- if (UserInfo->dwBean < wReduceBeans)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("钻石不足,不能创建房间!")); ///---元宝改钻石 2017-8-3
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
-
- //俱乐部房间
- if (pUserSitDown->data.tableType == 1)
- {
- int count = 0;
- //从全局服务器上找
- int flag = 1;
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it1 = m_PrivateRoomAll.begin();
- while (it1 != m_PrivateRoomAll.end() && flag)
- {
- JN_GR_RoomListBig rooms = it1->second;
- if (rooms.roomType == 1 && rooms.tmp6[0] == pUserSitDown->data.clubID)
- {
- //如果房间是自动开房(新老版本兼容)
- if (rooms.tmp5 == 1)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("牌友圈属于自动开房,不能手动创建房间"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- if (rooms.roomStatus == 0)
- {
- count++;
- if (count == 10)
- {
- flag = 0;
- break;
- }
- }
- }
- it1++;
- }
-
- if (count >= 10)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("牌友圈还有10桌未开始,请稍后再试!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
- }
-
- pTableFrame = CreatePrivateTable(pUserSitDown->RoomID, pConfig->wSubGameID);
- if (nullptr == pTableFrame)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("当前游戏房间已经人满为患了,请稍后再试!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
-
- str = szTemp;
- m_PriTableID_2_TableID[str] = pTableFrame->GetTableID();
- pConfig->wHadPlayCount = pTableFrame->GetTableID();
- pConfig->zmExtraRule = 1;
- StringCchCat(pConfig->sPrivateTableID, 7, str.c_str());
-
- pTableFrame->OnEventSetGameConfig((void*)pUserSitDown->data.TableConfig, wDataSize - sizeof(CMD_GR_UserSitDown), str);
- pTableFrame->SetPrivateTableOwnerID(pIServerUserItem->GetUserID());
- pTableFrame->SetGameConfig(*pConfig, pUserSitDown->data.WXianZhi);
-
- //俱乐部房间和好友房间的区分
- pTableFrame->SetTableKind(pUserSitDown->data.tableType);
- pTableFrame->SetTableClub(pUserSitDown->data.clubID);
-
- sPrivateTableID.jgrDate[sPrivateTableID.Num].roomType = pUserSitDown->data.tableType;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp6[0] = pUserSitDown->data.clubID;
-
- //头像
- StringCchCopy(sPrivateTableID.jgrDate[sPrivateTableID.Num].szHeadUrl, _countof(sPrivateTableID.jgrDate[sPrivateTableID.Num].szHeadUrl), pIServerUserItem->GetUserInfo()->szHeadUrl);
-
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwUserID = pIServerUserItem->GetUserID();
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwServerID = m_pGameServiceOption->wServerID;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwRoomNumber = _ttol(str.c_str());
- if (pTableFrame->GetStartMode() == START_MODE_ALL_READY)
- {
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwBody = 2;
- }
- else
- {
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwBody = pTableFrame->GetChairCount();
- }
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwDiFen = pConfig->wPlayRule;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwJuShu = pConfig->wPlayCountRule;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwReadyBody = 0;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].bWanFa = pConfig->wSubGameID;
-
- sPrivateTableID.jgrDate[sPrivateTableID.Num].bDuoLai = pConfig->bDuoLai; //多癞子可平胡,0可以 1不可以
- sPrivateTableID.jgrDate[sPrivateTableID.Num].wFengDing = pConfig->wFengDing; //封顶值
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp1 = pConfig->tmp1; //备用字段
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp2 = pConfig->tmp2; //备用字段
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp3 = pConfig->tmp3;
-
- StringCchCopy(sPrivateTableID.jgrDate[sPrivateTableID.Num].szName, _countof(sPrivateTableID.jgrDate[sPrivateTableID.Num].szName), pIServerUserItem->GetUserInfo()->szNickName);
- sPrivateTableID.jgrDate[sPrivateTableID.Num].bFanGua = pConfig->wMaxScore;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].bRoomCreatePay = pConfig->wMaxFanRule;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwInsert_UpData_Del = 0;
-
- CGameServerItem * pCGameServerItem = m_ServerListManager.SearchGameServer(m_pGameServiceOption->wServerID);
- if (pCGameServerItem)
- {
- //计算距离排名
- int iPaiMing = 0; int iCountMax = 1;
- GetPaiMing(pIServerUserItem->GetUserID(), pIServerUserItem->GetUserInfo()->llJuLi, iPaiMing, iCountMax);
-
- std::wstring ip = pCGameServerItem->GetRandom(pIServerUserItem->GetUserID(), iPaiMing, iCountMax);
-
- StringCchCopy(sPrivateTableID.jgrDate[sPrivateTableID.Num].szIp, _countof(sPrivateTableID.jgrDate[sPrivateTableID.Num].szIp), ip.c_str());
- sPrivateTableID.jgrDate[sPrivateTableID.Num].wPort = pCGameServerItem->m_GameServer.wServerPort;
- }
- //同步到中心服务器
- JN_GR_RoomListBig UserChat = sPrivateTableID.jgrDate[sPrivateTableID.Num];
-
- UpdataBodyOwnRoomToServer(&UserChat, sizeof(UserChat));
-
- sPrivateTableID.Num++;
-
- m_UserID_2_PriTableIDGROUP[pIServerUserItem->GetUserID()] = sPrivateTableID;
-
- ///[+++支付修正下,根据玩法人数扣(修改3人玩法的BUG)2018-1-11
- WORD wChairCount = pTableFrame->GetChairCount();
-
-
- if (pConfig->wMaxFanRule == 0 || pConfig->wMaxFanRule >=10)
- {
- ///房主支付
- wReduceBeans = wBean / wChairCount * wChairCount;
-
- //强制转换对于特定2人
- if (pTableFrame->GetStartMode() == START_MODE_ALL_READY)
- {
- wReduceBeans = 2 * (pConfig->wPlayCountRule / 8);
- }
-
- CString strHint;
- strHint.Format(L"房主支付,以前支付=%d,现在支付=%d", wBean, wReduceBeans);
- CTraceService::TraceString(strHint, TraceLevel_Normal);
- }
- ///---]
-
-
- UserInfo->dwBean = UserInfo->dwBean - wReduceBeans;
- //锁定元宝
- pTableFrame->LockBeans(pIServerUserItem->GetUserID(), wReduceBeans);
-
-
-
- //加入旁观
- if (pTableFrame->PerformLookonAction(pIServerUserItem))
- {
- pTableFrame->OnTCPNetworkSubUserCreateRoom(pIServerUserItem);
- m_Data.dCreateTable++;
-
- //进入房间旁观
- CMD_GR_UserSitDownAckEx req;
- ZeroMemory(&req, sizeof(req));
- memset(szTemp, 0, sizeof(szTemp));
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
-
- lstrcpy(req.szPrivateTableID, szTemp);
- req.cbRet = 0;
- req.dijin = pConfig->wPlayRule;
- req.paytype = pConfig->wMaxFanRule;
- req.desktype = pUserSitDown->data.tableType;
- req.playtype = pConfig->wSubGameID;
- req.totalplay = pConfig->wPlayCountRule;
- req.bDuoLai = pConfig->bDuoLai;
- req.wFengDing = pConfig->wFengDing;
- req.ipLimit = pConfig->wMaxScore;
- req.playnum = pConfig->tmp1;
- req.tmp3 = pConfig->tmp2;
-
- req.isowner = 1;
- req.roomId = pTableFrame->GetTableID();
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- std::string szPrivateTableID = CW2AEX<1024>(req.szPrivateTableID, CP_UTF8).m_psz;
- SitDownAck.set_szprivatetableid(szPrivateTableID);
- SitDownAck.set_cbret(req.cbRet);
- SitDownAck.set_dijin(req.dijin);
- SitDownAck.set_paytype(req.paytype);
- SitDownAck.set_desktype(req.desktype);
- SitDownAck.set_playtype(req.playtype);
- SitDownAck.set_totalplay(req.totalplay);
- SitDownAck.set_bduolai(req.bDuoLai);
- SitDownAck.set_wfengding(req.wFengDing);
- SitDownAck.set_iplimit(req.ipLimit);
- SitDownAck.set_playnum(req.playnum);
- SitDownAck.set_tmp3(req.tmp3);
- SitDownAck.set_isowner(req.isowner);
- SitDownAck.set_roomid(req.roomId);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
- //用户状态
- pIServerUserItem->SetClientReady(true);
- pIServerUserItem->SetUserStatus(US_LOOKON, pTableFrame->GetTableID(), INVALID_CHAIR);
- }
-
- //俱乐部创建房间广播
- if (pUserSitDown->data.tableType == 1 && pUserSitDown->data.clubID != 0)
- {
- CMD_GR_UserData UserData;
- ZeroMemory(&UserData, sizeof(UserData));
- UserData.dwClubID = pUserSitDown->data.clubID;
- UserData.newsFlag = 2;
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_NotifyUser, 0, &(UserData), sizeof(CMD_GR_UserData));
- }
- return true;
- }
-
- //用户创建私有房间第二步自动创房
- bool CAttemperEngineSink::OnTCPNetworkSubUserCreateRoomEx2(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- OutputDebugStringA("自动开房OnTCPNetworkSubUserCreateRoomEx2---");
- //效验参数
- ASSERT(wDataSize >= sizeof(CMD_GR_UserSitDownEx));
- if (wDataSize < sizeof(CMD_GR_UserSitDownEx)) return false;
-
- //效验数据
- CMD_GR_UserSitDownEx * pUserSitDown = (CMD_GR_UserSitDownEx *)pData;
-
- tagGameConfig* ptagGameConfig = (tagGameConfig*)pUserSitDown->data.TableConfig;
- if (ptagGameConfig->wSubGameID >= 10 && ptagGameConfig->wSubGameID < 14)
- {
- //新版本 血流
- if (!CheckConfigXueLiu(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- //检验失败
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
- //纸牌
- if (!CheckConfigZiPai(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- //检验失败
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- //戳瞎子
- if (!CheckConfigXiaZi(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- //检验失败
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID < 3)
- {
- //检验房间参数
- if (!CheckConfig(*(tagGameConfig*)pUserSitDown->data.TableConfig))
- {
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID >= 20)
- {
-
- }
-
- JN_GR_RoomListGroup sPrivateTableID;
- ZeroMemory(&sPrivateTableID, sizeof(JN_GR_RoomListGroup));
- std::shared_ptr<CTableFrame> pTableFrame;
- std::wstring str;
-
- if (pUserSitDown->cbAuto == 1)
- {
- //查看群主创建的房间是否超过十个(全局校验)改为30
- int count = 0;
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig rooms = it->second;
- if (rooms.dwUserID == pUserSitDown->hostInfo.dwOwnerID)
- {
- count++;
- }
- it++;
- }
-
- if (count >= 30)
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("自动创房失败,群主房间已满30个,俱乐部 [ ClubID=%ld ]"), pUserSitDown->data.clubID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
- return true;
- }
- }
-
- //查看群主创建的房间是否超过十个 改为30
- auto iter = m_UserID_2_PriTableIDGROUP.find(pUserSitDown->hostInfo.dwOwnerID);
- if (iter != m_UserID_2_PriTableIDGROUP.end())
- {
- sPrivateTableID = iter->second;
-
- if (sPrivateTableID.Num > 29)
- {
- return true;
- }
- }
- else
- {
- std::pair<DWORD, JN_GR_RoomListGroup> temp(pUserSitDown->hostInfo.dwOwnerID, sPrivateTableID);
- m_UserID_2_PriTableIDGROUP.insert(temp);
- }
-
- //添加房间信息
- tagGameConfig* pConfig = (tagGameConfig*)pUserSitDown->data.TableConfig;
- UINT wReduceBeans;
- UINT wBean = 0;
-
- if (ptagGameConfig->wSubGameID >= 10 && ptagGameConfig->wSubGameID < 14)
- {
- //新版本 血流
- wBean = GetNeedPayEx(ptagGameConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
-
- wBean = GetNeedPayZhiP(pConfig->wPlayCountRule);
-
- //纸牌=
- }
- else if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- //戳瞎子
- wBean = GetNeedPayCxz(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID < 3)
- {
- //检验房间参数
- wBean = GetNeedPay(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID >= 20)
- {
- wBean = GetNeedPay(pConfig->wPlayCountRule);
- }
-
- if (wBean == 0xff)
- {
- //校验失败
- return true;
- }
-
- if (pConfig->wMaxFanRule == 0)
- {
- //房主支付
- wReduceBeans = wBean;
-
- //int iRet = pIServerUserItem->GetUserInfo()->GouMaiZuanShi - pIServerUserItem->GetUserInfo()->LeiJiZuanShi;
-
- //if (iRet <= 0 && pIServerUserItem->GetUserInfo()->GouMaiZuanShi < 20)
- //{
- // //使用的是赠送的钻石,限制其房主支付
- // CMD_GR_UserSitDownAck req;
- // ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- // req.cbRet = 1;
- // req.szText;
- // StringCchCopy(req.szText, _countof(req.szText), _T("免费赠送钻石,不能用于房主开房。如需房主开房,请充值。"));
-
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, &req, sizeof(TCHAR) * 32 + 1);
- // return true;
- //}
- }
- else if (pConfig->wMaxFanRule >= 10)
- {
- //群主支付
- wReduceBeans = wBean;
- }
- else
- {
- if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- wReduceBeans = wBean / 3;
- }
- else if (ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
- wReduceBeans = wBean / 3;
- }
- else
- {
- wReduceBeans = wBean / MAX_CHAIR;
- }
- }
-
- if (wReduceBeans > 24)
- {
- //校验失败
- return true;
- }
-
- //返回数据
- void * pBuffer = NULL;
-
- try
- {
- pBuffer = malloc(sizeof(CMD_GR_UserSitDownEx2) + sizeof(tagGameConfig));
- ZeroMemory(pBuffer, sizeof(CMD_GR_UserSitDownEx2) + sizeof(tagGameConfig));
-
- CMD_GR_UserSitDownEx2 * pEx = (CMD_GR_UserSitDownEx2 *)pBuffer;
- CopyMemory(&(pEx->hostInfo), &(pUserSitDown->hostInfo), sizeof(CMD_GR_UserInfo));
- CopyMemory(&(pEx->data), &(pUserSitDown->data), sizeof(CMD_GR_UserSitDown));
- CopyMemory(&(pEx->data.TableConfig), pUserSitDown->data.TableConfig, sizeof(tagGameConfig));
- pEx->cbAuto = 1;
- pEx->cbWanFa = pUserSitDown->cbWanFa;
- pEx->RoomID = pUserSitDown->RoomID;
- pEx->dwUesrID = pUserSitDown->dwUserID;
- pEx->ReduceBeans = wReduceBeans;
-
- //返回数据
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_HOSTINFO, dwSocketID, pBuffer, sizeof(CMD_GR_UserSitDownEx2) + sizeof(tagGameConfig));
-
- if (pBuffer) free(pBuffer);
- pBuffer = NULL;
- }
- catch (...)
- {
- if (pBuffer) free(pBuffer);
- }
-
- return true;
-
- }
-
- //用户创建私有房间
- bool CAttemperEngineSink::OnTCPNetworkSubUserCreateRoom(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- UserInfo::PB_CS_C_GR_UserSitDown SitDown;
- SitDown.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_UserSitDown pUserSitDown;
- ZeroMemory(&pUserSitDown, sizeof(pUserSitDown));
- pUserSitDown.WXianZhi = SitDown.wxianzhi();
- pUserSitDown.Wsocket = SitDown.wsocket();
- CString szpassword = (CA2CTEX<2048>(SitDown.szpassword().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUserSitDown.szPassword, CountArray(pUserSitDown.szPassword), TEXT("%s"), szpassword);
- pUserSitDown.cbCreateTable = SitDown.cbcreatetable();
- CString szprivatetableid = (CA2CTEX<2048>(SitDown.szprivatetableid().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUserSitDown.szPrivateTableID, CountArray(pUserSitDown.szPrivateTableID), TEXT("%s"), szprivatetableid);
- pUserSitDown.bDuoLai = SitDown.bduolai();
- pUserSitDown.wFengDing = SitDown.wfengding();
- pUserSitDown.tableType = SitDown.tabletype();
- pUserSitDown.clubID = SitDown.clubid();
- for (WORD i = 0; i < SitDown.tableconfig_size(); i++)
- {
- const UserInfo::PB_CS_C_tagGameConfig & tableconfig = SitDown.tableconfig(i);
- pUserSitDown.TableConfig[i].wSubGameID = SitDown.tableconfig(i).wsubgameid();
- pUserSitDown.TableConfig[i].wPlayRule = SitDown.tableconfig(i).wplayrule();
- pUserSitDown.TableConfig[i].wMaxFanRule = SitDown.tableconfig(i).wmaxfanrule();
- pUserSitDown.TableConfig[i].wMaxScore = SitDown.tableconfig(i).wmaxscore();
- pUserSitDown.TableConfig[i].wPlayCountRule = SitDown.tableconfig(i).wplaycountrule();
- pUserSitDown.TableConfig[i].wHadPlayCount = SitDown.tableconfig(i).whadplaycount();
- pUserSitDown.TableConfig[i].zmExtraRule = SitDown.tableconfig(i).zmextrarule();
- pUserSitDown.TableConfig[i].dghRule = SitDown.tableconfig(i).dghrule();
- CString sprivatetableid = (CA2CTEX<2048>(SitDown.tableconfig(i).sprivatetableid().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUserSitDown.TableConfig[i].sPrivateTableID, CountArray(pUserSitDown.TableConfig[i].sPrivateTableID), TEXT("%s"), sprivatetableid);
- pUserSitDown.TableConfig[i].bDuoLai = SitDown.tableconfig(i).bduolai();
- pUserSitDown.TableConfig[i].wFengDing = SitDown.tableconfig(i).wfengding();
- pUserSitDown.TableConfig[i].tmp1 = SitDown.tableconfig(i).tmp1();
- pUserSitDown.TableConfig[i].tmp2 = SitDown.tableconfig(i).tmp2();
- pUserSitDown.TableConfig[i].tmp3 = SitDown.tableconfig(i).tmp3();
- pUserSitDown.TableConfig[i].tmp4 = SitDown.tableconfig(i).tmp4();
- pUserSitDown.TableConfig[i].tmp5 = SitDown.tableconfig(i).tmp5();
- }
-
- //效验数据
- pUserSitDown.Wsocket = dwSocketID;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- if (pIServerUserItem == NULL) return false;
-
- if (IsJC(pIServerUserItem->GetUserID()))
- {
- CString csTestB;
- csTestB.Format(_T("创建房间 -> GouMaiZuanShi:%d, LeiJiZuanShiID:%d,UserID=%d"), pIServerUserItem->GetUserInfo()->GouMaiZuanShi, pIServerUserItem->GetUserInfo()->LeiJiZuanShi, pIServerUserItem->GetUserID());
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
-
- if (1 != pUserSitDown.cbCreateTable)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("请求协议错误"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- if (!m_BCreate)
- {
- tagGameServer * pCGameServerItem = m_ServerListManager.SearchUseServer(pIServerUserItem->GetUserInfo()->iXinYong, m_pGameServiceOption->wServerID);
- //推荐可以创建桌子的服务器
-
- if (pCGameServerItem == NULL)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("当前无可用房间服务!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- CMD_GR_TJROOM req;
- ZeroMemory(&req, sizeof(CMD_GR_TJROOM));
- req.cbRet = 2;
- StringCchCopy(req.szIp, _countof(req.szIp), pCGameServerItem->szServerAddr);
- req.wPort = pCGameServerItem->wServerPort;
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szIp = CW2AEX<1024>(req.szIp, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szIp);
- SitDownAck.set_bduolai(req.wPort);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- BOOL bCreateHuaPai = FALSE;
- tagGameConfig* ptagGameConfig = (tagGameConfig*)pUserSitDown.TableConfig;
- if (ptagGameConfig != NULL)
- {
- bCreateHuaPai = (3 == ptagGameConfig->wSubGameID);
- }
- if (!m_BCreate_Hua && bCreateHuaPai)
- {
- tagGameServer * pCGameServerItem = m_ServerListManager.SearchUseServer(pIServerUserItem->GetUserInfo()->iXinYong, m_pGameServiceOption->wServerID);
- //推荐可以创建桌子的服务器
-
- if (pCGameServerItem == NULL)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("当前无可用房间服务!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- CMD_GR_TJROOM req;
- ZeroMemory(&req, sizeof(CMD_GR_TJROOM));
- req.cbRet = 2;
- StringCchCopy(req.szIp, _countof(req.szIp), pCGameServerItem->szServerAddr);
- req.wPort = pCGameServerItem->wServerPort;
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szIp = CW2AEX<1024>(req.szIp, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szIp);
- SitDownAck.set_bduolai(req.wPort);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if (cbUserStatus == US_PLAYING || cbUserStatus == US_READY || cbUserStatus == US_SIT || cbUserStatus == US_PLAYINGWAIT)//用户判断
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("您正在游戏中,暂时不能离开,请先结束当前游戏!"));
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, &req, sizeof(TCHAR) * 32 + 1);
-
- if (IsJC(1234))
- {
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%d,状态:%d"), L"OnTCPNetworkSubUserCreateRoom", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID
- , cbUserStatus);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- //SendRequestFailure(pIServerUserItem, TEXT("您正在游戏中,暂时不能离开,请先结束当前游戏!"), 0);
- return true;
- }
-
-
- WORD wTableID = pIServerUserItem->GetTableID();
- if (wTableID != INVALID_TABLE)
- {
- //如果还在哪桌打麻将呢,则先离开处理
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
- if (pTableFrame->PerformStandUpAction(pIServerUserItem) == false) return true;
- }
-
-
- //tagGameConfig* ptagGameConfig = (tagGameConfig*)pUserSitDown->TableConfig;
- /////[+++ for test
- //CString csTestB;
- //csTestB.Format(_T("创建房间wSubGameID=%d"), ptagGameConfig->wSubGameID);
- //CTraceService::TraceString(csTestB, TraceLevel_Normal);
- /////+++]
-
- if (ptagGameConfig->wSubGameID >= 10 && ptagGameConfig->wSubGameID < 14)
- {
- //新版本 血流
- if (!CheckConfigXueLiu(*(tagGameConfig*)pUserSitDown.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
- //纸牌
- if (!CheckConfigZiPai(*(tagGameConfig*)pUserSitDown.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- //戳瞎子
- if (!CheckConfigXiaZi(*(tagGameConfig*)pUserSitDown.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if (ptagGameConfig->wSubGameID < 3)
- {
- //一脚赖油
- if (!CheckConfig(*(tagGameConfig*)pUserSitDown.TableConfig))
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else if(ptagGameConfig->wSubGameID >= 20)
- {
- //黄石晃晃
- //if (!CheckConfig(*(tagGameConfig*)pUserSitDown->TableConfig))
- //{
- // CMD_GR_UserSitDownAck req;
- // req.cbRet = 1;
- // req.szText;
- // StringCchCopy(req.szText, _countof(req.szText), _T("房间配置校验失败!"));
-
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, &req, sizeof(TCHAR) * 32 + 1);
- // return true;
- //}
- }
-
-
- //当前服务器桌子上限判断
- DWORD wMaxTable = m_pGameServiceOption->wTableCount;
- DWORD dwOnlineTableCount = m_PriTableID_2_TableID.size();
- if (dwOnlineTableCount >= (wMaxTable - 1))
- {
- tagGameServer * pCGameServerItem = m_ServerListManager.SearchUseServer(pIServerUserItem->GetUserInfo()->iXinYong, m_pGameServiceOption->wServerID);
- //推荐可以创建桌子的服务器
-
- if (pCGameServerItem == NULL)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("当前无可用房间服务!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- CMD_GR_TJROOM req;
- ZeroMemory(&req, sizeof(CMD_GR_TJROOM));
- req.cbRet = 2;
- StringCchCopy(req.szIp, _countof(req.szIp), pCGameServerItem->szServerAddr);
- req.wPort = pCGameServerItem->wServerPort;
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szIp = CW2AEX<1024>(req.szIp, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szIp);
- SitDownAck.set_bduolai(req.wPort);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- JN_GR_RoomListGroup sPrivateTableID;
- ZeroMemory(&sPrivateTableID, sizeof(JN_GR_RoomListGroup));
- std::shared_ptr<CTableFrame> pTableFrame;
- std::wstring str ;
- //查看自己创建的房间
- auto iter = m_UserID_2_PriTableIDGROUP.find(pIServerUserItem->GetUserID());
- if (iter != m_UserID_2_PriTableIDGROUP.end())
- {
- sPrivateTableID = iter->second;
-
- if (sPrivateTableID.Num > 29)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("最多只能创建三十个房间!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- else
- {
- std::pair<DWORD, JN_GR_RoomListGroup> temp(pIServerUserItem->GetUserID(), sPrivateTableID);
- m_UserID_2_PriTableIDGROUP.insert(temp);
- }
-
-
- //添加房间信息
- tagGameConfig* pConfig = (tagGameConfig*)pUserSitDown.TableConfig;
- UINT wReduceBeans = 0;
- UINT wBean = 0;
-
- if (ptagGameConfig->wSubGameID >= 10 && ptagGameConfig->wSubGameID < 14)
- {
- //新版本 血流
- wBean = GetNeedPayEx(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
- //纸牌
- wBean = GetNeedPayZhiP(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- //戳瞎子
- wBean = GetNeedPayCxz(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID < 3 )
- {
- //检验房间参数
- wBean = GetNeedPay(pConfig->wPlayCountRule);
- }
- else if (ptagGameConfig->wSubGameID >= 20)
- {
- //黄石晃晃
- wBean = GetNeedPay(pConfig->wPlayCountRule);
- }
-
- if (wBean == 0xff)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("创建规则校验失败!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- if (pConfig->wMaxFanRule == 0)
- {
- //房主支付
- wReduceBeans = wBean;
-
- //检测钻石来源,如果在免费区域则拒绝。
- int iRet = pIServerUserItem->GetUserInfo()->GouMaiZuanShi - pIServerUserItem->GetUserInfo()->LeiJiZuanShi;
-
- if (iRet <= 0 && pIServerUserItem->GetUserInfo()->GouMaiZuanShi < 20)
- {
- //使用的是赠送的钻石,限制其房主支付
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("免费赠送钻石,不能用于房主开房。如需房主开房,请充值。"));
-
- //CString csTestB;
- //csTestB.Format(_T("免费赠送钻石,不能用于房主开房. -> GouMaiZuanShi:%d, LeiJiZuanShiID:%d,UserID=%d"), pIServerUserItem->GetUserInfo()->GouMaiZuanShi, pIServerUserItem->GetUserInfo()->LeiJiZuanShi, pIServerUserItem->GetUserID());
-
- //CTraceService::TraceString(csTestB, TraceLevel_Normal);
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- }
- else if (pConfig->wMaxFanRule >= 10)
- {
- //俱乐部群主支付
- wReduceBeans = wBean;
- }
- else
- {
- if (ptagGameConfig->wSubGameID >= 3 && ptagGameConfig->wSubGameID <= 5)
- {
- //戳瞎子
- wReduceBeans = wBean / 3;
- }
- else if (ptagGameConfig->wSubGameID >= 14 && ptagGameConfig->wSubGameID <= 16)
- {
- //纸牌
- wReduceBeans = wBean / 3;
- }
- else
- {
- wReduceBeans = wBean / MAX_CHAIR;
- }
- }
-
- if (wReduceBeans > 24)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("房间配置错误,请确认后再试!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- auto UserInfo = pIServerUserItem->GetUserInfo();
- if (UserInfo->dwBean < wReduceBeans && pConfig->wMaxFanRule <10)
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(CMD_GR_UserSitDownAck));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("钻石不足,不能创建房间!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- void * pBuffer = NULL;
-
- try
- {
- pBuffer = malloc(sizeof(CMD_GR_UserSitDown) + 2*sizeof(DWORD) + sizeof(byte)*2 + sizeof(CMD_GR_UserInfo));
- ZeroMemory(pBuffer, sizeof(CMD_GR_UserSitDown) + 2 * sizeof(DWORD) + sizeof(byte)*2 + sizeof(CMD_GR_UserInfo));
-
- CMD_GR_UserSitDownEx * pEx = (CMD_GR_UserSitDownEx *)pBuffer;
- memcpy(&(pEx->data), &pUserSitDown, sizeof(CMD_GR_UserSitDown));
- pEx->dwUserID = pIServerUserItem->GetUserID();
- //获取私有房间随机号码
- ASSERT(m_pITCPSocketService != NULL);
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_GET_ROOMID, pBuffer, sizeof(CMD_GR_UserSitDownEx));
-
- if (pBuffer) free(pBuffer);
- pBuffer = NULL;
- }
- catch (...)
- {
- if (pBuffer) free(pBuffer);
- }
-
- return true;
- }
- //戳瞎子需要多少元宝
- USHORT CAttemperEngineSink::GetNeedPayCxz(WORD wPlayCountRule)
- {
- //USHORT uRet = 0;
-
- CString juShuCfg;
- CString payCoinCfg;
-
- juShuCfg = m_pGameParameter->msParameter[2].juShuCfg;
- payCoinCfg = m_pGameParameter->msParameter[2].payCoinCfg;
-
- CList<int> list1;
- CList<int> list2;
-
- int pos = juShuCfg.Find(_T('#'));
- int i = 0;
- while (pos != -1)
- {
- CString field = juShuCfg.Left(pos);
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- i++;
- juShuCfg = juShuCfg.Right(juShuCfg.GetLength() - pos - 1);
- pos = juShuCfg.Find(_T('#'));
- }
- if (juShuCfg.GetLength() > 0)
- {
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- }
-
- pos = payCoinCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = payCoinCfg.Left(pos);
-
- int iRet = _wtoi(payCoinCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- payCoinCfg.ReleaseBuffer();
- i++;
- payCoinCfg = payCoinCfg.Right(payCoinCfg.GetLength() - pos - 1);
- pos = payCoinCfg.Find(_T('#'));
- }
- if (payCoinCfg.GetLength() > 0)
- {
- int iRet = _wtoi(payCoinCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- payCoinCfg.ReleaseBuffer();
- }
-
- bool bFind = false;
- int iNum = 0;
- int iCount = list1.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list1.GetAt(list1.FindIndex(var));
- if (iRet == wPlayCountRule)
- {
- bFind = true;
- iNum = var;
- break;
- }
- }
-
- if (!bFind)
- {
- return 0XFF;
- }
-
- if (NULL == list2.FindIndex(iNum))
- {
- return 0XFF;
- }
-
- int iBao = list2.GetAt(list2.FindIndex(iNum));
-
- return iBao;
- }
- //纸牌
- USHORT CAttemperEngineSink::GetNeedPayZhiP(WORD wPlayCountRule)
- {
- //USHORT uRet = 0;
-
- CString juShuCfg;
- CString payCoinCfg;
-
- juShuCfg = m_pGameParameter->msParameter[3].juShuCfg;
- payCoinCfg = m_pGameParameter->msParameter[3].payCoinCfg;
-
- CList<int> list1;
- CList<int> list2;
-
- int pos = juShuCfg.Find(_T('#'));
- int i = 0;
- while (pos != -1)
- {
- CString field = juShuCfg.Left(pos);
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- i++;
- juShuCfg = juShuCfg.Right(juShuCfg.GetLength() - pos - 1);
- pos = juShuCfg.Find(_T('#'));
- }
- if (juShuCfg.GetLength() > 0)
- {
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- }
-
- pos = payCoinCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = payCoinCfg.Left(pos);
-
- int iRet = _wtoi(payCoinCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- payCoinCfg.ReleaseBuffer();
- i++;
- payCoinCfg = payCoinCfg.Right(payCoinCfg.GetLength() - pos - 1);
- pos = payCoinCfg.Find(_T('#'));
- }
- if (payCoinCfg.GetLength() > 0)
- {
- int iRet = _wtoi(payCoinCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- payCoinCfg.ReleaseBuffer();
- }
-
- bool bFind = false;
- int iNum = 0;
- int iCount = list1.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list1.GetAt(list1.FindIndex(var));
- if (iRet == wPlayCountRule)
- {
- bFind = true;
- iNum = var;
- break;
- }
- }
-
- if (!bFind)
- {
- return 0XFF;
- }
-
- if (NULL == list2.FindIndex(iNum))
- {
- return 0XFF;
- }
-
- int iBao = list2.GetAt(list2.FindIndex(iNum));
-
- return iBao;
- }
- //一脚赖油此局总共需要多少元宝
- USHORT CAttemperEngineSink::GetNeedPay(WORD wPlayCountRule)
- {
-
- CString juShuCfg;
- CString payCoinCfg;
-
- juShuCfg = m_pGameParameter->msParameter[0].juShuCfg;
- payCoinCfg = m_pGameParameter->msParameter[0].payCoinCfg;
-
- CList<int> list1;
- CList<int> list2;
-
- int pos = juShuCfg.Find(_T('#'));
- int i = 0;
- while (pos != -1)
- {
- CString field = juShuCfg.Left(pos);
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- i++;
- juShuCfg = juShuCfg.Right(juShuCfg.GetLength() - pos - 1);
- pos = juShuCfg.Find(_T('#'));
- }
- if (juShuCfg.GetLength() > 0)
- {
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- }
-
- pos = payCoinCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = payCoinCfg.Left(pos);
-
- int iRet = _wtoi(payCoinCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- payCoinCfg.ReleaseBuffer();
- i++;
- payCoinCfg = payCoinCfg.Right(payCoinCfg.GetLength() - pos - 1);
- pos = payCoinCfg.Find(_T('#'));
- }
- if (payCoinCfg.GetLength() > 0)
- {
- int iRet = _wtoi(payCoinCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- payCoinCfg.ReleaseBuffer();
- }
-
- bool bFind = false;
- int iNum = 0;
- int iCount = list1.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list1.GetAt(list1.FindIndex(var));
- if (iRet == wPlayCountRule)
- {
- bFind = true;
- iNum = var;
- break;
- }
- }
-
- if (!bFind)
- {
- return 0XFF;
- }
-
- if (NULL == list2.FindIndex(iNum))
- {
- return 0XFF;
- }
-
- int iBao = list2.GetAt(list2.FindIndex(iNum));
-
- return iBao;
- }
- //血流此局总共需要多少元宝
- USHORT CAttemperEngineSink::GetNeedPayEx(WORD wPlayCountRule)
- {
-
- CString juShuCfg;
- CString payCoinCfg;
-
- juShuCfg = m_pGameParameter->msParameter[1].juShuCfg;
- payCoinCfg = m_pGameParameter->msParameter[1].payCoinCfg;
-
- CList<int> list1;
- CList<int> list2;
-
- int pos = juShuCfg.Find(_T('#'));
- int i = 0;
- while (pos != -1)
- {
- CString field = juShuCfg.Left(pos);
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- i++;
- juShuCfg = juShuCfg.Right(juShuCfg.GetLength() - pos - 1);
- pos = juShuCfg.Find(_T('#'));
- }
- if (juShuCfg.GetLength() > 0)
- {
- int iRet = _wtoi(juShuCfg.GetBuffer(0));
- list1.AddTail(iRet);
- juShuCfg.ReleaseBuffer();
- }
-
- pos = payCoinCfg.Find(_T('#'));
- i = 0;
- while (pos != -1)
- {
- CString field = payCoinCfg.Left(pos);
-
- int iRet = _wtoi(payCoinCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- payCoinCfg.ReleaseBuffer();
- i++;
- payCoinCfg = payCoinCfg.Right(payCoinCfg.GetLength() - pos - 1);
- pos = payCoinCfg.Find(_T('#'));
- }
- if (payCoinCfg.GetLength() > 0)
- {
- int iRet = _wtoi(payCoinCfg.GetBuffer(0));
- list2.AddTail(iRet);
-
- payCoinCfg.ReleaseBuffer();
- }
-
- bool bFind = false;
- int iNum = 0;
- int iCount = list1.GetCount();
- for (int var = 0; var < iCount; var++)
- {
- int iRet = list1.GetAt(list1.FindIndex(var));
- if (iRet == wPlayCountRule)
- {
- bFind = true;
- iNum = var;
- break;
- }
- }
-
- if (!bFind)
- {
- return 0XFF;
- }
-
- if (NULL == list2.FindIndex(iNum))
- {
- return 0XFF;
- }
-
- int iBao = list2.GetAt(list2.FindIndex(iNum));
-
- return iBao;
- }
-
- // 函数对象
- class SortByLineCountFunc
- {
- public:
- int operator()(CGameServerItem* l, CGameServerItem* r)
- {
- return l->m_GameServer.dwOnLineCount < r->m_GameServer.dwOnLineCount;
- }
- };
-
- class SortCountFunc
- {
- public:
- int operator()(LONGLONG l, LONGLONG r)
- {
- return l< r;
- }
- };
-
- //获取距离排名
- bool CAttemperEngineSink::GetPaiMing(DWORD dUserID, LONGLONG JuLi, int& iPaiMing, int& iCount)
- {
- iPaiMing = 0;
- iCount = 1;
- //枚举数据
- m_MapUserIDJuli[dUserID] = JuLi;
-
- std::vector<LONGLONG> vecJuLi;
-
- DWORD dUser;
- LONGLONG llJuLi;
- POSITION pos = m_MapUserIDJuli.GetStartPosition();
- while (pos)
- {
- m_MapUserIDJuli.GetNextAssoc(pos, dUser, llJuLi);
- vecJuLi.push_back(llJuLi);
- }
-
- iCount = vecJuLi.size();
- std::sort(vecJuLi.begin(), vecJuLi.end(), SortCountFunc());
-
- int count = vecJuLi.size();
- for (int i = 0; i < count; i++)
- {
- if (vecJuLi[i] == JuLi)
- {
- iPaiMing = i;
- break;
- }
- }
-
- vecJuLi.clear();
- return true;
- }
-
- std::string WStringToString(const std::wstring& wstr)
- {
- std::string str;
- int nLen = (int)wstr.length();
- str.resize(nLen, ' ');
- int nResult = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wstr.c_str(), nLen, (LPSTR)str.c_str(), nLen, NULL, NULL);
- if (nResult == 0)
- {
- return "";
- }
- return str;
- }
-
- //获取加入私有房间信息
- bool CAttemperEngineSink::OnTCPNetworkSubUserJoinRoomInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_GetPrivateRoomInfo PrivateRoomInfo;
- PrivateRoomInfo.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_GetPrivateRoomInfo pUserSitDown;
- ZeroMemory(&pUserSitDown, sizeof(pUserSitDown));
- pUserSitDown.RoomID = PrivateRoomInfo.roomid();
-
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- //ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if (cbUserStatus == US_PLAYING || cbUserStatus == US_READY || cbUserStatus == US_SIT || cbUserStatus == US_PLAYINGWAIT)//用户判断
- {
- CMD_GR_UserSitDownAck req;
- ZeroMemory(&req, sizeof(req));
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("您正在游戏中,暂时不能加入房间,请先结束当前游戏!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- WORD wTableID = pIServerUserItem->GetTableID();
- if (wTableID != INVALID_TABLE)
- {//离开处理
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
- if (pTableFrame->PerformStandUpAction(pIServerUserItem) == false) return true;
- }
-
- std::shared_ptr<CTableFrame> pTableFrame;
-
- CString csTest;
- csTest.Format(_T("%d"), pUserSitDown.RoomID);
- std::wstring str = csTest.GetBuffer();
- csTest.ReleaseBuffer();
- std::wstring ip;
- int iPaiMing = 0; int iCountMax = 1;
-
- pTableFrame = GetPriTableFrame(str);
- if (pTableFrame)
- {
- //此房间在本服务器上
- JN_GR_RoomListInfo RoomInfo;
- ZeroMemory(&RoomInfo, sizeof(JN_GR_RoomListInfo));
- RoomInfo.dwDiFen = (pTableFrame->GetGameConfig()).wPlayRule;
- RoomInfo.dwJuShu = (pTableFrame->GetGameConfig()).wPlayCountRule;
- RoomInfo.bRoomCreatePay = (pTableFrame->GetGameConfig()).wMaxFanRule;
- RoomInfo.dwRoomNumber = pUserSitDown.RoomID;
- RoomInfo.dwServerID = m_pGameServiceOption->wServerID;
- RoomInfo.bFanGua = (pTableFrame->GetGameConfig()).wMaxScore;
- RoomInfo.bWanFa = (pTableFrame->GetGameConfig()).wSubGameID;
-
- RoomInfo.bDuoLai = (pTableFrame->GetGameConfig()).bDuoLai; //多癞子可平胡,0可以 1不可以
- RoomInfo.wFengDing = (pTableFrame->GetGameConfig()).wFengDing; //封顶值
- RoomInfo.tmp1 = (pTableFrame->GetGameConfig()).tmp1; //备用字段
- RoomInfo.tmp2 = (pTableFrame->GetGameConfig()).tmp2; //备用字段
-
- // to do 判断用户版本号
- TCHAR szMachineID[LEN_MACHINE_ID] = { 0 };
- memcpy(szMachineID, pIServerUserItem->GetMachineID(), sizeof(szMachineID));
- del_char(szMachineID, L'.');
- __int64 iMachineID = StrToNmuber(szMachineID);
-
- //--最低要求的版本号
- TCHAR szMinClientVer[LEN_MACHINE_ID] = { 0 };
- memcpy(szMinClientVer, m_pInitParameter->m_szMinClientVer, sizeof(szMinClientVer));
- del_char(szMinClientVer, L'.');
- __int64 iMinClientVer = StrToNmuber(szMinClientVer);
-
-
- //if (iMachineID < iMinClientVer && (RoomInfo.bWanFa == 14 || RoomInfo.tmp1 == 2))
- //{
- // CString str;
- // str.Format(_T("请下载最新版本,才能玩双扣 UserId=%d iMachineID=%d"), pIServerUserItem->GetUserID(), iMachineID);
- // CTraceService::TraceString(str, TraceLevel_Warning);
-
- // CMD_GR_UserSitDownAck req;
-
- // req.cbRet = 1;
- // StringCchCopy(req.szText, _countof(req.szText), _T("请下载最新版本,才能玩该玩法!"));
- // UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- // SitDownAck.set_cbret(req.cbRet);
- // std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- // SitDownAck.set_sztext(szText);
- // //发送数据
- // std::string pbdata = SitDownAck.SerializePartialAsString();
-
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
- // return true;
- //}
-
- CGameServerItem * pCGameServerItem = m_ServerListManager.SearchGameServer(m_pGameServiceOption->wServerID);
- if (pCGameServerItem)
- {
- //计算距离排名
- GetPaiMing(pIServerUserItem->GetUserID(), pIServerUserItem->GetUserInfo()->llJuLi, iPaiMing, iCountMax);
- ip = pCGameServerItem->GetRandom(pIServerUserItem->GetUserID(), iPaiMing, iCountMax);
-
- StringCchCopy(RoomInfo.szIp, _countof(RoomInfo.szIp), ip.c_str());
- RoomInfo.wPort = pCGameServerItem->m_GameServer.wServerPort;
- }
-
- if (ip == L"")
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
-
- StringCchCopy(req.szText, _countof(req.szText), _T("此房间,无可用服务。请尝试进入其他房间!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- IServerUserItem * pIUserItem = m_ServerUserManager.SearchUserItem(pTableFrame->GetPrivateTableOwnerID());
-
- if (pIUserItem)
- {
- StringCchCopy(RoomInfo.szName, _countof(RoomInfo.szName), pIUserItem->GetNickName());
- }
-
- m_Data.dAddRoom++;
-
- if (pCGameServerItem != NULL)
- {
- if (IsJC(9999))
- {
- CString csTestB;
- csTestB.Format(_T("昵称:%s -> 加入房间服务地址-> %s:%d 通道->%s,距离 -> %lld,排名 -> %d,最大人数 -> %d")
- , pIServerUserItem->GetNickName(), pCGameServerItem->m_GameServer.szServerAddr, pCGameServerItem->m_GameServer.wServerPort
- , RoomInfo.szIp, pIServerUserItem->GetUserInfo()->llJuLi, iPaiMing, iCountMax);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- }
- else
- {
- CString csTestB;
- csTestB.Format(_T("未找到游戏节点 %d"), m_pGameServiceOption->wServerID);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- UserInfo::PB_CS_S_RoomListInfo RoomListInfo;
- std::string szName = CW2AEX<1024>(RoomInfo.szName, CP_UTF8).m_psz;
- std::string szIp = CW2AEX<1024>(RoomInfo.szIp, CP_UTF8).m_psz;
- RoomListInfo.set_szname(szName);
- RoomListInfo.set_dwserverid(RoomInfo.dwServerID);
- RoomListInfo.set_szip(szIp);
- RoomListInfo.set_bduolai(RoomInfo.bDuoLai);
- RoomListInfo.set_wfengding(RoomInfo.wFengDing);
- RoomListInfo.set_tmp1(RoomInfo.tmp1);
- RoomListInfo.set_tmp2(RoomInfo.tmp2);
- RoomListInfo.set_tmp3(RoomInfo.tmp3);
- RoomListInfo.set_tmp4(RoomInfo.tmp4);
- RoomListInfo.set_tmp5(RoomInfo.tmp5);
- for (WORD i = 0; i < 4; i++)
- {
- RoomListInfo.add_tmp6(RoomInfo.tmp6[i]);
- }
- RoomListInfo.set_wport(RoomInfo.wPort);
- RoomListInfo.set_dwroomnumber(RoomInfo.dwRoomNumber);
- RoomListInfo.set_dwdifen(RoomInfo.dwDiFen);
- RoomListInfo.set_dwjushu(RoomInfo.dwJuShu);
- RoomListInfo.set_broomcreatepay(RoomInfo.bRoomCreatePay);
- RoomListInfo.set_bfangua(RoomInfo.bFanGua);
- RoomListInfo.set_bwanfa(RoomInfo.bWanFa);
- //发送数据
- std::string pbdata = RoomListInfo.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GETADD_INFO_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
- //从全局服务器查找
- JN_GR_RoomListBig Temp;
- ZeroMemory(&Temp, sizeof(JN_GR_RoomListBig));
-
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- auto iter = m_PrivateRoomAll.find(pUserSitDown.RoomID);
- if (iter == m_PrivateRoomAll.end())
- {
- //没找到
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("没有这个房间,请确认后再试!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- //std::string szPrivateTableID = CW2AEX<1024>(pUserSitDown.RoomID, CP_UTF8).m_psz;
- /*std::string pRoomID = WStringToString(str);
- SitDownAck.set_szprivatetableid(pRoomID);*/
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- Temp = iter->second;
- }
- JN_GR_RoomListInfo RoomInfo;
- ZeroMemory(&RoomInfo, sizeof(JN_GR_RoomListInfo));
- RoomInfo.dwDiFen = Temp.dwDiFen;
- RoomInfo.dwJuShu = Temp.dwJuShu;
- RoomInfo.bRoomCreatePay = Temp.bRoomCreatePay;
- RoomInfo.dwRoomNumber = Temp.dwRoomNumber;
- RoomInfo.dwServerID = Temp.dwServerID;
- RoomInfo.bFanGua = Temp.bFanGua;
- RoomInfo.bWanFa = Temp.bWanFa;
-
- RoomInfo.bDuoLai = Temp.bDuoLai; //多癞子可平胡,0可以 1不可以
- RoomInfo.wFengDing = Temp.wFengDing; //封顶值
- RoomInfo.tmp1 = Temp.tmp1; //备用字段
- RoomInfo.tmp2 = Temp.tmp2; //备用字段
-
- // to do 判断用户版本号
- TCHAR szMachineID[LEN_MACHINE_ID] = { 0 };
- memcpy(szMachineID, pIServerUserItem->GetMachineID(), sizeof(szMachineID));
- del_char(szMachineID, L'.');
- __int64 iMachineID = StrToNmuber(szMachineID);
-
- //--最低要求的版本号
- TCHAR szMinClientVer[LEN_MACHINE_ID] = { 0 };
- memcpy(szMinClientVer, m_pInitParameter->m_szMinClientVer, sizeof(szMinClientVer));
- del_char(szMinClientVer, L'.');
- __int64 iMinClientVer = StrToNmuber(szMinClientVer);
-
-
- //if (iMachineID < iMinClientVer && (RoomInfo.bWanFa == 14 || RoomInfo.tmp1 == 2))
- //{
- // CString str;
- // str.Format(_T("请下载最新版本,才能玩新定财神玩法 UserId=%d iMachineID=%d"), pIServerUserItem->GetUserID(), iMachineID);
- // CTraceService::TraceString(str, TraceLevel_Warning);
-
- // CMD_GR_UserSitDownAck req;
- // req.cbRet = 1;
- // StringCchCopy(req.szText, _countof(req.szText), _T("请下载最新版本,才能玩该玩法!"));
- // UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- // SitDownAck.set_cbret(req.cbRet);
- // std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- // SitDownAck.set_sztext(szText);
- // //发送数据
- // std::string pbdata = SitDownAck.SerializePartialAsString();
-
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
- // return true;
- //}
-
- StringCchCopy(RoomInfo.szName, _countof(RoomInfo.szName), Temp.szName);
-
- CGameServerItem * pCGameServerItem = m_ServerListManager.SearchGameServer(Temp.dwServerID);
- if (pCGameServerItem)
- {
- if (pIServerUserItem->GetUserInfo()->iXinYong == 1 &&
- pCGameServerItem->m_GameServer.wServerLevel > 2)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("此房间不可用,请自行建房."));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //计算距离排名
- iPaiMing = 0; iCountMax = 1;
- GetPaiMing(pIServerUserItem->GetUserID(), pIServerUserItem->GetUserInfo()->llJuLi, iPaiMing, iCountMax);
- ip = pCGameServerItem->GetRandom(pIServerUserItem->GetUserID(), iPaiMing, iCountMax);
- StringCchCopy(RoomInfo.szIp, _countof(RoomInfo.szIp), ip.c_str());
- }
-
- if (ip == L"")
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("此房间,无可用服务。请尝试进入其他房间!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- RoomInfo.wPort = Temp.wPort;
- m_Data.dAddRoomChange++;
-
- if (pCGameServerItem != NULL)
- {
- if (IsJC(9999))
- {
- CString csTestB;
- csTestB.Format(_T("昵称:%s -> 加入房间服务地址-> %s:%d 通道->%s,距离 -> %lld,排名 -> %d,最大人数 -> %d")
- , pIServerUserItem->GetNickName(), pCGameServerItem->m_GameServer.szServerAddr, pCGameServerItem->m_GameServer.wServerPort
- , RoomInfo.szIp, pIServerUserItem->GetUserInfo()->llJuLi, iPaiMing, iCountMax);
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- }
- else
- {
- CString csTestB;
- csTestB.Format(_T("未找到游戏节点 %d"), Temp.dwServerID);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
-
- UserInfo::PB_CS_S_RoomListInfo RoomListInfo;
- std::string szName = CW2AEX<1024>(RoomInfo.szName, CP_UTF8).m_psz;
- RoomListInfo.set_szname(szName);
- RoomListInfo.set_dwserverid(RoomInfo.dwServerID);
- std::string szIp = CW2AEX<1024>(RoomInfo.szIp, CP_UTF8).m_psz;
- RoomListInfo.set_szip(szIp);
- RoomListInfo.set_bduolai(RoomInfo.bDuoLai);
- RoomListInfo.set_wfengding(RoomInfo.wFengDing);
- RoomListInfo.set_tmp1(RoomInfo.tmp1);
- RoomListInfo.set_tmp2(RoomInfo.tmp2);
- RoomListInfo.set_tmp3(RoomInfo.tmp3);
- RoomListInfo.set_tmp4(RoomInfo.tmp4);
- RoomListInfo.set_tmp5(RoomInfo.tmp5);
- for (WORD i = 0; i < 4; i++)
- {
- RoomListInfo.add_tmp6(RoomInfo.tmp6[i]);
- }
- RoomListInfo.set_wport(RoomInfo.wPort);
- RoomListInfo.set_dwroomnumber(RoomInfo.dwRoomNumber);
- RoomListInfo.set_dwdifen(RoomInfo.dwDiFen);
- RoomListInfo.set_dwjushu(RoomInfo.dwJuShu);
- RoomListInfo.set_broomcreatepay(RoomInfo.bRoomCreatePay);
- RoomListInfo.set_bfangua(RoomInfo.bFanGua);
- RoomListInfo.set_bwanfa(RoomInfo.bWanFa);
- //发送数据
- std::string pbdata = RoomListInfo.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GETADD_INFO_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- //用户加入私有房间
- bool CAttemperEngineSink::OnTCPNetworkSubUserJoinRoom(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- UserInfo::PB_CS_C_GR_UserSitDown SitDown;
- SitDown.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_UserSitDown pUserSitDown;
- ZeroMemory(&pUserSitDown, sizeof(pUserSitDown));
- pUserSitDown.WXianZhi = SitDown.wxianzhi();
- pUserSitDown.Wsocket = SitDown.wsocket();
- CString szpassword = (CA2CTEX<2048>(SitDown.szpassword().c_str(), CP_UTF8)).m_szBuffer;
- CopyMemory(pUserSitDown.szPassword, szpassword, sizeof(pUserSitDown.szPassword));
- _sntprintf(pUserSitDown.szPassword, CountArray(pUserSitDown.szPassword), TEXT("%s"), szpassword);
- pUserSitDown.cbCreateTable = SitDown.cbcreatetable();
- CString szprivatetableid = (CA2CTEX<2048>(SitDown.szprivatetableid().c_str(), CP_UTF8)).m_szBuffer;
- CopyMemory(pUserSitDown.szPrivateTableID, szprivatetableid, sizeof(pUserSitDown.szPrivateTableID));
- pUserSitDown.bDuoLai = SitDown.bduolai();
- pUserSitDown.wFengDing = SitDown.wfengding();
- pUserSitDown.tableType = SitDown.tabletype();
- pUserSitDown.clubID = SitDown.clubid();
- for (WORD i = 0; i < SitDown.tableconfig_size(); i++)
- {
- if (SitDown.tableconfig(i).whadplaycount())continue;
- pUserSitDown.TableConfig[i].wSubGameID = SitDown.tableconfig(i).wsubgameid();
- pUserSitDown.TableConfig[i].wPlayRule = SitDown.tableconfig(i).wplayrule();
- pUserSitDown.TableConfig[i].wMaxFanRule = SitDown.tableconfig(i).wmaxfanrule();
- pUserSitDown.TableConfig[i].wMaxScore = SitDown.tableconfig(i).wmaxscore();
- pUserSitDown.TableConfig[i].wPlayCountRule = SitDown.tableconfig(i).wplaycountrule();
- pUserSitDown.TableConfig[i].wHadPlayCount = SitDown.tableconfig(i).whadplaycount();
- pUserSitDown.TableConfig[i].zmExtraRule = SitDown.tableconfig(i).zmextrarule();
- pUserSitDown.TableConfig[i].dghRule = SitDown.tableconfig(i).dghrule();
- CString sprivatetableid = (CA2CTEX<2048>(SitDown.tableconfig(i).sprivatetableid().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUserSitDown.TableConfig[i].sPrivateTableID, CountArray(pUserSitDown.TableConfig[i].sPrivateTableID), TEXT("%s"), sprivatetableid);
- pUserSitDown.TableConfig[i].bDuoLai = SitDown.tableconfig(i).bduolai();
- pUserSitDown.TableConfig[i].wFengDing = SitDown.tableconfig(i).wfengding();
- pUserSitDown.TableConfig[i].tmp1 = SitDown.tableconfig(i).tmp1();
- pUserSitDown.TableConfig[i].tmp2 = SitDown.tableconfig(i).tmp2();
- pUserSitDown.TableConfig[i].tmp3 = SitDown.tableconfig(i).tmp3();
- pUserSitDown.TableConfig[i].tmp4 = SitDown.tableconfig(i).tmp4();
- pUserSitDown.TableConfig[i].tmp5 = SitDown.tableconfig(i).tmp5();
- }
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- if (2 != pUserSitDown.cbCreateTable)
- {
- //SendRequestFailure(pIServerUserItem, TEXT("请求协议错误!"), 0);
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("请求协议错误!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- //用户效验
- //ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- if (!m_BAddCreate)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("服务器即将维护,暂时不能加入房间!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if (cbUserStatus == US_PLAYING || cbUserStatus == US_READY || cbUserStatus == US_SIT || cbUserStatus == US_PLAYINGWAIT)//用户判断
- {
- if (pIServerUserItem->GetTableID() == INVALID_TABLE)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("您正在游戏中,暂时不能离开,请先结束当前游戏!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%d,状态:%d,桌号与状态不一致"), L"OnTCPNetworkSubUserJoinRoom", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID
- , cbUserStatus);
- CTraceService::TraceString(csTestB, TraceLevel_Warning);
- }
-
- //登录成功 断线重连
- auto pTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (pTableFrame)
- {
- pTableFrame->OnEventUserOnLine(pIServerUserItem);
-
- if (IsJC(1234))
- {
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%d,状态:%d,模拟断线重练。"), L"OnTCPNetworkSubUserJoinRoom", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID
- , cbUserStatus);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- }
- else
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("您正在游戏中,暂时不能离开,请先结束当前游戏!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%d,状态:%d,查找桌子实体失败"), L"OnTCPNetworkSubUserJoinRoom", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID
- , cbUserStatus);
- CTraceService::TraceString(csTestB, TraceLevel_Warning);
- }
-
- return true;
- }
-
- //请求调整
- //WORD wRequestTableID = pUserSitDown->wTableID;
- //WORD wRequestChairID = pUserSitDown->wChairID;
-
- WORD wTableID = pIServerUserItem->GetTableID();
- if (wTableID != INVALID_TABLE)
- {//离开处理
- auto pTableFrame = GetTableFrame(wTableID);
- if (!pTableFrame)
- return false;
- CString csTestB;
- csTestB.Format(_T("表示玩家%d有桌子号%d信息了,又来加入旁观"), pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID);
- CTraceService::TraceString(csTestB, TraceLevel_Warning);
- std::shared_ptr<CTableFrame> pTempTableFrame;
- pTempTableFrame = GetPriTableFrame(pUserSitDown.szPrivateTableID);
- if (pTempTableFrame == NULL)return true;
- WORD wTempTableID = pTempTableFrame->GetTableID();
- if (wTableID != wTempTableID)
- {
- CString csT;
- csT.Format(_T("表示内存玩家%d有桌子索引%d桌子号%s信息了,又来加入旁观%d,%s"), pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID, pIServerUserItem->GetUserInfo()->szPrivateTableID, pTempTableFrame->GetTableID(), pUserSitDown.szPrivateTableID);
- CTraceService::TraceString(csT, TraceLevel_Warning);
- return false;
- //if (pTableFrame->PerformStandUpAction(pIServerUserItem) == false) return true;
- }
- else
- {
- return true;
- }
- //if (pTableFrame->PerformStandUpAction(pIServerUserItem) == false) return true;
- }
-
- std::shared_ptr<CTableFrame> pTableFrame;
-
- pTableFrame = GetPriTableFrame(pUserSitDown.szPrivateTableID);
- if (!pTableFrame)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("没有这个房间,请确认后再试!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szPrivateTableID = CW2AEX<1024>(pUserSitDown.szPrivateTableID, CP_UTF8).m_psz;
- SitDownAck.set_szprivatetableid(szPrivateTableID);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
-
- OutputDebugStringA("无条件上报删除该桌子");
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Temp = it->second;
- if (Temp.dwRoomNumber == _ttol(pUserSitDown.szPrivateTableID))
- {
- Temp.dwInsert_UpData_Del = 2;
- UpdataBodyOwnRoomToServer(&Temp, sizeof(Temp));
- break;
- }
- it++;
- }
- //SendRequestFailure(pIServerUserItem, TEXT("没有这个房间,请确认后再试!"), 0);
- return true;
- }
-
- ///+++新需求:红名的玩家不能进入正常玩家开的房间,只能在自己开的房间里玩 add by 2017-12-15
- if (pIServerUserItem != NULL
- && pIServerUserItem->GetUserInfo() != NULL
- && 1 == pIServerUserItem->GetUserInfo()->iXinYong)
- {
- BOOL bSelfRoom = FALSE; ///--是否为自己创建的房间
-
- auto iter = m_UserID_2_PriTableIDGROUP.find(pIServerUserItem->GetUserID());
- if (iter != m_UserID_2_PriTableIDGROUP.end())
- {
- JN_GR_RoomListGroup rooms = iter->second;
- for (int i = 0; i < (rooms.Num > 30 ? 30 : rooms.Num); i++)
- {
- if (rooms.jgrDate->dwRoomNumber == _wtoi(pUserSitDown.szPrivateTableID))
- {
- bSelfRoom = TRUE;
- break;
- }
- }
- }
-
- if (!bSelfRoom)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("对不起,您是异常用户,只能进入自己创建的房间"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
-
- //俱乐部加入限制
- if (pUserSitDown.tableType == 0 && pTableFrame->GetTableKind())
- {
- int dwClubID = (int)pTableFrame->GetTableClub();
- bool bClubflag = true;
- for (int k = 0; k < 20; k++) //这个20循环是什么意思
- {
- if (pIServerUserItem->GetUserInfo()->dwClubID[k] == dwClubID)
- {
- bClubflag = false;
- break;
- }
- }
- if (bClubflag)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
-
- CString text = _T("对不起,您不能加入,该房间属于牌友圈:");
- TCHAR tID[10];
- _itow(dwClubID, tID, 10);
- text.Append(tID);
-
- StringCchCopy(req.szText, _countof(req.szText), text);
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- }
- // to do 判断用户版本号
- TCHAR szMachineID[LEN_MACHINE_ID] = { 0 };
- memcpy(szMachineID, pIServerUserItem->GetMachineID(), sizeof(szMachineID));
- del_char(szMachineID, L'.');
- __int64 iMachineID = StrToNmuber(szMachineID);
-
- //--最低要求的版本号
- TCHAR szMinClientVer[LEN_MACHINE_ID] = { 0 };
- memcpy(szMinClientVer, m_pInitParameter->m_szMinClientVer, sizeof(szMinClientVer));
- del_char(szMinClientVer, L'.');
- __int64 iMinClientVer = StrToNmuber(szMinClientVer);
-
- //if (iMachineID < iMinClientVer && (pTableFrame->GetGameConfig().wSubGameID == 14 || pTableFrame->GetGameConfig().tmp1 == 2))
- //{
- // CString str;
- // str.Format(_T("请下载最新版本,才能玩百变双扣。 iMachineID=%I64u userID=%d"), iMachineID, pIServerUserItem->GetUserID());
- // CTraceService::TraceString(str, TraceLevel_Warning);
-
- // CMD_GR_UserSitDownAck req;
- // req.cbRet = 1;
- // StringCchCopy(req.szText, _countof(req.szText), _T("请下载最新版本,才能玩该玩法!"));
- // UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- // SitDownAck.set_cbret(req.cbRet);
- // std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- // SitDownAck.set_sztext(szText);
- // //发送数据
- // std::string pbdata = SitDownAck.SerializePartialAsString();
-
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- // return true;
- //}
-
- //加入旁观
- if (pTableFrame->PerformLookonAction(pIServerUserItem))
- {
- //进入房间旁观
- CMD_GR_UserSitDownAckEx req;
-
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
-
- lstrcpy(req.szPrivateTableID, szTemp);
- req.cbRet = 0;
- req.dijin = pTableFrame->GetGameConfig().wPlayRule;
- req.paytype = pTableFrame->GetGameConfig().wMaxFanRule;
- req.desktype = pTableFrame->GetTableKind();// pTableFrame->GetGameConfig().wSubGameID;
- req.playtype = pTableFrame->GetGameConfig().wSubGameID;
- req.totalplay = pTableFrame->GetGameConfig().wPlayCountRule;
-
- req.bDuoLai = pTableFrame->GetGameConfig().bDuoLai; //多癞子可平胡,0可以 1不可以
- req.wFengDing = pTableFrame->GetGameConfig().wFengDing; //封顶值
- req.ipLimit = pTableFrame->GetGameConfig().wMaxScore; //备用字段
- req.playnum = pTableFrame->GetGameConfig().tmp1; //备用字段
- req.tmp3 = pTableFrame->GetGameConfig().tmp2; //备用字段
-
-
- req.isowner = pTableFrame->GetPrivateTableOwnerID() == pIServerUserItem->GetUserID() ? 1 : 0;
- req.roomId = pTableFrame->GetTableID();
-
- pIServerUserItem->GetUserInfo()->wTableID = req.roomId; //先设置好状态再发协议给前端
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- std::string szPrivateTableID = CW2AEX<1024>(req.szPrivateTableID, CP_UTF8).m_psz;
- SitDownAck.set_szprivatetableid(szPrivateTableID);
- SitDownAck.set_cbret(req.cbRet);
- SitDownAck.set_dijin(req.dijin);
- SitDownAck.set_paytype(req.paytype);
- SitDownAck.set_desktype(req.desktype);
- SitDownAck.set_playtype(req.playtype);
- SitDownAck.set_totalplay(req.totalplay);
- SitDownAck.set_bduolai(req.bDuoLai);
- SitDownAck.set_wfengding(req.wFengDing);
- SitDownAck.set_iplimit(req.ipLimit);
- SitDownAck.set_playnum(req.playnum);
- SitDownAck.set_tmp3(req.tmp3);
- SitDownAck.set_isowner(req.isowner);
- SitDownAck.set_roomid(req.roomId);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- //用户状态
- pIServerUserItem->SetClientReady(true);
- pIServerUserItem->SetUserStatus(US_LOOKON, pTableFrame->GetTableID(), INVALID_CHAIR);
- pTableFrame->SendUserInfoStat(pIServerUserItem);
- }
-
- return true;
- }
-
- //请求元宝
- bool CAttemperEngineSink::OnTCPNetworkGetBearn(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnTCPNetworkGetBearn"), TraceLevel_Debug);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
- m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_GET_BEAN, dwSocketID, &dUserID, sizeof(dUserID));
- return true;
- }
-
- //房主请求解散
- bool CAttemperEngineSink::OnTCPNetworkFangZhuJieSan(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if (cbUserStatus == US_FREE)//用户判断
- {
- SendRequestFailure(pIServerUserItem, TEXT("您未进入房间,不能解散!"), 0);
- return true;
- }
-
- auto pTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (!pTableFrame)
- {
- SendRequestFailure(pIServerUserItem, TEXT("当前房间不存在!"), 0);
- return true;
- }
-
- //房主检验
- if (pTableFrame->GetPrivateTableOwnerID() != pIServerUserItem->GetUserID())
- {
- SendRequestFailure(pIServerUserItem, TEXT("不是您创建的房间,无法解散!"), 0);
- return true;
- }
-
- //解散 删除流程
- pTableFrame->SetTableFree();
- return true;
- }
- //请求订单编号
- bool CAttemperEngineSink::OnTCPNetworkSubUserGetDingdan(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- ASSERT(wDataSize >= sizeof(CMD_GR_GetDingDan));
- if (wDataSize < sizeof(CMD_GR_GetDingDan)) return false;
-
- //效验数据
- CMD_GR_GetDingDan * pUser = (CMD_GR_GetDingDan *)pData;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- if (wcslen(pIServerUserItem->GetUserInfo()->szUnionID) == 0)
- {
- //没有UNIONID
- return false;
- }
-
- GETDUILIEBASE Base;
- ZeroMemory(&Base, sizeof(GETDUILIEBASE));
- StringCchCat(Base.szUnionID, 32, pIServerUserItem->GetUserInfo()->szUnionID);
- Base.CommendID = 1;//请求订单编号
- Base.dwSocketID = dwSocketID;
-
- GETDUILIE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIE));
- Temp.dd.dProductId = pUser->dProductId;
- Temp.dd.jiage = pUser->jiage;
-
- memcpy(Temp.dd.ProductName, pUser->ProductName, sizeof(pUser->ProductName));
- Temp.dd.payflag = 0;
- //Temp.dd.sdkflag = 0;
- //Temp.dd.tmpflag = 0;
-
- Temp.ack.dUserID = pIServerUserItem->GetUserID();
- Temp.ack.dDaiLi = pIServerUserItem->GetUserInfo()->dDaiLi;
- //赋值市场测试设为300
- Temp.ack.dwGameID = 305//gameID对应自己市场id;
- /*pIServerUserItem->GetUserInfo()->dwGameID*/;
-
- //添加地址
- DWORD address = pIServerUserItem->GetClientAddr();
- BYTE * pClientAddr = (BYTE *)&address;
- _sntprintf(Temp.ack.szClientAddr, CountArray(Temp.ack.szClientAddr), TEXT("%d.%d.%d.%d"), pClientAddr[0], pClientAddr[1], pClientAddr[2], pClientAddr[3]);
-
-
- m_Data.dChongZhi++;
- CopyMemory(Base.szBuffer, &Temp, sizeof(GETDUILIE));
- CHttpClient::AddLog(dwSocketID, Base);
-
- return true;
- }
- //新方式请求订单编号
- bool CAttemperEngineSink::OnTCPNetworkSubUserGetDingdanNew(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_GetDingDanNEW DingDanNEW;
- DingDanNEW.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_GetDingDanNEW pUser;
- ZeroMemory(&pUser, sizeof(pUser));
- pUser.dProductId = DingDanNEW.dproductid();
- CString productname = (CA2CTEX<2048>(DingDanNEW.productname().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUser.ProductName, CountArray(pUser.ProductName), TEXT("%s"), productname);
- pUser.jiage = DingDanNEW.jiage();
- pUser.payflag = DingDanNEW.payflag();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- if (wcslen(pIServerUserItem->GetUserInfo()->szUnionID) == 0)
- {
- //没有UNIONID
- return false;
- }
-
- GETDUILIEBASE Base;
- ZeroMemory(&Base, sizeof(GETDUILIEBASE));
- StringCchCat(Base.szUnionID, 32, pIServerUserItem->GetUserInfo()->szUnionID);
- Base.CommendID = 1;//请求订单编号
- Base.dwSocketID = dwSocketID;
-
- GETDUILIE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIE));
- Temp.dd.dProductId = pUser.dProductId;
- Temp.dd.jiage = pUser.jiage;
- memcpy(Temp.dd.ProductName, pUser.ProductName, sizeof(pUser.ProductName));
- Temp.dd.payflag = pUser.payflag;
- Temp.ack.dUserID = pIServerUserItem->GetUserID();
- Temp.ack.dDaiLi = pIServerUserItem->GetUserInfo()->dDaiLi;
- Temp.ack.dwGameID = 305/*pIServerUserItem->GetUserInfo()->dwGameID*/;
- DWORD address = pIServerUserItem->GetClientAddr();
- BYTE * pClientAddr = (BYTE *)&address;
- _sntprintf(Temp.ack.szClientAddr, CountArray(Temp.ack.szClientAddr), TEXT("%d.%d.%d.%d"), pClientAddr[0], pClientAddr[1], pClientAddr[2], pClientAddr[3]);
-
-
- m_Data.dChongZhi++;
- CopyMemory(Base.szBuffer, &Temp, sizeof(GETDUILIE));
- CHttpClient::AddLog(dwSocketID, Base);
-
- return true;
- }
-
- //用户解绑代理结果回调
- bool CAttemperEngineSink::OnTCPNetworkSubUserUntieAgentCallBack(CString csTest, DWORD dwSocketID)
- {
- ////获取用户
- //WORD wBindIndex = LOWORD(dwSocketID);
- //IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //if (pIServerUserItem == NULL) return false;
-
- //return SendData(dwSocketID, MDM_GR_USER, SUB_GR_USER_APPLY_UNTIE_AGENT_ACK, &iRet, sizeof(int));
-
-
- TCHAR* pData = NULL;
- try
- {
- pData = (TCHAR*)malloc((csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
-
- ZeroMemory(pData, (csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
- BYTE* pByte = (BYTE*)pData;
- WORD *pTemp = (WORD*)pData;
- pTemp[0] = csTest.GetLength() + 1;
- CopyMemory(pByte + 2, csTest.GetBuffer(0), csTest.GetLength() * sizeof(TCHAR));
- csTest.ReleaseBuffer();
-
- //SendData(dwSocketID, MDM_GR_USER, SUB_GR_USER_GET_BANGDINGACK, pData, (csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
-
- free((void*)pData);
- pData = NULL;
-
- int iRet = -1;
- if (csTest.Find(_T("<Return>1</Return>")) != -1)
- {
- //成功 更新
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return true;
-
- if (pIServerUserItem->GetUserInfo())
- {
- pIServerUserItem->GetUserInfo()->dDaiLi = 0;
- }
-
- iRet = 0;
- }
-
- int startIndex = csTest.Find(_T("<Text>"));
- DBR_GR_UntieAgentInfo UntieAgentInfo = { 0 };
- UntieAgentInfo.IRet = iRet;
- CString strResult = csTest.Mid(startIndex);
- int endIndex = strResult.Find(_T("</Text>"));
- strResult = strResult.Mid(6, endIndex-6);
- _tcscpy(UntieAgentInfo.szErrorDsc, strResult);
-
- UserInfo::PB_CS_S_UntieAgentInfo AgentInfo;
- AgentInfo.set_iret(UntieAgentInfo.IRet);
- std::string szErrorDsc = CW2AEX<1024>(UntieAgentInfo.szErrorDsc, CP_UTF8).m_psz;
- AgentInfo.set_szerrordsc(szErrorDsc);
- //发送数据
- std::string pbdata = AgentInfo.SerializePartialAsString();
-
- return SendData(dwSocketID, MDM_GR_USER, SUB_GR_USER_APPLY_UNTIE_AGENT_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- }
- catch (...)
- {
- if (pData)
- {
- free((void*)pData);
- }
- }
- return true;
- }
- //获取手机验证码,写个线程去调短信接口
- bool CAttemperEngineSink::OnTCPNetworkSubUserCheckVerifCode(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_CheckVerifCode VerifCode;
- VerifCode.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_CheckVerifCode pUser;
- ZeroMemory(&pUser, sizeof(pUser));
- CString phonenum = (CA2CTEX<2048>(VerifCode.phonenum().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUser.PhoneNum, CountArray(pUser.PhoneNum), TEXT("%s"), phonenum);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- /*
- //_sntprintf(pUser->PhoneNum, 12, TEXT("18746191484"));
- DWORD dUserID = pIServerUserItem->GetUserID();
- GETDUILIEBASE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIEBASE));
- StringCchCat(Temp.szUnionID, 12, pUser->PhoneNum);
-
- Temp.dUserID = dUserID;
- Temp.CommendID = 8; //获取手机验证码(只作透传)
- Temp.dwSocketID = dwSocketID;
-
- CHttpClient::AddLog(dwSocketID, Temp);
- return true;
- */
- CMD_GR_GetVerifCode GetVerifCode = { 0 };
- StringCchCat(GetVerifCode.PhoneNum, 12, pUser.PhoneNum);
- GetVerifCode.dUserID = pIServerUserItem->GetUserID();
- m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_GET_VERIF_CODE, dwSocketID, &GetVerifCode, sizeof(CMD_GR_GetVerifCode));
- return true;
- }
- //回调短信验证,表示验证通过了,落地绑定关系到数据库
- bool CAttemperEngineSink::OnTCPNetworkSubUserCheckVerifCodeCallBack(CString csIphoneNum, CString strVerfCode, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
- if (IsJC(302))
- {
- CString strTip;
- strTip.Format(L"**落地手机号码:%s", csIphoneNum);
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
- DBR_GR_GetCheckIphone pData;
- memset(&pData, 0, sizeof(DBR_GR_GetCheckIphone));
- //如果返回的是校验通过,数据落地,然后返回前端
- pData.dwUserID = dUserID;
- _sntprintf(pData.PhoneNum, 12, TEXT("%s"), csIphoneNum);
- _sntprintf(pData.VerfCode, 7, TEXT("%s"), strVerfCode);
-
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_CHECK_IPHONE, dwSocketID, &pData, sizeof(DBR_GR_GetCheckIphone));
- }
- //绑定手机,前端传来验证码,写个线程去校验验证码
- bool CAttemperEngineSink::OnTCPNetworkSubUserCheckIphone(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_CheckIphone Iphone;
- Iphone.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_CheckVerifCode pUser;
- ZeroMemory(&pUser, sizeof(pUser));
- CString phonenum = (CA2CTEX<2048>(Iphone.phonenum().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUser.PhoneNum, CountArray(pUser.PhoneNum), TEXT("%s"), phonenum);
- CString verfcode = (CA2CTEX<2048>(Iphone.verfcode().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUser.VerfCode, CountArray(pUser.VerfCode), TEXT("%s"), verfcode);
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- //std::string strVerfCode = CW2AEX<1024>(pUser_bak->Name).m_psz;
- //_sntprintf(pUser->PhoneNum, 12, TEXT("18746191484"));
- //pUser->VerfCode = atoi(strVerfCode.c_str());
-
- GETDUILIEBASE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIEBASE));
- StringCchCat(Temp.szUnionID, 12, pUser.PhoneNum);
-
- //Temp.dUserID = pUser->VerfCode; //用来临时作为验证码
- memcpy(Temp.bb.szName, pUser.VerfCode, 6*sizeof(TCHAR));
- Temp.CommendID = 9; //校验手机验证码(只作透传)
- Temp.dwSocketID = dwSocketID;
-
- CHttpClient::AddLog(dwSocketID, Temp);
- return true;
- }
- //绑定手机查询
- bool CAttemperEngineSink::OnTCPNetworkSubUserCheckIphoneQuery(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_CHECK_IPHONE_QUERY, dwSocketID, &dUserID, sizeof(dUserID));
- }
- //绑定闲聊
- bool CAttemperEngineSink::OnTCPNetworkSubUserXianLiao(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_CheckXiaoLiao XiaoLiao;
- XiaoLiao.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_CheckXiaoLiao pUser;
- ZeroMemory(&pUser, sizeof(pUser));
- CString openid = (CA2CTEX<2048>(XiaoLiao.openid().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUser.OpenID, CountArray(pUser.OpenID), TEXT("%s"), openid);
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
- DBR_GR_GetCheckXianLiao XianLiao = { 0 };
- XianLiao.dwUserID = pIServerUserItem->GetUserID();
- lstrcpyn(XianLiao.OpenID, pUser.OpenID, CountArray(pUser.OpenID));
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_CHECK_XIANLIAO, dwSocketID, &XianLiao, sizeof(DBR_GR_GetCheckXianLiao));
- }
- //实名认证
- bool CAttemperEngineSink::OnTCPNetworkSubUserCheckName(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_CheckName Name;
- Name.ParseFromArray(pData, wDataSize);
- //处理消息
- CMD_GR_CheckName pUser;
- ZeroMemory(&pUser, sizeof(pUser));
- CString name = (CA2CTEX<2048>(Name.name().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUser.Name, CountArray(pUser.Name), TEXT("%s"), name);
- CString idcard = (CA2CTEX<2048>(Name.idcard().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pUser.IDCard, CountArray(pUser.IDCard), TEXT("%s"), idcard);
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
-
- CHECKNAMEINFO user;
- user.nameInfo = pUser;
- user.dUserID = dUserID;
-
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_CHECK_NAME, dwSocketID, &user, sizeof(CHECKNAMEINFO));
- }
-
- bool CAttemperEngineSink::OnTCPNetworkSubUserCheckNameQuery(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_CHECK_NAME_QUERY, dwSocketID, &dUserID, sizeof(dUserID));
- }
-
- //订单编号返回应答
- bool CAttemperEngineSink::OnTCPNetworkSubUserGetDingdanCallBack(GETDUILIE Data, DWORD dwSocketID)
- {
- TCHAR* pData = NULL;
- try
- {
- CString csTest = Data.ack.szRet;
- pData = (TCHAR*)malloc((csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
-
- ZeroMemory(pData, (csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
- BYTE* pByte = (BYTE*)pData;
- WORD* pTemp = (WORD*)pData;
- //pTemp[0] = csTest.GetLength() + 1;
- CopyMemory(pByte, csTest.GetBuffer(0), csTest.GetLength() * sizeof(TCHAR));
- csTest.ReleaseBuffer();
-
- m_Data.dChongZhiOK++;
-
- CJsonBusiness cjb(MDM_GR_USER, SUB_GR_USER_GET_DINGDANACK);
- string m_str = "";
- m_str = cjb.string_To_UTF8(pData, (csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
-
- UserInfo::PB_CS_S_GetDingDanACK DingDan;
- DingDan.set_ret(m_str);
- //发送数据
- std::string pbdata = DingDan.SerializePartialAsString();
- SendData(dwSocketID, MDM_GR_USER, SUB_GR_USER_GET_DINGDANACK, (void*)pbdata.c_str(), pbdata.length());
- free((void*)pData);
- pData = NULL;
-
- }
- catch (...)
- {
- if (pData)
- {
- free((void*)pData);
- }
- }
-
- return true;
- }
-
- //获取购买记录
- bool CAttemperEngineSink::OnTCPNetworkSubUserGetDingdanList(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- GETDUILIEBASE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIEBASE));
- StringCchCat(Temp.szUnionID, 32, pIServerUserItem->GetUserInfo()->szUnionID);
- Temp.CommendID = 2;//获取购买记录
- Temp.dwSocketID = dwSocketID;
-
- CHttpClient::AddLog(dwSocketID, Temp);
-
- return true;
- }
-
- //获取购买记录返回应答
- bool CAttemperEngineSink::OnTCPNetworkSubUserGetDingdanListCallBack(CString csTest, DWORD dwSocketID)
- {
- TCHAR* pData = NULL;
- try
- {
- pData = (TCHAR*)malloc((csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
- ZeroMemory(pData, (csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
- BYTE* pByte = (BYTE*)pData;
- WORD* pTemp = (WORD*)pData;
- pTemp[0] = csTest.GetLength() + 1;
- CopyMemory(pByte + 2, csTest.GetBuffer(0), csTest.GetLength() * sizeof(TCHAR));
- csTest.ReleaseBuffer();
- CJsonBusiness cjb(MDM_GR_USER, SUB_GR_USER_GET_DINGDANLISTACK);
- std::string str = cjb.GetInfoJson(pData, (csTest.GetLength() + 1) * sizeof(TCHAR) + sizeof(WORD));
- UserInfo::PB_CS_S_DingdanList DingDanList;
- DingDanList.set_ret(str);
- //发送数据
- std::string pbdata = DingDanList.SerializePartialAsString();
- SendData(dwSocketID, MDM_GR_USER, SUB_GR_USER_GET_DINGDANLISTACK, (void*)pbdata.c_str(), pbdata.length());
- free((void*)pData);
- pData = NULL;
- }
- catch (...)
- {
- if (pData)
- {
- free((void*)pData);
- }
- }
-
- return true;
- }
-
- //绑定代理信息
- bool CAttemperEngineSink::OnTCPNetworkSubUseGetDaiLiInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- if (wcslen(pIServerUserItem->GetUserInfo()->szUnionID) == 0)
- {
- //没有UNIONID
- return false;
- }
-
- if (pIServerUserItem->GetUserInfo()->dDaiLi != 0)
- {
- CMD_GR_DaiLiInfo aa;
-
- ZeroMemory(&aa, sizeof(CMD_GR_DaiLiInfo));
- StringCbCat(aa.szName, 32, pIServerUserItem->GetUserInfo()->szName);
- StringCbCat(aa.szWx, 32, pIServerUserItem->GetUserInfo()->szWx);
- StringCbCat(aa.szQQ, 32, pIServerUserItem->GetUserInfo()->szQQ);
-
- UserInfo::PB_CS_S_DaiLiInfo DaiLiInfo;
- std::string szName = CW2AEX<1024>(aa.szName, CP_UTF8).m_psz;
- std::string szWx = CW2AEX<1024>(aa.szWx, CP_UTF8).m_psz;
- std::string szQQ = CW2AEX<1024>(aa.szQQ, CP_UTF8).m_psz;
- DaiLiInfo.set_szname(szName);
- DaiLiInfo.set_szwx(szWx);
- DaiLiInfo.set_szqq(szQQ);
- //发送数据
- std::string pbdata = DaiLiInfo.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_DAILI_INFO_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- return true;
- }
- //绑定代理
- bool CAttemperEngineSink::OnTCPNetworkSubUseBangDing(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_BangDing Ding;
- Ding.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_BangDing pUser;
- ZeroMemory(&pUser, sizeof(pUser));
- pUser.dDaiLi = Ding.ddaili();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- if (wcslen(pIServerUserItem->GetUserInfo()->szUnionID) == 0)
- {
- //没有UNIONID
- return false;
- }
-
- if (pIServerUserItem->GetUserInfo()->dDaiLi != 0)
- {
- //已经绑定了代理
- CMD_GR_BangDingACK Temp;
- ZeroMemory(&Temp, sizeof(CMD_GR_BangDingACK));
- CString csText = _T("<NewDataSet><Table1><Return>0</Return><Text>您已经绑定过了</Text><HaveSecondRet>0</HaveSecondRet><Value /></Table1></NewDataSet>");
- WORD *pWord = (WORD *)&Temp;
- pWord[0] = csText.GetLength() + 1;
- StringCbCat(Temp.szText, 1024, csText.GetBuffer(0));
- csText.ReleaseBuffer();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GET_BANGDINGACK, &Temp, 2 + pWord[0] * sizeof(TCHAR));
- return true;
- }
-
- if (pUser.dDaiLi< 10000 || pUser.dDaiLi > 999999)
- {
- //代理值非法
- CMD_GR_BangDingACK Temp;
- ZeroMemory(&Temp, sizeof(CMD_GR_BangDingACK));
- Temp.bRet = 0;
- CString csText = _T("<NewDataSet><Table1><Return>0</Return><Text>输入代理编号出错</Text><HaveSecondRet>0</HaveSecondRet><Value /></Table1></NewDataSet>");
- WORD *pWord = (WORD *)&Temp;
- pWord[0] = csText.GetLength() + 1;
- StringCbCat(Temp.szText, 1024, csText.GetBuffer(0));
- csText.ReleaseBuffer();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GET_BANGDINGACK, &Temp, 2 + pWord[0] * sizeof(TCHAR));
- return true;
- }
-
- GETDUILIEBASE Base;
- ZeroMemory(&Base, sizeof(GETDUILIEBASE));
- StringCchCat(Base.szUnionID, 32, pIServerUserItem->GetUserInfo()->szUnionID);
- Base.CommendID = 3;//绑定代理
- Base.dwSocketID = dwSocketID;
- Base.dUserID = pIServerUserItem->GetUserID();
-
- CopyMemory(Base.szBuffer, &pUser, sizeof(CMD_GR_BangDing));
-
- CMD_GR_Info aa;
- ZeroMemory(&aa, sizeof(CMD_GR_Info));
- StringCchCat(aa.szName, 32, pIServerUserItem->GetUserInfo()->szNickName);
- StringCchCat(aa.szImgHead, 256, pIServerUserItem->GetUserInfo()->szHeadUrl);
- Base.bb = aa;
-
- CHttpClient::AddLog(dwSocketID, Base);
-
- return true;
- }
- //绑定代理应答
- bool CAttemperEngineSink::OnTCPNetworkSubUserBangDingCallBack(CString csTest, DWORD dwSocketID, DWORD dDaiLi)
- {
- TCHAR* pData = NULL;
- try
- {
- CMD_GR_BangDingACK Temp;
- ZeroMemory(&Temp, sizeof(CMD_GR_BangDingACK));
- Temp.bRet = 0;
-
- if (csTest.Find(_T("<Return>1</Return>")) != -1)
- {
- //成功 更新
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem* pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return true;
-
- if (pIServerUserItem->GetUserInfo())
- {
- pIServerUserItem->GetUserInfo()->dDaiLi = dDaiLi;
- }
-
- Temp.bRet = 1;
- //查询更新数据库
-
- }
- WORD* pWord = (WORD*)&Temp;
- pWord[0] = csTest.GetLength() + 1;
- StringCbCat(Temp.szText, 1024, csTest.GetBuffer(0));
-
- CJsonBusiness cjb(MDM_GR_USER, SUB_GR_USER_GET_BANGDINGACK);
- std::string str = cjb.GetInfoJson((TCHAR*)&Temp, sizeof(CMD_GR_BangDingACK));
- UserInfo::PB_CS_S_BangDing BangDing;
- BangDing.set_ret(str);
- //发送数据
- std::string pbdata = BangDing.SerializePartialAsString();
- SendData(dwSocketID, MDM_GR_USER, SUB_GR_USER_GET_BANGDINGACK, (void*)pbdata.c_str(), pbdata.length());
-
- }
- catch (...)
- {
- if (pData)
- {
- free((void*)pData);
- }
- }
- return true;
- }
- //用户坐下请求
- bool CAttemperEngineSink::OnTCPNetworkSubUserDown(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_UserSeatEx SeatEx;
- SeatEx.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_UserSeatEx pUserSitDown;
- ZeroMemory(&pUserSitDown, sizeof(pUserSitDown));
- pUserSitDown.seatId = SeatEx.seatid();
- pUserSitDown.x = SeatEx.x();
- pUserSitDown.y = SeatEx.y();
-
- if (pUserSitDown.seatId > 3)
- {
- CString csTestB;
- csTestB.Format(_T("坐下不合法:%d"), pUserSitDown.seatId);
- CTraceService::TraceString(csTestB, TraceLevel_Warning);
- return false;
- }
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- //ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- pIServerUserItem->GetUserInfo()->dDingWeiX = pUserSitDown.x;
- pIServerUserItem->GetUserInfo()->dDingWeiY = pUserSitDown.y;
-
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if (cbUserStatus == US_PLAYING || cbUserStatus == US_READY || cbUserStatus == US_SIT || cbUserStatus == US_PLAYINGWAIT)//用户判断
- {
- SendRequestFailure(pIServerUserItem, TEXT("您正在游戏中,不能选择座位!"), 0);
-
- return true;
- }
-
- auto pTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (!pTableFrame)
- {
- SendRequestFailure(pIServerUserItem, TEXT("当前房间不存在!"), 0);
-
- return true;
- }
-
- if (pTableFrame->PerformSitDownAction(pUserSitDown.seatId, pIServerUserItem))
- {
- //更新桌子列表
- JN_GR_RoomListGroup Temp;
- auto iter = m_UserID_2_PriTableIDGROUP.find(pTableFrame->GetPrivateTableOwnerID());
- if (iter != std::end(m_UserID_2_PriTableIDGROUP))
- {
- Temp = iter->second;
-
- //判定有没有找到该房间
- BOOL bFind = false;
- for (int i = 0; i < (Temp.Num > 30 ? 30 : Temp.Num); i++)
- {
- if (Temp.jgrDate[i].dwRoomNumber == _ttol(pTableFrame->GetPrivateTableID().c_str()))
- {
- bFind = true; break;
- }
- }
-
- //没找到从全局找
- if (bFind == false)
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- auto iterY = m_PrivateRoomAll.find(_ttol(pTableFrame->GetPrivateTableID().c_str()));
- if (iterY != m_PrivateRoomAll.end())
- {
- if (Temp.Num < 30)
- {
- Temp.jgrDate[Temp.Num] = iterY->second;
- Temp.Num++;
- }
- }
- else
- {
- return false;
- }
- }
- }
- else
- {
- //由于4点中的清除操作照成房间找不到
- //从全局去找
- CWHDataLocker DataLocker(m_CriticalSection);
- auto aTemp = m_PrivateRoomAll.find(_ttol(pTableFrame->GetPrivateTableID().c_str()));
- if (aTemp != m_PrivateRoomAll.end())
- {
- Temp.Num = 1;
- Temp.jgrDate[0] = aTemp->second;
- }
- else
- {
- return false;
- }
- }
- int nflag = 0;//临时变量 LYH 2018-8-28
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
- for (int i = 0; i < (Temp.Num > 30 ? 30 : Temp.Num); i++)
- {
- if (Temp.jgrDate[i].dwRoomNumber == _ttol(szTemp))
- {
- nflag = 1;
- /*if (2 == Temp.jgrDate[i].dwReadyBody)break;*/
- Temp.jgrDate[i].dwReadyBody++;
-
- //添加玩家信息
- Temp.jgrDate[i].player[pUserSitDown.seatId].dwUserID = pIServerUserItem->GetUserID();
- CopyMemory(Temp.jgrDate[i].player[pUserSitDown.seatId].szName, pIServerUserItem->GetNickName(), sizeof(Temp.jgrDate[i].player[pUserSitDown.seatId].szName));
- CopyMemory(Temp.jgrDate[i].player[pUserSitDown.seatId].szHeadUrl, pIServerUserItem->GetUserInfo()->szHeadUrl, sizeof(Temp.jgrDate[i].player[pUserSitDown.seatId].szHeadUrl));
-
- //同步到中心服务器
- JN_GR_RoomListBig UserChat = Temp.jgrDate[i];
- UserChat.dwInsert_UpData_Del = 1;
- if (pTableFrame->GetNullChairCount() == 0 || (pTableFrame->GetNullChairCount() == 1 && pTableFrame->GetStartMode() == START_MODE_ALL_READY))
- {
- UserChat.roomStatus = 1;
- //自动创房判定
- if (pTableFrame->GetTableKind() == 1 && pTableFrame->GetTableAuto() == 1)
- {
- int FreeTalbe = 0;
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig TempTemp = it->second;
- if (TempTemp.tmp6[0] == pTableFrame->GetTableClub() && TempTemp.roomStatus == 0 && TempTemp.dwRoomNumber != _ttol(szTemp))
- {
- if (UserChat.tmp4 == TempTemp.tmp4)
- {
- FreeTalbe++;
- }
- }
- it++;
- }
-
- //没有找到空闲的桌子
- if (FreeTalbe == 0)
- {
- this->OnAutoCreateRoomToDB(pTableFrame->GetTableClub(), pIServerUserItem->GetUserID(), UserChat.tmp4);
- }
- }
- }
- else
- {
- OutputDebugStringA("人员还没有满");
- }
- UpdataBodyOwnRoomToServer(&UserChat, sizeof(UserChat));
-
- //俱乐部房间变动广播
- if (UserChat.tmp6[0] != 0 && UserChat.roomType == 1)
- {
- CMD_GR_UserData UserData;
- ZeroMemory(&UserData, sizeof(UserData));
- UserData.dwClubID = UserChat.tmp6[0];
- UserData.newsFlag = 2;
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_NotifyUser, 0, &(UserData), sizeof(CMD_GR_UserData));
- }
- break;
- }
- }
- if (0 == nflag)
- {
- CString csTestB;
- csTestB.Format(_T("创建者ID=%d,该节点m_UserID_2_PriTableIDGROUP数组内未找到房间号【%s】"), pTableFrame->GetPrivateTableOwnerID(), szTemp);
- CTraceService::TraceString(csTestB, TraceLevel_Warning);
- }
-
- m_UserID_2_PriTableIDGROUP[pTableFrame->GetPrivateTableOwnerID()] = Temp;
-
- UserInfo::PB_CS_S_UserSitAck SitAck;
- SitAck.set_ret(0);
- //发送数据
- std::string pbdata = SitAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_SEAT_ACK, (void*)pbdata.c_str(), pbdata.length());
- }
-
- return true;
- }
-
- //用户起立
- bool CAttemperEngineSink::OnTCPNetworkSubUserStandUp(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_UserStandUp StandUp;
- StandUp.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_UserStandUp pUserStandUp;
- ZeroMemory(&pUserStandUp, sizeof(pUserStandUp));
- pUserStandUp.wTableID = StandUp.wtableid();
- pUserStandUp.wChairID = StandUp.wchairid();
- pUserStandUp.cbForceLeave = StandUp.cbforceleave();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
- BYTE iStata = pIServerUserItem->GetUserInfo()->cbUserStatus;//原本状态
-
- auto pTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (!pTableFrame)
- return false;
-
- //用户判断
- if ((pUserStandUp.cbForceLeave == FALSE) && (pIServerUserItem->GetUserStatus() == US_PLAYING || pIServerUserItem->GetUserStatus() == US_PLAYINGWAIT))
- {
- SendRequestFailure(pIServerUserItem, TEXT("您正在游戏中,暂时不能离开,请先结束当前游戏!"), 0);
-
- if (IsJC(1234))
- {
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%s,状态:%d"), L"OnTCPNetworkSubUserStandUp", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->szPrivateTableID
- , pIServerUserItem->GetUserStatus());
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- return true;
- }
-
- //当这个人桌子上游戏开始了,他又不是旁观用户 就不让他走了。
- if (pTableFrame->GetStartCount() >= 1 && pIServerUserItem->GetUserStatus() == US_READY)
- {
- SendRequestFailure(pIServerUserItem, TEXT("您正在游戏中,暂时不能离开,请先结束当前游戏!"), 0);
-
- if (IsJC(1234))
- {
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%s,状态:%d"), L"OnTCPNetworkSubUserStandUp2", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->szPrivateTableID
- , pIServerUserItem->GetUserStatus());
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- return true;
- }
-
- //离开处理
- if (pTableFrame->PerformStandUpAction(pIServerUserItem))
- {
- //如果是旁观状态,不用清楚。
- if (iStata == US_SIT || iStata == US_READY)
- {
- //更新桌子列表
- JN_GR_RoomListGroup Temp;
- ZeroMemory(&Temp, sizeof(JN_GR_RoomListGroup));
-
- auto iter = m_UserID_2_PriTableIDGROUP.find(pTableFrame->GetPrivateTableOwnerID());
- if (iter == std::end(m_UserID_2_PriTableIDGROUP))
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- auto iter2 = m_PrivateRoomAll.find(_ttol(pTableFrame->GetPrivateTableID().c_str()));
- if (iter2 != m_PrivateRoomAll.end())
- {
- Temp.Num = 1;
- Temp.jgrDate[0] = iter2->second;
- }
- else
- {
- return false;
- }
- }
- else
- {
- Temp = iter->second;
- }
-
- for (int i = 0; i < (Temp.Num > 30 ? 30 : Temp.Num); i++)
- {
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
-
- if (Temp.jgrDate[i].dwRoomNumber == _ttol(szTemp))
- {
- if (Temp.jgrDate[i].dwReadyBody > 0)
- {
- Temp.jgrDate[i].dwReadyBody--;
- for (int j = 0; j < 4; j++)
- {
- if (Temp.jgrDate[i].player[j].dwUserID == pIServerUserItem->GetUserID())
- {
- ZeroMemory(&(Temp.jgrDate[i].player[j]), sizeof(PlayerInfo));
- break;
- }
- }
- }
-
- //同步到中心服务器
- JN_GR_RoomListBig UserChat = Temp.jgrDate[i];
- UserChat.dwInsert_UpData_Del = 1;
- UpdataBodyOwnRoomToServer(&UserChat, sizeof(UserChat));
-
- //俱乐部房间变动广播
- if (UserChat.tmp6[0] != 0 && UserChat.roomType == 1)
- {
- CMD_GR_UserData UserData;
- ZeroMemory(&UserData, sizeof(UserData));
- UserData.dwClubID = UserChat.tmp6[0];
- UserData.newsFlag = 2;
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_NotifyUser, 0, &(UserData), sizeof(CMD_GR_UserData));
- }
- }
- }
- m_UserID_2_PriTableIDGROUP[pTableFrame->GetPrivateTableOwnerID()] = Temp;
- }
- }
-
- return true;
- }
-
- bool CAttemperEngineSink::OnTCPSocketGetUserGameScoreRecordList(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- UserInfo::PB_CS_C_GetUserRecordListReqNew RepulseSit;
- RepulseSit.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_GetUserRecordListReqNew pRecordList;
- ZeroMemory(&pRecordList, sizeof(pRecordList));
- pRecordList.dwUserID = RepulseSit.dwuserid();
- pRecordList.dwKingID = RepulseSit.dwkingid();
- pRecordList.wParentID = RepulseSit.wparentid();
- pRecordList.wLimitIndex = RepulseSit.wlimitindex();
- pRecordList.wLimitCount = RepulseSit.wlimitcount();
- pRecordList.dwParentID = RepulseSit.dwparentid();
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_GET_GAME_SCORE_RECORD_LIST, dwSocketID, &pRecordList, sizeof(CMD_GR_GetUserRecordListReqNew));
- return true;
- }
-
- bool CAttemperEngineSink::OnTCPSocketGetUserGameScoreRecordDetail(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- ////效验参数
- //ASSERT(wDataSize == sizeof(CMD_GR_GetUserRecordDetailInfoReq));
- //if (wDataSize != sizeof(CMD_GR_GetUserRecordDetailInfoReq)) return false;
-
- ////获取用户
- //WORD wBindIndex = LOWORD(dwSocketID);
- //IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- ////用户效验
- //ASSERT(pIServerUserItem != NULL);
- //if (pIServerUserItem == NULL) return false;
-
- ////定义变量
- //CMD_GR_GetUserRecordDetailInfoReq * pUserData = (CMD_GR_GetUserRecordDetailInfoReq *)pData;
-
- //DBR_GR_GetUserGameScoreRecordDetail req;
- //req.dwUserID = pIServerUserItem->GetUserID();
- //req.dwKingID = pUserData->wKindID;
- //req.wRecordID = pUserData->wRecordID;
-
- //m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_GET_GAME_SCORE_RECORD_DETAIL, dwSocketID, &req, sizeof(req));
- return true;
- }
-
- bool CAttemperEngineSink::OnTCPSocketGetUserGameReplayRecord(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //定义变量
- UserInfo::PB_CS_C_GR_ReplayRecordReq RecordReq;
- RecordReq.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ReplayRecordReq req;
- ZeroMemory(&req, sizeof(req));
- req.dwRecordID = RecordReq.dwrecordid();
-
- m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_GET_GAME_SCORE_RECORD_REPLAY, dwSocketID, &req, sizeof(CMD_GR_ReplayRecordReq));
- return true;
- }
-
-
- //获取临时积分排行榜
- bool CAttemperEngineSink::OnTCPSocketGetUserGameTempScoreRankList(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnTCPSocketGetUserGameTempScoreRankList"), TraceLevel_Debug);
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- auto now = time(0);
- if (now - m_lastRankListTime < 300 && m_pRankListData && m_pRankListDataSize > 0)
- {
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST_RESULT, m_pRankListData, m_pRankListDataSize);
- return true;
- }
-
- m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST, dwSocketID, 0, 0);
- return true;
- }
- //更新某人拥有的房间状态值
- bool CAttemperEngineSink::UpdataBodyOwnRoom(IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::UpdataMyOwnRoom"), TraceLevel_Debug);
-
- //变量定义
- JN_GR_RoomListBig * pUserChat = (JN_GR_RoomListBig *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(JN_GR_RoomListBig));
-
- //效验参数
- if (wDataSize != sizeof(JN_GR_RoomListBig)) return false;
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- UserInfo::PB_CS_S_RoomList RoomList;
- RoomList.set_dwuserid(pUserChat->dwUserID);
- RoomList.set_dwserverid(pUserChat->dwServerID);
- RoomList.set_dwroomnumber(pUserChat->dwRoomNumber);
- RoomList.set_dwinsert_updata_del(pUserChat->dwInsert_UpData_Del);
- RoomList.set_dwdifen(pUserChat->dwDiFen);
- RoomList.set_dwjushu(pUserChat->dwJuShu);
- RoomList.set_dwreadybody(pUserChat->dwReadyBody);
- RoomList.set_dwbody(pUserChat->dwBody);
- RoomList.set_bwanfa(pUserChat->bWanFa);
- std::string szIp = CW2AEX<1024>(pUserChat->szIp, CP_UTF8).m_psz;
- RoomList.set_szip(szIp);
- RoomList.set_bduolai(pUserChat->bDuoLai);
- RoomList.set_wfengding(pUserChat->wFengDing);
- RoomList.set_tmp1(pUserChat->bRoomCreatePay);
- RoomList.set_tmp2(pUserChat->tmp1);
- RoomList.set_tmp3(pUserChat->tmp2);
- RoomList.set_tmp4(pUserChat->tmp4);
- RoomList.set_tmp5(pUserChat->tmp5);
- for (WORD i = 0; i < 4; i++)
- {
- RoomList.add_tmp6(pUserChat->tmp6[i]);
- }
- RoomList.set_wport(pUserChat->wPort);
- //发送数据
- std::string pbdata = RoomList.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_MYROOM_UPDATA, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- bool CAttemperEngineSink::UpdataServerStata(VOID * pData, WORD wDataSize)
- {
- //变量定义
- JN_GR_SERVICESTAT * pUserChat = (JN_GR_SERVICESTAT *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(JN_GR_SERVICESTAT));
-
- //效验参数
- if (wDataSize != sizeof(JN_GR_SERVICESTAT)) return false;
-
- m_pITCPSocketService->SendData(MDM_CS_SERVICE_INFO, SUB_CS_UPDATASERVICE, pUserChat, wDataSize/*,0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
-
- return true;
- }
-
- bool CAttemperEngineSink::UpdataBodyOwnRoomToServer(VOID * pData, WORD wDataSize)
- {
- //变量定义
- JN_GR_RoomListBig * pUserChat = (JN_GR_RoomListBig *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(JN_GR_RoomListBig));
-
- //效验参数
- if (wDataSize != sizeof(JN_GR_RoomListBig)) return false;
-
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_UPDATAOWNROOM, pUserChat, wDataSize);
-
- return true;
- }
-
- //发送某人的房间的状态
- bool CAttemperEngineSink::OnUpdataBodyOwnRoom(VOID * pData, WORD wDataSize)
- {
- JN_GR_RoomListBig * pUserChat = (JN_GR_RoomListBig *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(JN_GR_RoomListBig));
-
- //效验参数
- if (wDataSize != sizeof(JN_GR_RoomListBig)) return false;
-
- DWORD dwUserID = pUserChat->dwUserID;
-
- //找到他的连接
- IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(dwUserID);
- if (pIServerUserItem != NULL)
- {
- UpdataBodyOwnRoom(pIServerUserItem, pData, wDataSize);
-
- return true;
- }
- return true;
- }
-
- //发送某人的房间的状态
- bool CAttemperEngineSink::OnUpdataBodyOtherRoom(VOID * pData, WORD wDataSize)
- {
- JN_GR_RoomListBig * pUserChat = (JN_GR_RoomListBig *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(JN_GR_RoomListBig));
-
- //效验参数
- if (wDataSize != sizeof(JN_GR_RoomListBig)) return false;
-
- if (pUserChat->dwInsert_UpData_Del == 0)
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- m_PrivateRoomAll[pUserChat->dwRoomNumber] = *pUserChat;
- }
- else if (pUserChat->dwInsert_UpData_Del == 2)
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- auto iter = m_PrivateRoomAll.find(pUserChat->dwRoomNumber);
- if (iter != m_PrivateRoomAll.end())
- {
- m_PrivateRoomAll.erase(iter);
- }
- }
- else if ((pUserChat->dwInsert_UpData_Del == 1))
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- auto iter = m_PrivateRoomAll.find(pUserChat->dwRoomNumber);
- if (iter != m_PrivateRoomAll.end())
- {
- m_PrivateRoomAll[pUserChat->dwRoomNumber] = *pUserChat;
- }
- //删除俱乐部更新房间类型
- if (0 == pUserChat->tmp6[0])
- {
- CString PrivateTableID;
- PrivateTableID.Format(_T("%d"), pUserChat->dwRoomNumber);
- std::shared_ptr<CTableFrame> pTableFrame = GetPriTableFrame(PrivateTableID.GetBuffer(0));
- if (pTableFrame)pTableFrame->SetTableKind(pUserChat->roomType);
- }
- }
-
-
- //广播给当前服务器中该俱乐部玩家
- if (pUserChat->roomType == 1 && pUserChat->tmp6[0])
- {
- CMD_GR_Table_Notify tableNotify;
- ZeroMemory(&tableNotify, sizeof(tableNotify));
- tableNotify.type = pUserChat->dwInsert_UpData_Del;
- tableNotify.tableID = pUserChat->dwRoomNumber;
- tableNotify.clubID = pUserChat->tmp6[0];
- //遍历查找
- WORD wUserIndex = 0;
- while (true)
- {
- IServerUserItem* pIServerUserItemSend = m_ServerUserManager.EnumUserItem(wUserIndex++);
- if (pIServerUserItemSend == NULL) break;
-
- for (int i = 0; i < 20; i++)
- {
- if (pIServerUserItemSend->GetUserInfo()->dwClubID[i] == pUserChat->tmp6[0])
- {
- tagBindParameter * pBindParameter = GetBindParameter(pIServerUserItemSend->GetBindIndex());
- //发送数据
- if (pBindParameter != NULL)
- {
- Club::PB_CS_S_Table_Notify Notify;
- Notify.set_clubid(tableNotify.clubID);
- Notify.set_tableid(tableNotify.tableID);
- Notify.set_type(tableNotify.type);
- //发送数据
- std::string pbdata = Notify.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(pBindParameter->dwSocketID, MDM_GR_CLUB, SUB_GR_USER_CLUBTABLE_NOTIFY_ACK, (void*)pbdata.c_str(), pbdata.length());
- break;
- }
- }
- }
- }
- }
- return true;
- }
-
- //更新我拥有的房间状态值
- bool CAttemperEngineSink::UpdataMyOwnRoom(IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::UpdataMyOwnRoom"), TraceLevel_Debug);
-
- //变量定义
- JN_GR_RoomList * pUserChat = (JN_GR_RoomList *)pData;
-
- //效验参数
- ASSERT(wDataSize == sizeof(JN_GR_RoomList));
-
- //效验参数
- if (wDataSize != sizeof(JN_GR_RoomList)) return false;
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- UserInfo::PB_CS_S_RoomList RoomList;
- RoomList.set_dwuserid(pUserChat->dwUserID);
- RoomList.set_dwserverid(pUserChat->dwServerID);
- RoomList.set_dwroomnumber(pUserChat->dwRoomNumber);
- RoomList.set_dwinsert_updata_del(pUserChat->dwInsert_UpData_Del);
- RoomList.set_dwdifen(pUserChat->dwDiFen);
- RoomList.set_dwjushu(pUserChat->dwJuShu);
- RoomList.set_dwreadybody(pUserChat->dwReadyBody);
- RoomList.set_dwbody(pUserChat->dwBody);
- RoomList.set_bwanfa(pUserChat->bWanFa);
- std::string szIp = CW2AEX<1024>(pUserChat->szIp, CP_UTF8).m_psz;
- RoomList.set_szip(szIp);
- RoomList.set_bduolai(pUserChat->bDuoLai);
- RoomList.set_wfengding(pUserChat->wFengDing);
- RoomList.set_tmp1(pUserChat->tmp1);
- RoomList.set_tmp2(pUserChat->tmp2);
- RoomList.set_tmp3(pUserChat->tmp3);
- RoomList.set_tmp4(pUserChat->tmp4);
- RoomList.set_tmp5(pUserChat->tmp5);
- for (WORD i = 0; i < 4; i++)
- {
- RoomList.add_tmp6(pUserChat->tmp6[i]);
- }
- RoomList.set_wport(pUserChat->wPort);
- //发送数据
- std::string pbdata = RoomList.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_MYROOM_UPDATA, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //更新房间局数
- bool CAttemperEngineSink::UpdataTableJushu(DWORD PrivateTableID,DWORD CurrrentJushu)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::UpdataTableJushu"), TraceLevel_Debug);
- CWHDataLocker DataLocker(m_CriticalSection);
- auto iter = m_PrivateRoomAll.find(PrivateTableID);
- if (iter != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig temp;
- temp = iter->second;
-
- if (temp.tmp6[0] != 0 && temp.roomType == 1)
- {
- temp.dwInsert_UpData_Del = 1;
- temp.currentjushu = CurrrentJushu;
- //上报给协调
- UpdataBodyOwnRoomToServer(&temp, sizeof(temp));
-
- //通知用户刷新界面
- CMD_GR_UserData UserData;
- ZeroMemory(&UserData, sizeof(UserData));
- UserData.dwClubID = temp.tmp6[0];
- UserData.newsFlag = 2;
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_NotifyUser, 0, &(UserData), sizeof(CMD_GR_UserData));
- }
- }
-
- return true;
- }
- //用户聊天
- bool CAttemperEngineSink::OnTCPNetworkSubUserChat(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //变量定义
- CMD_GR_C_UserChat * pUserChat = (CMD_GR_C_UserChat *)pData;
-
- //效验参数
- ASSERT(wDataSize <= sizeof(CMD_GR_C_UserChat));
- ASSERT(wDataSize >= (sizeof(CMD_GR_C_UserChat) - sizeof(pUserChat->szChatString)));
- ASSERT(wDataSize == (sizeof(CMD_GR_C_UserChat) - sizeof(pUserChat->szChatString) + pUserChat->wChatLength * sizeof(pUserChat->szChatString[0])));
-
- //效验参数
- if (wDataSize > sizeof(CMD_GR_C_UserChat)) return false;
- if (wDataSize < (sizeof(CMD_GR_C_UserChat) - sizeof(pUserChat->szChatString))) return false;
- if (wDataSize != (sizeof(CMD_GR_C_UserChat) - sizeof(pUserChat->szChatString) + pUserChat->wChatLength * sizeof(pUserChat->szChatString[0]))) return false;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pISendUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pISendUserItem != NULL);
- if (pISendUserItem == NULL) return false;
-
- if (pUserChat->dwTargetUserID != 0)
- {
- IServerUserItem* pIRecvUserItem = m_ServerUserManager.SearchUserItem(pUserChat->dwTargetUserID);
- if (pIRecvUserItem == NULL) return true;
- }
-
- //状态判断
- if ((CServerRule::IsForfendRoomChat(m_pGameServiceOption->dwServerRule) == true) && (pISendUserItem->GetMasterOrder() == 0))
- {
- SendRequestFailure(pISendUserItem, TEXT("抱歉,当前此游戏房间禁止用户大厅聊天!"), 0);
- return true;
- }
-
- //权限判断
- if (CUserRight::CanRoomChat(pISendUserItem->GetUserRight()) == false)
- {
- //SendRoomMessage(pISendUserItem, TEXT("抱歉,您没有大厅发言的权限,若需要帮助,请联系游戏客服咨询!"), SMT_EJECT | SMT_CHAT);
- SendRequestFailure(pISendUserItem, TEXT("抱歉,您没有大厅发言的权限,若需要帮助,请联系游戏客服咨询!"), 0);
- return true;
- }
-
- //权限判断
- if (pUserChat->dwSendUserID != pISendUserItem->GetUserID() && (pISendUserItem->GetMasterOrder() == 0 ||
- CMasterRight::CanManagerAndroid(pISendUserItem->GetMasterRight()) == false))
- {
- return false;
- }
-
- //构造消息
- CMD_GR_S_UserChat UserChat;
- ZeroMemory(&UserChat, sizeof(UserChat));
-
- //字符过滤
- SensitiveWordFilter(pUserChat->szChatString, UserChat.szChatString, CountArray(UserChat.szChatString));
-
- //构造数据
- UserChat.dwChatColor = pUserChat->dwChatColor;
- UserChat.wChatLength = pUserChat->wChatLength;
- UserChat.dwSendUserID = pUserChat->dwSendUserID;
- UserChat.dwTargetUserID = pUserChat->dwTargetUserID;
- UserChat.wChatLength = CountStringBuffer(UserChat.szChatString);
-
- //转发消息
- WORD wHeadSize = sizeof(UserChat) - sizeof(UserChat.szChatString);
- SendData(BG_COMPUTER, MDM_GR_USER, SUB_GR_USER_CHAT, &UserChat, wHeadSize + UserChat.wChatLength * sizeof(UserChat.szChatString[0]));
-
- return true;
- }
-
- //用户表情
- bool CAttemperEngineSink::OnTCPNetworkSubUserExpression(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_GR_C_UserExpression));
- if (wDataSize != sizeof(CMD_GR_C_UserExpression)) return false;
-
- //变量定义
- CMD_GR_C_UserExpression * pUserExpression = (CMD_GR_C_UserExpression *)pData;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pISendUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pISendUserItem != NULL);
- if (pISendUserItem == NULL) return false;
-
- //寻找用户
- if (pUserExpression->dwTargetUserID != 0)
- {
- IServerUserItem * pIRecvUserItem = m_ServerUserManager.SearchUserItem(pUserExpression->dwTargetUserID);
- if (pIRecvUserItem == NULL) return true;
- }
-
- //状态判断
- if ((CServerRule::IsForfendRoomChat(m_pGameServiceOption->dwServerRule) == true) && (pISendUserItem->GetMasterOrder() == 0))
- {
- SendRequestFailure(pISendUserItem, TEXT("抱歉,当前此游戏房间禁止用户大厅聊天!"), 0);
- return true;
- }
-
- //权限判断
- if (CUserRight::CanRoomChat(pISendUserItem->GetUserRight()) == false)
- {
- //SendRoomMessage(pISendUserItem, TEXT("抱歉,您没有大厅发言的权限,若需要帮助,请联系游戏客服咨询!"), SMT_EJECT | SMT_CHAT);
- SendRequestFailure(pISendUserItem, TEXT("抱歉,您没有大厅发言的权限,若需要帮助,请联系游戏客服咨询!"), 0);
- return true;
- }
-
- //权限判断
- if (pUserExpression->dwSendUserID != pISendUserItem->GetUserID() && (pISendUserItem->GetMasterOrder() == 0 ||
- CMasterRight::CanManagerAndroid(pISendUserItem->GetMasterRight()) == false))
- {
- return false;
- }
-
- //构造消息
- CMD_GR_S_UserExpression UserExpression;
- ZeroMemory(&UserExpression, sizeof(UserExpression));
-
- //构造数据
- UserExpression.wItemIndex = pUserExpression->wItemIndex;
- UserExpression.dwSendUserID = pUserExpression->dwSendUserID;
- UserExpression.dwTargetUserID = pUserExpression->dwTargetUserID;
-
- //转发消息
- SendData(BG_COMPUTER, MDM_GR_USER, SUB_GR_USER_EXPRESSION, &UserExpression, sizeof(UserExpression));
-
- return true;
- }
-
- //用户私聊
- bool CAttemperEngineSink::OnTCPNetworkSubWisperChat(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //变量定义
- CMD_GR_C_WisperChat * pWisperChat = (CMD_GR_C_WisperChat *)pData;
-
- //效验参数
- ASSERT(wDataSize >= (sizeof(CMD_GR_C_WisperChat) - sizeof(pWisperChat->szChatString)));
- ASSERT(wDataSize == (sizeof(CMD_GR_C_WisperChat) - sizeof(pWisperChat->szChatString) + pWisperChat->wChatLength * sizeof(pWisperChat->szChatString[0])));
-
- //效验参数
- if (wDataSize < (sizeof(CMD_GR_C_WisperChat) - sizeof(pWisperChat->szChatString))) return false;
- if (wDataSize != (sizeof(CMD_GR_C_WisperChat) - sizeof(pWisperChat->szChatString) + pWisperChat->wChatLength * sizeof(pWisperChat->szChatString[0]))) return false;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pISendUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pISendUserItem != NULL);
- if (pISendUserItem == NULL) return false;
-
- //寻找用户
- IServerUserItem * pIRecvUserItem = m_ServerUserManager.SearchUserItem(pWisperChat->dwTargetUserID);
- if (pIRecvUserItem == NULL) return true;
-
- //状态判断
- if ((CServerRule::IsForfendWisperChat(m_pGameServiceOption->dwServerRule) == true) && (pISendUserItem->GetMasterOrder() == 0))
- {
- SendRequestFailure(pISendUserItem, TEXT("抱歉,当前此游戏房间禁止用户私聊!"), 0);
- return true;
- }
-
- //同桌判断
- if ((CServerRule::IsForfendWisperOnGame(m_pGameServiceOption->dwServerRule) == true) && (pISendUserItem->GetMasterOrder() == 0))
- {
- //变量定义
- bool bForfend = true;
- WORD wTableIDSend = pISendUserItem->GetTableID();
- WORD wTableIDRecv = pIRecvUserItem->GetTableID();
-
- //规则判断
- if ((bForfend == true) && (pIRecvUserItem->GetMasterOrder() != 0)) bForfend = false;
- if ((bForfend == true) && (pIRecvUserItem->GetMasterOrder() != 0)) bForfend = false;
- if ((bForfend == true) && (pISendUserItem->GetUserStatus() != US_PLAYING)) bForfend = false;
- if ((bForfend == true) && (pIRecvUserItem->GetUserStatus() != US_PLAYING)) bForfend = false;
- if ((bForfend == true) && ((wTableIDSend == INVALID_TABLE) || (wTableIDSend != wTableIDRecv))) bForfend = false;
-
- //提示消息
- if (bForfend == true)
- {
- SendRequestFailure(pISendUserItem, TEXT("抱歉,此游戏房间不允许在游戏中与同桌的玩家私聊!"), 0);
- //SendRoomMessage(pISendUserItem, TEXT("抱歉,此游戏房间不允许在游戏中与同桌的玩家私聊!"), SMT_EJECT | SMT_CHAT);
- return true;
- }
- }
-
- //权限判断
- if (CUserRight::CanWisper(pISendUserItem->GetUserRight()) == false)
- {
- SendRequestFailure(pISendUserItem, TEXT("抱歉,您没有发送私聊的权限,若需要帮助,请联系游戏客服咨询!"), 0);
- //SendRoomMessage(pISendUserItem, TEXT("抱歉,您没有发送私聊的权限,若需要帮助,请联系游戏客服咨询!"), SMT_EJECT | SMT_CHAT);
- return true;
- }
-
- //权限判断
- if (pWisperChat->dwSendUserID != pISendUserItem->GetUserID() && (pISendUserItem->GetMasterOrder() == 0 ||
- CMasterRight::CanManagerAndroid(pISendUserItem->GetMasterRight()) == false))
- {
- return false;
- }
-
- //变量定义
- CMD_GR_S_WisperChat WisperChat;
- ZeroMemory(&WisperChat, sizeof(WisperChat));
-
- //字符过滤
- SensitiveWordFilter(pWisperChat->szChatString, WisperChat.szChatString, CountArray(WisperChat.szChatString));
-
- //构造数据
- WisperChat.dwChatColor = pWisperChat->dwChatColor;
- WisperChat.wChatLength = pWisperChat->wChatLength;
- WisperChat.dwSendUserID = pISendUserItem->GetUserID();
- WisperChat.dwTargetUserID = pIRecvUserItem->GetUserID();
- WisperChat.wChatLength = CountStringBuffer(WisperChat.szChatString);
-
- //转发消息
- WORD wHeadSize = sizeof(WisperChat) - sizeof(WisperChat.szChatString);
- SendData(pISendUserItem, MDM_GR_USER, SUB_GR_WISPER_CHAT, &WisperChat, wHeadSize + WisperChat.wChatLength * sizeof(WisperChat.szChatString[0]));
-
- //转发消息
- WisperChat.dwSendUserID = pWisperChat->dwSendUserID;
- SendData(pIRecvUserItem, MDM_GR_USER, SUB_GR_WISPER_CHAT, &WisperChat, wHeadSize + WisperChat.wChatLength * sizeof(WisperChat.szChatString[0]));
-
- //机器判断
- if (pIRecvUserItem->IsAndroidUser() == true)
- {
- //枚举用户
- WORD wEnumIndex = 0;
- IServerUserItem * pTempServerUserItem;
- do
- {
- pTempServerUserItem = m_ServerUserManager.EnumUserItem(wEnumIndex++);
- if (pTempServerUserItem != NULL)
- {
- if (pTempServerUserItem == pISendUserItem) continue;
- if (pTempServerUserItem == pIRecvUserItem) continue;
- if (pTempServerUserItem->GetMasterOrder() > 0 &&
- CMasterRight::CanManagerAndroid(pTempServerUserItem->GetMasterRight()) == true)
- {
- SendData(pTempServerUserItem, MDM_GR_USER, SUB_GR_WISPER_CHAT, &WisperChat, wHeadSize + WisperChat.wChatLength * sizeof(WisperChat.szChatString[0]));
- }
- }
- } while (pTempServerUserItem != NULL);
- }
-
- return true;
- }
-
- //用户表情
- bool CAttemperEngineSink::OnTCPNetworkSubWisperExpression(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_GR_C_WisperExpression));
- if (wDataSize != sizeof(CMD_GR_C_WisperExpression)) return false;
-
- //变量定义
- CMD_GR_C_WisperExpression * pWisperExpression = (CMD_GR_C_WisperExpression *)pData;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pISendUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pISendUserItem != NULL);
- if (pISendUserItem == NULL) return false;
-
- //寻找用户
- IServerUserItem * pIRecvUserItem = m_ServerUserManager.SearchUserItem(pWisperExpression->dwTargetUserID);
- if (pIRecvUserItem == NULL) return true;
-
- //状态判断
- if ((CServerRule::IsForfendWisperChat(m_pGameServiceOption->dwServerRule) == true) && (pISendUserItem->GetMasterOrder() == 0))
- {
- SendRequestFailure(pISendUserItem, TEXT("抱歉,当前此游戏房间禁止用户私聊!"), 0);
- return true;
- }
-
- //同桌判断
- if ((CServerRule::IsForfendWisperOnGame(m_pGameServiceOption->dwServerRule) == true) && (pISendUserItem->GetMasterOrder() == 0))
- {
- //变量定义
- bool bForfend = true;
- WORD wTableIDSend = pISendUserItem->GetTableID();
- WORD wTableIDRecv = pIRecvUserItem->GetTableID();
-
- //规则判断
- if ((bForfend == true) && (pIRecvUserItem->GetMasterOrder() != 0)) bForfend = false;
- if ((bForfend == true) && (pIRecvUserItem->GetMasterOrder() != 0)) bForfend = false;
- if ((bForfend == true) && (pISendUserItem->GetUserStatus() != US_PLAYING)) bForfend = false;
- if ((bForfend == true) && (pIRecvUserItem->GetUserStatus() != US_PLAYING)) bForfend = false;
- if ((bForfend == true) && ((wTableIDSend == INVALID_TABLE) || (wTableIDSend != wTableIDRecv))) bForfend = false;
-
- //提示消息
- if (bForfend == true)
- {
- SendRequestFailure(pISendUserItem, TEXT("抱歉,此游戏房间不允许在游戏中与同桌的玩家私聊!"), 0);
- //SendRoomMessage(pISendUserItem, TEXT("抱歉,此游戏房间不允许在游戏中与同桌的玩家私聊!"), SMT_EJECT | SMT_CHAT);
- return true;
- }
- }
-
- //权限判断
- if (CUserRight::CanWisper(pISendUserItem->GetUserRight()) == false)
- {
- SendRequestFailure(pISendUserItem, TEXT("抱歉,您没有发送私聊的权限,若需要帮助,请联系游戏客服咨询!"), 0);
- //SendRoomMessage(pISendUserItem, TEXT("抱歉,您没有发送私聊的权限,若需要帮助,请联系游戏客服咨询!"), SMT_EJECT | SMT_CHAT);
- return true;
- }
-
- //权限判断
- if (pWisperExpression->dwSendUserID != pISendUserItem->GetUserID() && (pISendUserItem->GetMasterOrder() == 0 ||
- CMasterRight::CanManagerAndroid(pISendUserItem->GetMasterRight()) == false))
- {
- return false;
- }
-
- //变量定义
- CMD_GR_S_WisperExpression WisperExpression;
- ZeroMemory(&WisperExpression, sizeof(WisperExpression));
-
- //构造数据
- WisperExpression.wItemIndex = pWisperExpression->wItemIndex;
- WisperExpression.dwSendUserID = pISendUserItem->GetUserID();
- WisperExpression.dwTargetUserID = pWisperExpression->dwTargetUserID;
-
- //转发消息
- SendData(pISendUserItem, MDM_GR_USER, SUB_GR_WISPER_EXPRESSION, &WisperExpression, sizeof(WisperExpression));
-
- //转发消息
- WisperExpression.dwSendUserID = pWisperExpression->dwSendUserID;
- SendData(pIRecvUserItem, MDM_GR_USER, SUB_GR_WISPER_EXPRESSION, &WisperExpression, sizeof(WisperExpression));
-
- //机器判断
- if (pIRecvUserItem->IsAndroidUser() == true)
- {
- //枚举用户
- WORD wEnumIndex = 0;
- IServerUserItem * pTempServerUserItem;
- do
- {
- pTempServerUserItem = m_ServerUserManager.EnumUserItem(wEnumIndex++);
- if (pTempServerUserItem != NULL)
- {
- if (pTempServerUserItem == pISendUserItem) continue;
- if (pTempServerUserItem == pIRecvUserItem) continue;
- if (pTempServerUserItem->GetMasterOrder() > 0)
- {
- SendData(pTempServerUserItem, MDM_GR_USER, SUB_GR_WISPER_EXPRESSION, &WisperExpression, sizeof(WisperExpression));
- }
- }
- } while (pTempServerUserItem != NULL);
- }
-
- return true;
- }
-
- //购买道具
- //bool CAttemperEngineSink::OnTCPNetworkSubPropertyBuy(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //事件处理
- // int cbResult = OnPropertyBuy(pData, wDataSize, dwSocketID);
- //
- // //结果判断
- // if (cbResult == RESULT_ERROR) return false;
- // if (cbResult == RESULT_FAIL) return true;
- // if (cbResult == RESULT_SUCCESS) return true;
- //
- // return true;
- //}
-
- //购买道具
- //int CAttemperEngineSink::OnPropertyBuy(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GR_C_PropertyBuy));
- // if (wDataSize != sizeof(CMD_GR_C_PropertyBuy)) return RESULT_ERROR;
- //
- // //变量定义
- // CMD_GR_C_PropertyBuy * pPropertyBuy = (CMD_GR_C_PropertyBuy *)pData;
- //
- // //数据效验
- // ASSERT(pPropertyBuy->wItemCount > 0);
- // if (pPropertyBuy->wItemCount == 0) return RESULT_ERROR;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return RESULT_ERROR;
- //
- // //目标用户
- // IServerUserItem * pITargerUserItem = m_ServerUserManager.SearchUserItem(pPropertyBuy->dwTargetUserID);
- // if (pITargerUserItem == NULL) return RESULT_ERROR;
- //
- // //比赛房间
- // if (m_pGameServiceOption->wServerType == GAME_GENRE_MATCH)
- // {
- // //发送消息
- // SendPropertyFailure(pIServerUserItem, TEXT("比赛房间不可以使用此功能!"), 0L, pPropertyBuy->cbRequestArea);
- //
- // return RESULT_FAIL;
- // }
- //
- // //练习房间
- // if (m_pGameServiceOption->wServerType == GAME_GENRE_EDUCATE)
- // {
- // SendPropertyFailure(pIServerUserItem, TEXT("练习房间不可以使用此功能!"), 0L, pPropertyBuy->cbRequestArea);
- // return RESULT_FAIL;
- // }
- //
- // //购前事件
- // if (OnEventPropertyBuyPrep(pPropertyBuy->cbRequestArea, pPropertyBuy->wPropertyIndex, pIServerUserItem, pITargerUserItem) == false)
- // return RESULT_FAIL;
- //
- // //变量定义
- // DBR_GR_PropertyRequest PropertyRequest;
- // ZeroMemory(&PropertyRequest, sizeof(PropertyRequest));
- //
- // //查找道具
- // tagPropertyInfo * pPropertyInfo = m_GamePropertyManager.SearchPropertyItem(pPropertyBuy->wPropertyIndex);
- // if (pPropertyInfo == NULL)
- // {
- // SendPropertyFailure(pIServerUserItem, TEXT("您购买的道具不存在或在维护中,请与管理员联系!"), 0L, pPropertyBuy->cbRequestArea);
- // return RESULT_FAIL;
- // }
- //
- // //消费方式
- // if (pPropertyBuy->cbConsumeScore == TRUE)
- // {
- // //房间判断
- // ASSERT((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) != 0);
- // if ((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) == 0) return RESULT_FAIL;
- //
- // //锁定计算
- // PropertyRequest.cbConsumeScore = TRUE;
- // PropertyRequest.lFrozenedScore = pPropertyInfo->lPropertyGold*pPropertyBuy->wItemCount;
- //
- // //会员折扣
- // if (pIServerUserItem->GetMemberOrder() > 0)
- // {
- // PropertyRequest.lFrozenedScore = PropertyRequest.lFrozenedScore*pPropertyInfo->wDiscount / 100L;
- // }
- //
- // //锁定积分
- // if (pIServerUserItem->FrozenedUserScore(PropertyRequest.lFrozenedScore) == false)
- // {
- // SendPropertyFailure(pIServerUserItem, TEXT("您的游戏币余额不足,道具购买失败!"), 0L, pPropertyBuy->cbRequestArea);
- // return RESULT_FAIL;
- // }
- // }
- // else
- // {
- // //银行扣费
- // PropertyRequest.lFrozenedScore = 0L;
- // PropertyRequest.cbConsumeScore = FALSE;
- //
- // //变量定义
- // SCORE lInsure = pIServerUserItem->GetUserInsure();
- // SCORE lConsumeScore = pPropertyInfo->lPropertyGold*pPropertyBuy->wItemCount;
- //
- // //会员折扣
- // if (pIServerUserItem->GetMemberOrder() > 0)
- // {
- // lConsumeScore = lConsumeScore*pPropertyInfo->wDiscount / 100L;
- // }
- //
- // //银行校验
- // if (lInsure < lConsumeScore)
- // {
- // SendPropertyFailure(pIServerUserItem, TEXT("您的银行余额不足,请存款后再次购买!"), 0L, pPropertyBuy->cbRequestArea);
- // return RESULT_FAIL;
- // }
- // }
- //
- // //购买信息
- // PropertyRequest.cbRequestArea = pPropertyBuy->cbRequestArea;
- // PropertyRequest.wItemCount = pPropertyBuy->wItemCount;
- // PropertyRequest.wPropertyIndex = pPropertyBuy->wPropertyIndex;
- // PropertyRequest.dwSourceUserID = pIServerUserItem->GetUserID();
- // PropertyRequest.dwTargetUserID = pITargerUserItem->GetUserID();
- //
- // //设置权限
- // if (PropertyRequest.wPropertyIndex == PROPERTY_ID_VIPROOM_CARD)
- // PropertyRequest.dwUserRight |= UR_GAME_KICK_OUT_USER | UR_GAME_ENTER_VIP_ROOM;
- // else if (PropertyRequest.wPropertyIndex >= PROPERTY_ID_BLUERING_CARD && PropertyRequest.wPropertyIndex <= PROPERTY_ID_REDRING_CARD)
- // PropertyRequest.dwUserRight |= UR_GAME_KICK_OUT_USER;
- // else
- // PropertyRequest.dwUserRight = 0;
- //
- // //系统信息
- // PropertyRequest.wTableID = INVALID_TABLE;
- // PropertyRequest.dwInoutIndex = pIServerUserItem->GetInoutIndex();
- // PropertyRequest.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(PropertyRequest.szMachineID, pIServerUserItem->GetMachineID(), CountArray(PropertyRequest.szMachineID));
- //
- // //投递数据
- // m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_PROPERTY_REQUEST, dwSocketID, &PropertyRequest, sizeof(PropertyRequest));
- //
- // return RESULT_SUCCESS;
- //}
-
- //使用道具
- //bool CAttemperEngineSink::OnTCPNetwordSubSendTrumpet(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GR_C_SendTrumpet));
- // if (wDataSize != sizeof(CMD_GR_C_SendTrumpet)) return false;
- //
- // //变量定义
- // CMD_GR_C_SendTrumpet * pSendTrumpet = (CMD_GR_C_SendTrumpet *)pData;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- // if (pIServerUserItem == NULL) return false;
- //
- // //构造结构
- // CMD_GR_C_PropertyBuy PropertyBuy;
- // PropertyBuy.cbRequestArea = pSendTrumpet->cbRequestArea;
- // PropertyBuy.dwTargetUserID = pIServerUserItem->GetUserID();
- // PropertyBuy.wPropertyIndex = pSendTrumpet->wPropertyIndex;
- // PropertyBuy.cbConsumeScore = FALSE;
- // PropertyBuy.wItemCount = 1;
- //
- // //购买
- // int cbResult = OnPropertyBuy((void *)&PropertyBuy, sizeof(PropertyBuy), dwSocketID);
- //
- // //结果判断
- // if (cbResult == RESULT_ERROR) return false;
- // if (cbResult != RESULT_SUCCESS) return true;
- //
- // //获取道具
- // //tagUserProperty * pUserProperty = pIServerUserItem->GetUserProperty();
- //
- // //道具索引
- // BYTE cbIndex = (pSendTrumpet->wPropertyIndex == PROPERTY_ID_TRUMPET) ? 2 : 3;
- //
- // //构造结构
- // CMD_GR_S_SendTrumpet SendTrumpet;
- // SendTrumpet.dwSendUserID = pIServerUserItem->GetUserID();
- // SendTrumpet.wPropertyIndex = pSendTrumpet->wPropertyIndex;
- // SendTrumpet.TrumpetColor = pSendTrumpet->TrumpetColor;
- // ZeroMemory(SendTrumpet.szTrumpetContent, sizeof(SendTrumpet.szTrumpetContent));
- // CopyMemory(SendTrumpet.szSendNickName, pIServerUserItem->GetNickName(), sizeof(SendTrumpet.szSendNickName));
- //
- // //字符过滤
- // SensitiveWordFilter(pSendTrumpet->szTrumpetContent, SendTrumpet.szTrumpetContent, CountArray(SendTrumpet.szTrumpetContent));
- //
- // //房间转发
- // if (cbIndex == 3)
- // {
- // //广播房间
- // CMD_CS_S_SendTrumpet * pInfo = (CMD_CS_S_SendTrumpet *)&SendTrumpet;
- // if (m_pITCPSocketService)
- // {
- // if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- // {
- // auto pat = GetTableFrame(pIServerUserItem->GetTableID());
- //
- // TCHAR szTemp[32] = { 0 };
- // if (pat) pat->GetPrivateTableID(szTemp, 32);
- // CString csTemp = szTemp;
- //
- // /*if (pat != nullptr && !csTemp.IsEmpty())
- // {
- // DWORD dTableNum = _wtol(szTemp);
- // }*/
- // }
- // m_pITCPSocketService->SendData(MDM_CS_MANAGER_SERVICE, SUB_CS_C_PROPERTY_TRUMPET, pInfo, sizeof(CMD_CS_S_SendTrumpet)/*, dTableNum, pIServerUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
- // }
- // }
- //
- // //游戏转发
- // if (cbIndex == 2)
- // {
- // //DWORD dTableNum = 0;
- // if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- // {
- // auto pat = GetTableFrame(pIServerUserItem->GetTableID());
- //
- // TCHAR szTemp[32] = { 0 };
- // if (pat) pat->GetPrivateTableID(szTemp, 32);
- // CString csTemp = szTemp;
- //
- // /*if (pat != nullptr && !csTemp.IsEmpty())
- // {
- // dTableNum = _wtol(szTemp);
- // }*/
- // }
- //
- // CString csSend;
- // CString csTest = AfxGetAppName();
- //
- // csSend.Format(_T("进程【%s】【群发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_USER, SUB_GR_PROPERTY_TRUMPET);
- // //OutputDebugString(csSend);
- // Commend::ToShow(this, MDM_GR_USER, SUB_GR_PROPERTY_TRUMPET, &SendTrumpet, sizeof(SendTrumpet), 0, 0, m_pIGameServiceManager->GetDataString());
- //
- // //发送数据
- // m_pITCPNetworkEngine->SendDataBatch(MDM_GR_USER, SUB_GR_PROPERTY_TRUMPET, &SendTrumpet, sizeof(SendTrumpet), BG_COMPUTER);
- // }
- //
- // return true;
- //}
-
- //邀请用户
- //bool CAttemperEngineSink::OnTCPNetworkSubUserInviteReq(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // UserInfo::PB_CS_C_UserInviteReq InviteReq;
- // InviteReq.ParseFromArray(pData, wDataSize);
- //
- // //处理消息
- // CMD_GR_UserInviteReq pUserInviteReq;
- // ZeroMemory(&pUserInviteReq, sizeof(pUserInviteReq));
- // pUserInviteReq.wTableID = InviteReq.wtableid();
- // pUserInviteReq.dwUserID = InviteReq.dwuserid();
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- // if (pIServerUserItem == NULL) return false;
- //
- // //效验状态
- // if (pUserInviteReq.wTableID == INVALID_TABLE) return true;
- // if (pIServerUserItem->GetTableID() != pUserInviteReq.wTableID) return true;
- // if (pIServerUserItem->GetUserStatus() == US_PLAYING) return true;
- // if (pIServerUserItem->GetUserStatus() == US_OFFLINE) return true;
- //
- // //目标用户
- // IServerUserItem * pITargetUserItem = m_ServerUserManager.SearchUserItem(pUserInviteReq.dwUserID);
- // if (pITargetUserItem == NULL) return true;
- // if (pITargetUserItem->GetUserStatus() == US_PLAYING) return true;
- //
- // UserInfo::PB_CS_S_UserInvite Invite;
- // Invite.set_wtableid(pUserInviteReq.wTableID);
- // Invite.set_dwuserid(pIServerUserItem->GetUserID());
- // //发送数据
- // std::string pbdata = Invite.SerializePartialAsString();
- //
- // SendData(pITargetUserItem, MDM_GR_USER, SUB_GR_USER_INVITE, (void*)pbdata.c_str(), pbdata.length());
- // return true;
- //}
-
- ////拒绝厌友
- //bool CAttemperEngineSink::OnTCPNetworkSubUserRepulseSit(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // UserInfo::PB_CS_C_UserRepulseSit RepulseSit;
- // RepulseSit.ParseFromArray(pData, wDataSize);
- //
- // //处理消息
- // CMD_GR_UserRepulseSit pUserRepulseSit;
- // ZeroMemory(&pUserRepulseSit, sizeof(pUserRepulseSit));
- // pUserRepulseSit.wTableID = RepulseSit.wtableid();
- // pUserRepulseSit.wChairID = RepulseSit.wchairid();
- // pUserRepulseSit.dwUserID = RepulseSit.dwuserid();
- // pUserRepulseSit.dwRepulseUserID = RepulseSit.dwrepulseuserid();
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- // if (pIServerUserItem == NULL) return false;
- //
- // //获取桌子
- // auto pTableFrame = GetTableFrame(pUserRepulseSit.wTableID);
- // if (!pTableFrame)
- // return false;
- // if (pTableFrame->IsGameStarted() == true) return true;
- //
- // //获取用户
- // IServerUserItem * pRepulseIServerUserItem = pTableFrame->GetTableUserItem(pUserRepulseSit.wChairID);
- // if (pRepulseIServerUserItem == NULL) return true;
- // if (pRepulseIServerUserItem->GetUserID() != pUserRepulseSit.dwRepulseUserID)return true;
- //
- // //发送消息
- // TCHAR szDescribe[256] = TEXT("");
- // lstrcpyn(szDescribe, TEXT("此桌有玩家设置了不与您同桌游戏!"), CountArray(szDescribe));
- // SendRoomMessage(pRepulseIServerUserItem, szDescribe, SMT_TABLE_EXIT);
- //
- // //弹起玩家
- // pTableFrame->PerformStandUpAction(pRepulseIServerUserItem);
- //
- // return true;
- //}
- //
- ////踢出命令
- //bool CAttemperEngineSink::OnTCPNetworkSubMemberKickUser(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // UserInfo::PB_CS_C_KickUser Kick;
- // Kick.ParseFromArray(pData, wDataSize);
- //
- // //处理消息
- // CMD_GR_KickUser pKickUser;
- // ZeroMemory(&pKickUser, sizeof(pKickUser));
- // pKickUser.dwTargetUserID = Kick.dwtargetuserid();
- //
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //目标用户
- // IServerUserItem * pITargetUserItem = m_ServerUserManager.SearchUserItem(pKickUser.dwTargetUserID);
- // if (pITargetUserItem == NULL) return true;
- //
- // //用户效验
- // ASSERT((pIServerUserItem != NULL) && (pIServerUserItem->GetMemberOrder() > pITargetUserItem->GetMemberOrder()));
- // if ((pIServerUserItem == NULL) || (pIServerUserItem->GetMemberOrder() <= pITargetUserItem->GetMemberOrder())) return false;
- //
- // //权限判断
- // ASSERT(CUserRight::CanKillOutUser(pIServerUserItem->GetUserRight()) == true);
- // if (CUserRight::CanKillOutUser(pIServerUserItem->GetUserRight()) == false) return false;
- //
- // //禁踢管理员
- // if (pITargetUserItem->GetMasterOrder() > 0)
- // {
- // //发送消息
- // SendRequestFailure(pIServerUserItem, TEXT("很抱歉,踢出管理员是不被允许的!"), 0);
- // return true;
- // }
- //
- // //百人游戏
- // if (m_pGameServiceAttrib->wChairCount >= MAX_CHAIR)
- // {
- // //发送消息
- // SendRequestFailure(pIServerUserItem, TEXT("很抱歉,百人游戏不许踢人!"), 0);
- // return true;
- // }
- //
- // //用户状态
- // if (pITargetUserItem->GetUserStatus() == US_PLAYING)
- // {
- // //变量定义
- // TCHAR szMessage[256] = TEXT("");
- // _sntprintf(szMessage, CountArray(szMessage), TEXT("由于玩家 [ %s ] 正在游戏中,您不能将它踢出游戏!"), pITargetUserItem->GetNickName());
- //
- // //发送消息
- // SendRequestFailure(pIServerUserItem, szMessage, 0);
- // return true;
- // }
- //
- // //防踢判断
- // if ((pITargetUserItem->GetUserProperty()->wPropertyUseMark&PT_USE_MARK_GUARDKICK_CARD) != 0)
- // {
- // //变量定义
- // DWORD dwCurrentTime = (DWORD)time(NULL);
- // tagUserProperty * pUserProperty = pITargetUserItem->GetUserProperty();
- //
- // //时效判断
- // DWORD dwValidTime = pUserProperty->PropertyInfo[2].wPropertyCount*pUserProperty->PropertyInfo[2].dwValidNum;
- // if (pUserProperty->PropertyInfo[2].dwEffectTime + dwValidTime > dwCurrentTime)
- // {
- // //变量定义
- // TCHAR szMessage[256] = TEXT("");
- // _sntprintf(szMessage, CountArray(szMessage), TEXT("由于玩家 [ %s ] 正在使用防踢卡,您无法将它踢出游戏!"), pITargetUserItem->GetNickName());
- //
- // //发送消息
- // SendRequestFailure(pIServerUserItem, szMessage, 0);
- //
- // return true;
- // }
- // else
- // pUserProperty->wPropertyUseMark &= ~PT_USE_MARK_GUARDKICK_CARD;
- // }
- //
- // //请离桌子
- // WORD wTargerTableID = pITargetUserItem->GetTableID();
- // if (wTargerTableID != INVALID_TABLE)
- // {
- // //定义变量
- // TCHAR szMessage[64] = TEXT("");
- // _sntprintf(szMessage, CountArray(szMessage), TEXT("你已被%s请离桌子!"), pIServerUserItem->GetNickName());
- //
- // //发送消息
- //
- // SendGameMessage(pITargetUserItem, szMessage, SMT_TABLE_EXIT);
- //
- // auto pTableFrame = GetTableFrame(wTargerTableID);
- // if (!pTableFrame)
- // return false;
- // if (pTableFrame->PerformStandUpAction(pITargetUserItem) == false) return true;
- // }
- //
- // return true;
- //}
-
- //请求用户信息
- bool CAttemperEngineSink::OnTCPNetworkSubUserInfoReq(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- UserInfo::PB_CS_C_UserInfoReq InfoReq;
- InfoReq.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_UserInfoReq pUserInfoReq;
- ZeroMemory(&pUserInfoReq, sizeof(pUserInfoReq));
- pUserInfoReq.dwUserIDReq = InfoReq.dwuseridreq();
- pUserInfoReq.wTablePos = InfoReq.wtablepos();
-
- pIServerUserItem->SetMobileUserDeskPos(pUserInfoReq.wTablePos);
-
- //发送信息
- SendViewTableUserInfoPacketToMobileUser(pIServerUserItem, pUserInfoReq.dwUserIDReq);
-
- return true;
- }
-
- //请求更换位置
- bool CAttemperEngineSink::OnTCPNetworkSubUserChairReq(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //用户状态
- if (pIServerUserItem->GetUserStatus() == US_PLAYING)
- {
- //失败
- SendRequestFailure(pIServerUserItem, TEXT("您正在游戏中,暂时不能离开,请先结束当前游戏!"), REQUEST_FAILURE_NORMAL);
-
- if (IsJC(1234))
- {
- CString csTestB;
- csTestB.Format(_T("状态出错 -> 函数名:%s, 用户ID:%d,桌号:%s,状态:%d"), L"OnTCPNetworkSubUserChairReq", pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->szPrivateTableID
- , pIServerUserItem->GetUserStatus());
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- return true;
- }
-
- //动态加入
- bool bDynamicJoin = true;
- if (m_pGameServiceAttrib->cbDynamicJoin == FALSE) bDynamicJoin = false;
- if (CServerRule::IsAllowDynamicJoin(m_pGameServiceOption->dwServerRule) == false) bDynamicJoin = false;
-
- //查找桌子
- INT nStartIndex = rand() % m_pGameServiceOption->wTableCount;
- for (INT_PTR i = 0; i < (m_pGameServiceOption->wTableCount); i++)
- {
- //定义变量
- INT nTableIndex = (i + nStartIndex) % m_pGameServiceOption->wTableCount;
-
- //过滤同桌
- if (nTableIndex == pIServerUserItem->GetTableID())continue;
-
- //获取桌子
- auto pTableFrame = GetTableFrame(nTableIndex);
- if (!pTableFrame)
- return false;
- if ((pTableFrame->IsGameStarted() == true) && (bDynamicJoin == false)) continue;
- if (pTableFrame->IsTableLocked()) continue;
- if (pTableFrame->GetChairCount() == pTableFrame->GetNullChairCount()) continue;
-
- //无效过滤
- WORD wChairID = pTableFrame->GetRandNullChairID();
- if (wChairID == INVALID_CHAIR) continue;
-
- //离开处理
- if (pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pTableFrameTemp = GetTableFrame(pIServerUserItem->GetTableID());
- if (!pTableFrameTemp)
- return false;
- if (pTableFrameTemp->PerformStandUpAction(pIServerUserItem) == false) return true;
- }
-
- //定义变量
- WORD wTagerDeskPos = pIServerUserItem->GetMobileUserDeskPos();
- WORD wTagerDeskCount = pIServerUserItem->GetMobileUserDeskCount();
-
- //更新信息
- if ((nTableIndex < wTagerDeskPos) || (nTableIndex > (wTagerDeskPos + wTagerDeskCount - 1)))
- {
- WORD wNewPos = (nTableIndex / wTagerDeskCount)*wTagerDeskCount;
- pIServerUserItem->SetMobileUserDeskPos(wNewPos);
- }
-
- //用户坐下
- pTableFrame->PerformSitDownAction(wChairID, pIServerUserItem);
- return true;
- }
-
- //查找桌子
- nStartIndex = rand() % m_pGameServiceOption->wTableCount;
- for (INT_PTR i = 0; i < (m_pGameServiceOption->wTableCount); i++)
- {
- //定义变量
- INT nTableIndex = (i + nStartIndex) % m_pGameServiceOption->wTableCount;
-
- //过滤同桌
- if (nTableIndex == pIServerUserItem->GetTableID())continue;
-
- //获取桌子
- auto pTableFrame = GetTableFrame(nTableIndex);
- if (!pTableFrame)
- return false;
- if ((pTableFrame->IsGameStarted() == true) && (bDynamicJoin == false)) continue;
- if (pTableFrame->IsTableLocked()) continue;
-
- //无效过滤
- WORD wChairID = pTableFrame->GetRandNullChairID();
- if (wChairID == INVALID_CHAIR) continue;
-
- //离开处理
- if (pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pTableFrameTemp = GetTableFrame(pIServerUserItem->GetTableID());
- if (!pTableFrameTemp)
- return false;
- if (pTableFrameTemp->PerformStandUpAction(pIServerUserItem) == false) return true;
- }
-
- //定义变量
- WORD wTagerDeskPos = pIServerUserItem->GetMobileUserDeskPos();
- WORD wTagerDeskCount = pIServerUserItem->GetMobileUserDeskCount();
-
- //更新信息
- if ((nTableIndex < wTagerDeskPos) || (nTableIndex > (wTagerDeskPos + wTagerDeskCount - 1)))
- {
- WORD wNewPos = (nTableIndex / wTagerDeskCount)*wTagerDeskCount;
- pIServerUserItem->SetMobileUserDeskPos(wNewPos);
- }
-
- //用户坐下
- pTableFrame->PerformSitDownAction(wChairID, pIServerUserItem);
- return true;
- }
-
- //查找同桌
- if (pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- //获取桌子
- auto pTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (!pTableFrame)
- return false;
- if (pTableFrame->IsGameStarted() == false && pTableFrame->IsTableLocked() == false)
- {
- //无效过滤
- WORD wChairID = pTableFrame->GetRandNullChairID();
- if (wChairID != INVALID_CHAIR)
- {
- //离开处理
- if (pTableFrame->PerformStandUpAction(pIServerUserItem) == false) return true;
-
- //用户坐下
- pTableFrame->PerformSitDownAction(wChairID, pIServerUserItem);
- return true;
- }
- }
- }
-
- //失败
- SendRequestFailure(pIServerUserItem, TEXT("没找到可进入的游戏桌!"), REQUEST_FAILURE_NORMAL);
- return true;
- }
-
- //请求椅子用户信息
- bool CAttemperEngineSink::OnTCPNetworkSubChairUserInfoReq(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- UserInfo::PB_CS_C_ChairUserInfoReq InfoReq;
- InfoReq.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ChairUserInfoReq pUserInfoReq;
- ZeroMemory(&pUserInfoReq, sizeof(pUserInfoReq));
- pUserInfoReq.wTableID = InfoReq.wtableid();
- pUserInfoReq.wChairID = InfoReq.wchairid();
-
- if (pUserInfoReq.wTableID == INVALID_TABLE) return true;
-
- //发送消息
- auto pTableFrame = GetTableFrame(pUserInfoReq.wTableID);
- if (!pTableFrame)
- return false;
- WORD wChairCout = pTableFrame->GetChairCount();
- for (WORD wIndex = 0; wIndex < wChairCout; wIndex++)
- {
- //获取用户
- if (pUserInfoReq.wChairID != INVALID_CHAIR && wIndex != pUserInfoReq.wChairID)continue;
- IServerUserItem * pTagerIServerUserItem = pTableFrame->GetTableUserItem(wIndex);
- if (pTagerIServerUserItem == NULL)continue;
- if (pIServerUserItem == pTagerIServerUserItem) continue; //请求自己
-
- //变量定义
- tagMobileUserInfoHead pUserInfoHead;
- tagUserInfo *pUserInfo = pTagerIServerUserItem->GetUserInfo();
-
- //用户属性
- pUserInfoHead.wFaceID = pUserInfo->wFaceID;
- pUserInfoHead.dwGameID = pUserInfo->dwGameID;
- pUserInfoHead.dwUserID = pUserInfo->dwUserID;
- pUserInfoHead.dwCustomID = pUserInfo->dwCustomID;
-
- //用户属性
- pUserInfoHead.cbGender = pUserInfo->cbGender;
- pUserInfoHead.cbMemberOrder = pUserInfo->cbMemberOrder;
-
- //用户状态
- pUserInfoHead.wTableID = pUserInfo->wTableID;
- pUserInfoHead.wChairID = pUserInfo->wChairID;
- pUserInfoHead.cbUserStatus = pUserInfo->cbUserStatus;
-
- //用户局数
- pUserInfoHead.dwWinCount = pUserInfo->dwWinCount;
- pUserInfoHead.dwLostCount = pUserInfo->dwLostCount;
- pUserInfoHead.dwDrawCount = pUserInfo->dwDrawCount;
- pUserInfoHead.dwFleeCount = pUserInfo->dwFleeCount;
- pUserInfoHead.dwExperience = pUserInfo->dwExperience;
-
- //用户成绩
- pUserInfoHead.lScore = pUserInfo->lScore;
- pUserInfoHead.lScore += pTagerIServerUserItem->GetTrusteeScore();
- pUserInfoHead.lScore += pTagerIServerUserItem->GetFrozenedScore();
-
- lstrcpyn(pUserInfoHead.szNickname, pUserInfo->szNickName, CountArray(pUserInfo->szNickName));
- //用户头像地址
- lstrcpyn(pUserInfoHead.szHeadUrl, pUserInfo->szHeadUrl, CountArray(pUserInfo->szHeadUrl));
- //IP地址
- pUserInfoHead.dwClientAddr = pTagerIServerUserItem->GetClientAddr();
-
- pUserInfoHead.iJiePing = pUserInfo->llJiePing;
- pUserInfoHead.iXinYong = pUserInfo->iXinYong;
- pUserInfoHead.llDingWeiX = pUserInfo->dDingWeiX;
- pUserInfoHead.llDingWeiY = pUserInfo->dDingWeiY;
- lstrcpyn(pUserInfoHead.RetTime, pUserInfo->RegisterDate, CountArray(pUserInfo->RegisterDate));
- lstrcpyn(pUserInfoHead.ChengShi, pUserInfo->szChengShi, CountArray(pUserInfo->szChengShi));
-
- UserInfo::PB_CS_S_tagMobileUserInfoHead UserInfoHead;
- UserInfoHead.set_wfaceid(pUserInfoHead.wFaceID);
- UserInfoHead.set_dwgameid(pUserInfoHead.dwGameID);
- UserInfoHead.set_dwuserid(pUserInfoHead.dwUserID);
- UserInfoHead.set_dwcustomid(pUserInfoHead.dwCustomID);
- UserInfoHead.set_cbgender(pUserInfoHead.cbGender);
- UserInfoHead.set_cbmemberorder(pUserInfoHead.cbMemberOrder);
- UserInfoHead.set_wtableid(pUserInfoHead.wTableID);
- UserInfoHead.set_wchairid(pUserInfoHead.wChairID);
- UserInfoHead.set_cbuserstatus(pUserInfoHead.cbUserStatus);
- UserInfoHead.set_lscore(pUserInfoHead.lScore);
- UserInfoHead.set_dwwincount(pUserInfoHead.dwWinCount);
- UserInfoHead.set_dwlostcount(pUserInfoHead.dwLostCount);
- UserInfoHead.set_dwdrawcount(pUserInfoHead.dwDrawCount);
- UserInfoHead.set_dwfleecount(pUserInfoHead.dwFleeCount);
- UserInfoHead.set_dwexperience(pUserInfoHead.dwExperience);
- std::string szNickname = CW2AEX<1024>(pUserInfoHead.szNickname, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(pUserInfoHead.szHeadUrl, CP_UTF8).m_psz;
- std::string RetTime = CW2AEX<1024>(pUserInfoHead.RetTime, CP_UTF8).m_psz;
- std::string ChengShi = CW2AEX<1024>(pUserInfoHead.ChengShi, CP_UTF8).m_psz;
- UserInfoHead.set_sznickname(szNickname);
- UserInfoHead.set_szheadurl(szHeadUrl);
- UserInfoHead.set_dwclientaddr(pUserInfoHead.dwClientAddr);
- UserInfoHead.set_ixinyong(pUserInfoHead.iXinYong);
- UserInfoHead.set_rettime(RetTime);
- UserInfoHead.set_chengshi(ChengShi);
- UserInfoHead.set_lldingweix(pUserInfoHead.llDingWeiX);
- UserInfoHead.set_lldingweiy(pUserInfoHead.llDingWeiY);
- UserInfoHead.set_ijieping(pUserInfoHead.iJiePing);
- //发送数据
- std::string pbdata = UserInfoHead.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ENTER, (void*)pbdata.c_str(), pbdata.length());
-
- }
-
- if (pTableFrame) pTableFrame->PerformLookonLogin(pIServerUserItem);
- return true;
- }
-
- //查询参数
- //bool CAttemperEngineSink::OnTCPNetworkSubQueryExchangeInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //构造结构
- // //CMD_GR_ExchangeParameter ExchangeParameter;
- // //ZeroMemory(&ExchangeParameter, sizeof(ExchangeParameter));
- //
- // ////设置变量
- // //ExchangeParameter.wExchangeRate = m_pGameParameter->wExchangeRate;
- //
- // //WORD wBindIndex = LOWORD(dwSocketID);
- // //IServerUserItem * pIBindUserItem = GetBindUserItem(wBindIndex);
- //
- // ////计算大小
- // //DWORD dTableNum = 0;
- // //if (pIBindUserItem && pIBindUserItem->GetTableID() != INVALID_TABLE)
- // //{
- // // auto pat = GetTableFrame(pIBindUserItem->GetTableID());
- // // TCHAR szTemp[32] = { 0 };
- // // if (pat != nullptr) pat->GetPrivateTableID(szTemp, 32);
- // // CString csTemp = szTemp;
- //
- // // if (!csTemp.IsEmpty())
- // // {
- // // dTableNum = _wtol(szTemp);
- // // }
- // //}
- //
- // //CString csSend;
- // //CString csTest = AfxGetAppName();
- //
- // //csSend.Format(_T("进程【%s】【发送】 主命令码【%d】 子命令码【%d】\n\r"), AfxGetAppName(), MDM_GR_TASK, SUB_GR_TASK_RESULT);
- // ////OutputDebugString(csSend);
- // //Commend::ToShow(this, MDM_GR_EXCHANGE, SUB_GR_EXCHANGE_PARAM_INFO, &ExchangeParameter, sizeof(CMD_GR_ExchangeParameter), 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString());
- //
- // ////发送数据
- // //m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_EXCHANGE, SUB_GR_EXCHANGE_PARAM_INFO, &ExchangeParameter, sizeof(CMD_GR_ExchangeParameter));
- //
- // ///+++查询兑换配置列表(即:金币兑换商品列表)
- // /*m_pIRecordDataBaseEngine*/m_pIKernelDataBaseEngine->PostDataBaseRequest(DBO_GP_EXCHANGE_CONFIG_LIST, dwSocketID, NULL, 0);
- //
- // return true;
- //}
- //
- ////购买会员
- //bool CAttemperEngineSink::OnTCPNetworkSubPurchaseMember(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //参数校验
- // ASSERT(wDataSize == sizeof(CMD_GR_PurchaseMember));
- // if (wDataSize != sizeof(CMD_GR_PurchaseMember)) return false;
- //
- // //构造结构
- // CMD_GR_PurchaseMember * pPurchaseMember = (CMD_GR_PurchaseMember*)pData;
- // pPurchaseMember->szMachineID[CountArray(pPurchaseMember->szMachineID) - 1] = 0;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //构造结构
- // DBR_GR_PurchaseMember PurchaseMember;
- // ZeroMemory(&PurchaseMember, sizeof(PurchaseMember));
- //
- // //设置变量
- // PurchaseMember.dwUserID = pPurchaseMember->dwUserID;
- // PurchaseMember.cbMemberOrder = pPurchaseMember->cbMemberOrder;
- // PurchaseMember.wPurchaseTime = pPurchaseMember->wPurchaseTime;
- // PurchaseMember.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(PurchaseMember.szMachineID, pPurchaseMember->szMachineID, CountArray(PurchaseMember.szMachineID));
- //
- // CTraceService::TraceString(TEXT("购买会员已屏蔽 OnTCPNetworkSubPurchaseMember"), TraceLevel_Warning);
- // //投递请求
- // //m_pIDBCorrespondManager->PostDataBaseRequest(PurchaseMember.dwUserID, DBR_GR_PURCHASE_MEMBER, dwSocketID, &PurchaseMember, sizeof(PurchaseMember));
- //
- // return true;
- //}
- //
- ////兑换游戏币
- //bool CAttemperEngineSink::OnTCPNetworkSubExchangeScore(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //参数校验
- // ASSERT(wDataSize == sizeof(CMD_GR_ExchangeScore));
- // if (wDataSize != sizeof(CMD_GR_ExchangeScore)) return false;
- //
- // //构造结构
- // CMD_GR_ExchangeScore * pExchangeScore = (CMD_GR_ExchangeScore*)pData;
- // pExchangeScore->szMachineID[CountArray(pExchangeScore->szMachineID) - 1] = 0;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //构造结构
- // DBR_GR_ExchangeScore ExchangeScore;
- // ZeroMemory(&ExchangeScore, sizeof(ExchangeScore));
- //
- // //设置变量
- // ExchangeScore.dwUserID = pExchangeScore->dwUserID;
- // //ExchangeScore.lExchangeIngot = pExchangeScore->lExchangeIngot;
- // ExchangeScore.dwExchangeID = pExchangeScore->dwExchangeID; //兑换ID
- // ExchangeScore.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(ExchangeScore.szMachineID, pExchangeScore->szMachineID, CountArray(ExchangeScore.szMachineID));
- // CTraceService::TraceString(TEXT("兑换游戏币已屏蔽 DBR_GR_EXCHANGE_SCORE"), TraceLevel_Warning);
- // //投递请求
- // //m_pIDBCorrespondManager->PostDataBaseRequest(ExchangeScore.dwUserID, DBR_GR_EXCHANGE_SCORE, dwSocketID, &ExchangeScore, sizeof(ExchangeScore));
- //
- // return true;
- //}
-
- //俱乐部列表
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubList(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubList ClubLists;
- ClubLists.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubList pClubList;
- ZeroMemory(&pClubList, sizeof(pClubList));
- pClubList.wStartIndex = ClubLists.wstartindex();
- pClubList.wCount = ClubLists.wcount();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubList ClubList;
- ZeroMemory(&ClubList, sizeof(ClubList));
-
- //设置变量
- ClubList.dwUserID = pIServerUserItem->GetUserID();
- ClubList.wStartIndex = pClubList.wStartIndex;
- ClubList.wCount = pClubList.wCount;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_LIST, dwSocketID, &ClubList, sizeof(ClubList));
-
- }
-
- //俱乐部会员
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubUser(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //参数校验
- ASSERT(wDataSize == sizeof(CMD_GR_ClubUser));
- if (wDataSize != sizeof(CMD_GR_ClubUser)) return false;
-
- //构造结构
- CMD_GR_ClubUser * pClubUser = (CMD_GR_ClubUser*)pData;
- if (pClubUser == NULL) return false;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubUser ClubUser;
- ZeroMemory(&ClubUser, sizeof(ClubUser));
-
- //设置变量
- ClubUser.dwUserID = pIServerUserItem->GetUserID();
- ClubUser.dwClubID = pClubUser->dwClubID;
- ClubUser.wStartIndex = pClubUser->wStartIndex;
- ClubUser.wCount = pClubUser->wCount;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_USER, dwSocketID, &ClubUser, sizeof(ClubUser));
- }
-
- //俱乐部会员(在线)
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubUserEx(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubUser User;
- User.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubUser pClubUser;
- ZeroMemory(&pClubUser, sizeof(pClubUser));
- pClubUser.dwClubID = User.dwclubid();
- pClubUser.wStartIndex = User.wstartindex();
- pClubUser.wCount = User.wcount();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubUser ClubUser;
- ZeroMemory(&ClubUser, sizeof(ClubUser));
-
- //设置变量
- ClubUser.dwUserID = pIServerUserItem->GetUserID();
- ClubUser.dwClubID = pClubUser.dwClubID;
- ClubUser.wStartIndex = pClubUser.wStartIndex;
- ClubUser.wCount = pClubUser.wCount;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_USER_EX, dwSocketID, &ClubUser, sizeof(ClubUser));
- }
-
-
- //俱乐部消息
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubMessage(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubMessage Message;
- Message.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubMessage pClubMessage;
- ZeroMemory(&pClubMessage, sizeof(pClubMessage));
- pClubMessage.wStartIndex = Message.wstartindex();
- pClubMessage.wCount = Message.wcount();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubMessage ClubMessage;
- ZeroMemory(&ClubMessage, sizeof(ClubMessage));
-
- //设置变量
- ClubMessage.dwUserID = pIServerUserItem->GetUserID();
- ClubMessage.wStartIndex = pClubMessage.wStartIndex;
- ClubMessage.wCount = pClubMessage.wCount;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_MESSAGE, dwSocketID, &ClubMessage, sizeof(ClubMessage));
- }
-
- //俱乐部记录
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubRecord(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubRecord Record;
- Record.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubRecord pClubRecord;
- ZeroMemory(&pClubRecord, sizeof(pClubRecord));
- pClubRecord.dwClubID = Record.dwclubid();
- pClubRecord.wStartIndex = Record.wstartindex();
- pClubRecord.wCount = Record.wcount();
- pClubRecord.dtStartTime = Record.dtstarttime();
- pClubRecord.dwPrivatetable = Record.dwprivatetable();
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubRecordRead ClubRecord;
- ZeroMemory(&ClubRecord, sizeof(ClubRecord));
-
- //设置变量
- ClubRecord.dwUserID = pIServerUserItem->GetUserID();
- ClubRecord.dwClubID = pClubRecord.dwClubID;
- ClubRecord.wStartIndex = pClubRecord.wStartIndex;
- ClubRecord.wCount = pClubRecord.wCount;
- ClubRecord.dtStartTime = pClubRecord.dtStartTime;
- ClubRecord.dwPrivateTable = pClubRecord.dwPrivatetable;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_RECORD_EX, dwSocketID, &ClubRecord, sizeof(ClubRecord));
- }
-
- //俱乐部创建
- bool CAttemperEngineSink::OnTCPNetworkSubCreateClub(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- OutputDebugStringA("创建俱乐部");
- Club::PB_CS_C_ClubInfo ClubInfo;
- ClubInfo.ParseFromArray(pData, wDataSize);
- CString szclubname = (CA2CTEX<2048>(ClubInfo.szclubname().c_str(), CP_UTF8)).m_szBuffer;
- CString szhostname = (CA2CTEX<2048>(ClubInfo.szhostname().c_str(), CP_UTF8)).m_szBuffer;
- CString szheadurl = (CA2CTEX<2048>(ClubInfo.szheadurl().c_str(), CP_UTF8)).m_szBuffer;
- CString sprivatetableid = (CA2CTEX<2048>(ClubInfo.csgameconfig().sprivatetableid().c_str(), CP_UTF8)).m_szBuffer;
- //处理消息
- CMD_S_ClubInfo pClubInfo;
- ZeroMemory(&pClubInfo, sizeof(pClubInfo));
- pClubInfo.dwClubID = ClubInfo.dwclubid();
- _sntprintf(pClubInfo.szClubName, CountArray(pClubInfo.szClubName), TEXT("%s"), szclubname);
- pClubInfo.cbIsOwner = ClubInfo.cbisowner();
- pClubInfo.wTotalNum = ClubInfo.wtotalnum();
- pClubInfo.wWaitTableNum = ClubInfo.wwaittablenum();
- pClubInfo.wOnLineNum = ClubInfo.wonlinenum();
- pClubInfo.wWaitUserNum = ClubInfo.wwaitusernum();
- pClubInfo.dwOwnerID = ClubInfo.dwownerid();
- _sntprintf(pClubInfo.szHostName, CountArray(pClubInfo.szHostName), TEXT("%s"), szhostname);
- _sntprintf(pClubInfo.szHeadUrl, CountArray(pClubInfo.szHeadUrl), TEXT("%s"), szheadurl);
- pClubInfo.temp1 = ClubInfo.temp1();
- pClubInfo.temp2 = ClubInfo.temp2();
- pClubInfo.temp3 = ClubInfo.temp3();
- pClubInfo.temp4 = ClubInfo.temp4();
- pClubInfo.csGameConfig.wSubGameID = ClubInfo.csgameconfig().wsubgameid();
- pClubInfo.csGameConfig.wPlayRule = ClubInfo.csgameconfig().wplayrule();
- pClubInfo.csGameConfig.wMaxFanRule = ClubInfo.csgameconfig().wmaxfanrule();
- pClubInfo.csGameConfig.wMaxScore = ClubInfo.csgameconfig().wmaxscore();
- pClubInfo.csGameConfig.wPlayCountRule = ClubInfo.csgameconfig().wplaycountrule();
- pClubInfo.csGameConfig.wHadPlayCount = ClubInfo.csgameconfig().whadplaycount();
- pClubInfo.csGameConfig.zmExtraRule = ClubInfo.csgameconfig().zmextrarule();
- pClubInfo.csGameConfig.dghRule = ClubInfo.csgameconfig().dghrule();
- _sntprintf(pClubInfo.csGameConfig.sPrivateTableID, CountArray(pClubInfo.csGameConfig.sPrivateTableID), TEXT("%s"), sprivatetableid);
- pClubInfo.csGameConfig.bDuoLai = ClubInfo.csgameconfig().bduolai();
- pClubInfo.csGameConfig.wFengDing = ClubInfo.csgameconfig().wfengding();
- pClubInfo.csGameConfig.tmp1 = ClubInfo.csgameconfig().tmp1();
- pClubInfo.csGameConfig.tmp2 = ClubInfo.csgameconfig().tmp2();
- pClubInfo.csGameConfig.tmp3 = ClubInfo.csgameconfig().tmp3();
- pClubInfo.csGameConfig.tmp4 = ClubInfo.csgameconfig().tmp4();
- pClubInfo.csGameConfig.tmp5 = ClubInfo.csgameconfig().tmp5();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造数据
- DBR_GR_ClubAction1 ClubAction1;
- ZeroMemory(&ClubAction1, sizeof(ClubAction1));
-
- ClubAction1.dwUserID = pIServerUserItem->GetUserID();
- ClubAction1.ClubInfo = pClubInfo;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_CREATE, dwSocketID, &ClubAction1, sizeof(ClubAction1));
- }
-
- //俱乐部修改
- bool CAttemperEngineSink::OnTCPNetworkSubUpdateAddClub(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubAutoAddInfo ClubInfo;
- ClubInfo.ParseFromArray(pData, wDataSize);
- //处理消息
- CMD_S_ClubAutoAddInfo pClubInfo;
- ZeroMemory(&pClubInfo, sizeof(pClubInfo));
- pClubInfo.dwClubID = ClubInfo.dwclubid();
- pClubInfo.cbWanfaId = ClubInfo.cbwanfaid();
- pClubInfo.cbStatus = ClubInfo.cbstatus();
- pClubInfo.gameconfig.wSubGameID = ClubInfo.gameconfig().wsubgameid();
- pClubInfo.gameconfig.wPlayRule = ClubInfo.gameconfig().wplayrule();
- pClubInfo.gameconfig.wMaxFanRule = ClubInfo.gameconfig().wmaxfanrule();
- pClubInfo.gameconfig.wMaxScore = ClubInfo.gameconfig().wmaxscore();
- pClubInfo.gameconfig.wPlayCountRule = ClubInfo.gameconfig().wplaycountrule();
- pClubInfo.gameconfig.wHadPlayCount = ClubInfo.gameconfig().whadplaycount();
- pClubInfo.gameconfig.zmExtraRule = ClubInfo.gameconfig().zmextrarule();
- pClubInfo.gameconfig.dghRule = ClubInfo.gameconfig().dghrule();
- CString sprivatetableid = (CA2CTEX<2048>(ClubInfo.gameconfig().sprivatetableid().c_str(), CP_UTF8)).m_szBuffer;
- _sntprintf(pClubInfo.gameconfig.sPrivateTableID, CountArray(pClubInfo.gameconfig.sPrivateTableID), TEXT("%s"), sprivatetableid);
- pClubInfo.gameconfig.bDuoLai = ClubInfo.gameconfig().bduolai();
- pClubInfo.gameconfig.wFengDing = ClubInfo.gameconfig().wfengding();
- pClubInfo.gameconfig.tmp1 = ClubInfo.gameconfig().tmp1();
- pClubInfo.gameconfig.tmp2 = ClubInfo.gameconfig().tmp2();
- pClubInfo.gameconfig.tmp3 = ClubInfo.gameconfig().tmp3();
- pClubInfo.gameconfig.tmp4 = ClubInfo.gameconfig().tmp4();
- pClubInfo.gameconfig.tmp5 = ClubInfo.gameconfig().tmp5();
-
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造数据
- DBR_GR_ClubAddAction ClubAction1;
- ZeroMemory(&ClubAction1, sizeof(ClubAction1));
- ClubAction1.dwUserID = pIServerUserItem->GetUserID();
-
- if (0 == pClubInfo.cbStatus)
- {
- //获取额外玩法
- CopyMemory(&ClubAction1.tbAutoAddInfo, &pClubInfo, (sizeof(CMD_S_ClubAutoAddInfo) - sizeof(tagTableConfig)));
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_MORE_WANFA, dwSocketID, &ClubAction1, sizeof(DBR_GR_ClubAddAction));
- }
- else
- {
- if (2 == pClubInfo.cbStatus)
- {
- CopyMemory(&ClubAction1.tbAutoAddInfo, &pClubInfo, (sizeof(CMD_S_ClubAutoAddInfo) - sizeof(tagTableConfig)));
- }
- if (1 == pClubInfo.cbStatus)
- {
- CopyMemory(&ClubAction1.tbAutoAddInfo, &pClubInfo, sizeof(CMD_S_ClubAutoAddInfo));
- }
-
- }
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_SAVE_MORE_WANFA, dwSocketID, &ClubAction1, sizeof(DBR_GR_ClubAddAction));
- }
-
- //俱乐部修改
- bool CAttemperEngineSink::OnTCPNetworkSubUpdateClub(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubInfo ClubInfo;
- ClubInfo.ParseFromArray(pData, wDataSize);
- CString szclubname = (CA2CTEX<2048>(ClubInfo.szclubname().c_str(), CP_UTF8)).m_szBuffer;
- CString szhostname = (CA2CTEX<2048>(ClubInfo.szhostname().c_str(), CP_UTF8)).m_szBuffer;
- CString szheadurl = (CA2CTEX<2048>(ClubInfo.szheadurl().c_str(), CP_UTF8)).m_szBuffer;
- CString sprivatetableid = (CA2CTEX<2048>(ClubInfo.csgameconfig().sprivatetableid().c_str(), CP_UTF8)).m_szBuffer;
- //处理消息
- CMD_S_ClubInfo pClubInfo;
- ZeroMemory(&pClubInfo, sizeof(pClubInfo));
- pClubInfo.dwClubID = ClubInfo.dwclubid();
- _sntprintf(pClubInfo.szClubName, CountArray(pClubInfo.szClubName), TEXT("%s"), szclubname);
- pClubInfo.cbIsOwner = ClubInfo.cbisowner();
- pClubInfo.wTotalNum = ClubInfo.wtotalnum();
- pClubInfo.wWaitTableNum = ClubInfo.wwaittablenum();
- pClubInfo.wOnLineNum = ClubInfo.wonlinenum();
- pClubInfo.wWaitUserNum = ClubInfo.wwaitusernum();
- pClubInfo.dwOwnerID = ClubInfo.dwownerid();
- _sntprintf(pClubInfo.szHostName, CountArray(pClubInfo.szHostName), TEXT("%s"), szhostname);
- _sntprintf(pClubInfo.szHeadUrl, CountArray(pClubInfo.szHeadUrl), TEXT("%s"), szheadurl);
- pClubInfo.temp1 = ClubInfo.temp1();
- pClubInfo.temp2 = ClubInfo.temp2();
- pClubInfo.temp3 = ClubInfo.temp3();
- pClubInfo.temp4 = ClubInfo.temp4();
- pClubInfo.csGameConfig.wSubGameID = ClubInfo.csgameconfig().wsubgameid();
- pClubInfo.csGameConfig.wPlayRule = ClubInfo.csgameconfig().wplayrule();
- pClubInfo.csGameConfig.wMaxFanRule = ClubInfo.csgameconfig().wmaxfanrule();
- pClubInfo.csGameConfig.wMaxScore = ClubInfo.csgameconfig().wmaxscore();
- pClubInfo.csGameConfig.wPlayCountRule = ClubInfo.csgameconfig().wplaycountrule();
- pClubInfo.csGameConfig.wHadPlayCount = ClubInfo.csgameconfig().whadplaycount();
- pClubInfo.csGameConfig.zmExtraRule = ClubInfo.csgameconfig().zmextrarule();
- pClubInfo.csGameConfig.dghRule = ClubInfo.csgameconfig().dghrule();
- _sntprintf(pClubInfo.csGameConfig.sPrivateTableID, CountArray(pClubInfo.csGameConfig.sPrivateTableID), TEXT("%s"), sprivatetableid);
- pClubInfo.csGameConfig.bDuoLai = ClubInfo.csgameconfig().bduolai();
- pClubInfo.csGameConfig.wFengDing = ClubInfo.csgameconfig().wfengding();
- pClubInfo.csGameConfig.tmp1 = ClubInfo.csgameconfig().tmp1();
- pClubInfo.csGameConfig.tmp2 = ClubInfo.csgameconfig().tmp2();
- pClubInfo.csGameConfig.tmp3 = ClubInfo.csgameconfig().tmp3();
- pClubInfo.csGameConfig.tmp4 = ClubInfo.csgameconfig().tmp4();
- pClubInfo.csGameConfig.tmp5 = ClubInfo.csgameconfig().tmp5();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造数据
- DBR_GR_ClubAction1 ClubAction1;
- ZeroMemory(&ClubAction1, sizeof(ClubAction1));
-
- ClubAction1.dwUserID = pIServerUserItem->GetUserID();
- ClubAction1.ClubInfo = pClubInfo;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_UPDATE, dwSocketID, &ClubAction1, sizeof(ClubAction1));
- }
-
- //俱乐部删除
- bool CAttemperEngineSink::OnTCPNetworkSubDeleteClub(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_Club_Action1 ClubAction;
- ClubAction.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_Club_Action1 pClubID;
- ZeroMemory(&pClubID, sizeof(pClubID));
- pClubID.dwClubID = ClubAction.dwclubid();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造数据
- DBR_GR_ClubAction2 ClubAction2;
- ZeroMemory(&ClubAction2, sizeof(ClubAction2));
-
- ClubAction2.dwUserID = pIServerUserItem->GetUserID();
- ClubAction2.dwClubID = pClubID.dwClubID;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_DELETE, dwSocketID, &ClubAction2, sizeof(ClubAction2));
- }
-
-
- //俱乐部获取
- bool CAttemperEngineSink::OnTCPNetworkSubGetClub(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_Club_Action1 ClubAction;
- ClubAction.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_Club_Action1 pClubID;
- ZeroMemory(&pClubID, sizeof(pClubID));
- pClubID.dwClubID = ClubAction.dwclubid();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
-
- //构造数据
- DBR_GR_ClubAction2 ClubAction2;
- ZeroMemory(&ClubAction2, sizeof(ClubAction2));
-
- ClubAction2.dwUserID = pIServerUserItem->GetUserID();
- ClubAction2.dwClubID = pClubID.dwClubID;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET, dwSocketID, &ClubAction2, sizeof(ClubAction2));
- }
-
- //俱乐部加入
- bool CAttemperEngineSink::OnTCPNetworkSubJoinClub(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_Club_Action1 ClubAction;
- ClubAction.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_Club_Action1 pClubID;
- ZeroMemory(&pClubID, sizeof(pClubID));
- pClubID.dwClubID = ClubAction.dwclubid();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造数据
- DBR_GR_ClubAction2 ClubAction2;
- ZeroMemory(&ClubAction2, sizeof(ClubAction2));
-
- ClubAction2.dwUserID = pIServerUserItem->GetUserID();
- ClubAction2.dwClubID = pClubID.dwClubID;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_JOIN, dwSocketID, &ClubAction2, sizeof(ClubAction2));
- }
-
- //俱乐部退出
- bool CAttemperEngineSink::OnTCPNetworkSubQuitClub(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_Club_Action1 ClubAction;
- ClubAction.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_Club_Action1 pClubID;
- ZeroMemory(&pClubID, sizeof(pClubID));
- pClubID.dwClubID = ClubAction.dwclubid();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造数据
- DBR_GR_ClubAction2 ClubAction2;
- ZeroMemory(&ClubAction2, sizeof(ClubAction2));
-
- ClubAction2.dwUserID = pIServerUserItem->GetUserID();
- ClubAction2.dwClubID = pClubID.dwClubID;
-
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_QUIT, dwSocketID, &ClubAction2, sizeof(ClubAction2));
- }
-
- //俱乐同意加入
- bool CAttemperEngineSink::OnTCPNetworkSubAgreeClub(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_Club_Action2 ClubAction;
- ClubAction.ParseFromArray(pData, wDataSize);
- //处理消息
- CMD_GR_Club_Action2 pAction2;
- ZeroMemory(&pAction2, sizeof(pAction2));
- pAction2.dwClubID = ClubAction.dwclubid();
- pAction2.dwUserID = ClubAction.dwuserid();
- pAction2.cbIsAgree = ClubAction.cbisagree();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- DBR_GR_ClubAction3 ClubAction3;
- ZeroMemory(&ClubAction3, sizeof(ClubAction3));
-
- ClubAction3.Agree = pAction2.cbIsAgree;
- ClubAction3.dwCurrentID = pIServerUserItem->GetUserID();
- ClubAction3.dwClubID = pAction2.dwClubID;
- ClubAction3.dwUserID = pAction2.dwUserID;
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_ISAGREE, dwSocketID, &ClubAction3, sizeof(ClubAction3));
- }
-
- //俱乐部在线信息
- //bool CAttemperEngineSink::OnTCPNetworkSubGetClubOnLine(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //参数校验
- // ASSERT(wDataSize == sizeof(CMD_GR_ClubOnLine));
- // if (wDataSize != sizeof(CMD_GR_ClubOnLine)) return false;
- //
- // //构造结构
- // CMD_GR_ClubOnLine * pClubOnLine = (CMD_GR_ClubOnLine*)pData;
- // if (pClubOnLine == NULL) return false;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //构造数据
- // DBR_GR_ClubOnLineRq ClubOnLine;
- // ZeroMemory(&ClubOnLine, sizeof(ClubOnLine));
- //
- // ClubOnLine.dwUserID= pIServerUserItem->GetUserID();
- // ClubOnLine.dwClubID = pClubOnLine->dwClubID;
- // ClubOnLine.wStartIndex = pClubOnLine->wStartIndex;
- // ClubOnLine.wCount = pClubOnLine->wCount;
- //
- // //投递请求
- // return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_ONLINE, dwSocketID, &ClubOnLine, sizeof(DBR_GR_ClubOnLineRq));
- //}
-
- //升序
- bool LessSort(const JN_GR_RoomListBig a, const JN_GR_RoomListBig b){
- return a.dwReadyBody<b.dwReadyBody;
- }
- //俱乐部在线信息
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubOnLineEx(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubOnLineEx ClubOnLine;
- ClubOnLine.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubOnLineEx pClubOnLine;
- ZeroMemory(&pClubOnLine, sizeof(pClubOnLine));
- pClubOnLine.dwClubID = ClubOnLine.dwclubid();
- pClubOnLine.wStartIndex = ClubOnLine.wstartindex();
- pClubOnLine.wCount = ClubOnLine.wcount();
- pClubOnLine.cbType = ClubOnLine.cbtype();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //返回数据
- CMD_GR_ClubOnLine_AckEx ClubOnLineAck;
- ZeroMemory(&ClubOnLineAck, sizeof(ClubOnLineAck));
-
- ClubOnLineAck.dwClubID = pClubOnLine.dwClubID;
-
- //全局查找
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- std::vector<JN_GR_RoomListBig> ve;
- std::vector<JN_GR_RoomListBig> veGameing;
- std::vector<JN_GR_RoomListBig> veGame;
- JN_GR_RoomListBig Rooms;
- ZeroMemory(&Rooms, sizeof(JN_GR_RoomListBig));
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it2 = m_PrivateRoomAll.begin();
- while (it2 != m_PrivateRoomAll.end())
- {
- ZeroMemory(&Rooms, sizeof(JN_GR_RoomListBig));
- Rooms = it2->second;
- if (Rooms.roomType == 1 && Rooms.tmp6[0] == pClubOnLine.dwClubID)
- {
- if (0 == Rooms.roomStatus)
- {
- veGame.push_back(Rooms);
- }
- else
- {
- veGameing.push_back(Rooms);
- }
- }
- it2++;
- }
- //合并 等待状态 和 游戏状态
- ve.insert(ve.end(), veGame.begin(), veGame.end());
- ve.insert(ve.end(), veGameing.begin(), veGameing.end());
-
- CTimer Start;
- double dRet = Start.End();
- if (IsJC(110))
- {
- CString csTest;
-
- csTest.Format(_T("协议(3-437) 俱乐部房间排序 ----> %.3f wtotalTableNum=%d"), dRet, ClubOnLineAck.wtotalTableNum);
- //提示消息
- CTraceService::TraceString(csTest, TraceLevel_Normal);
- }
-
- std::vector<JN_GR_RoomListBig>::iterator iter;
- for (iter = ve.begin(); iter != ve.end(); iter++)
- {
- ZeroMemory(&Rooms, sizeof(JN_GR_RoomListBig));
- Rooms = *iter;
- //版本控制
- TCHAR szMachineID[LEN_MACHINE_ID] = { 0 };
- memcpy(szMachineID, pIServerUserItem->GetMachineID(), sizeof(szMachineID));
- del_char(szMachineID, L'.');
- __int64 iMachineID = StrToNmuber(szMachineID);
-
- //最低要求的版本号
- TCHAR szMinClientVer[LEN_MACHINE_ID] = { 0 };
- memcpy(szMinClientVer, m_pInitParameter->m_szMinClientVer, sizeof(szMinClientVer));
- del_char(szMinClientVer, L'.');
- __int64 iMinClientVer = StrToNmuber(szMinClientVer);
-
-
- /*if (iMachineID < iMinClientVer && ((Rooms.bWanFa == 14 || Rooms.tmp1==2)))
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("版本不匹配:用户ID不匹配[ RoomInfo.bDuoLai=%ld,RoomInfo.bWanFa=%ld,RoomInfo.wFengDing = %ld ]"), Rooms.bDuoLai, Rooms.bWanFa, Rooms.wFengDing);
- CTraceService::TraceString(szString, TraceLevel_Warning);
- continue;
- }*/
- if (IsJC(110))
- {
- CString csArr;
- csArr.Format(L"dwRoomNumber=%d ", Rooms.dwRoomNumber);
- CTraceService::TraceString(csArr, TraceLevel_Normal);
- }
- //全部
- if (pClubOnLine.cbType == 0)
- {
- ClubOnLineAck.tableID[ClubOnLineAck.wtotalTableNum++] = Rooms.dwRoomNumber;
- }
- //缺一人
- if (pClubOnLine.cbType == 1 && Rooms.roomStatus == 0 && Rooms.dwBody - Rooms.dwReadyBody == 1)
- {
- ClubOnLineAck.tableID[ClubOnLineAck.wtotalTableNum++] = Rooms.dwRoomNumber;
- }
- //等待中
- if (pClubOnLine.cbType == 2 && Rooms.roomStatus == 0)
- {
- ClubOnLineAck.tableID[ClubOnLineAck.wtotalTableNum++] = Rooms.dwRoomNumber;
- }
-
- //游戏中
- if (pClubOnLine.cbType == 3 && Rooms.roomStatus == 1)
- {
- ClubOnLineAck.tableID[ClubOnLineAck.wtotalTableNum++] = Rooms.dwRoomNumber;
- }
-
- //共同数据
- if (Rooms.roomStatus == 0)
- {
- ClubOnLineAck.wWaitTableNum++;
- }
- if (Rooms.roomStatus == 1)
- {
- ClubOnLineAck.wPlayTableNmu++;
- }
- if (Rooms.roomStatus == 0 && Rooms.dwBody - Rooms.dwReadyBody == 1)
- {
- ClubOnLineAck.wQueTableNum++;
- }
- }
- }
- Club::PB_CS_S_ClubOnLine_AckEx ClubActionACK;
- ClubActionACK.set_dwclubid(ClubOnLineAck.dwClubID);
- ClubActionACK.set_wquetablenum(ClubOnLineAck.wQueTableNum);
- ClubActionACK.set_wwaittablenum(ClubOnLineAck.wWaitTableNum);
- ClubActionACK.set_wplaytablenmu(ClubOnLineAck.wPlayTableNmu);
- ClubActionACK.set_temp(ClubOnLineAck.temp);
- ClubActionACK.set_wtotaltablenum(ClubOnLineAck.wtotalTableNum);
- for (WORD i = 0; i < ClubOnLineAck.wtotalTableNum; i++)
- {
- ClubActionACK.add_tableid(ClubOnLineAck.tableID[i]);
- }
- //发送数据
- std::string pbdata = ClubActionACK.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBONLINE_ACK_EX, (void*)pbdata.c_str(), pbdata.length());
-
- //触发向客户端更新桌子总数,在线人数,俱乐部总人数,新消息数(待优化)
- {
- DBR_GR_ClubAction2 clubAction2;
- ZeroMemory(&clubAction2, sizeof(clubAction2));
- clubAction2.dwClubID = pClubOnLine.dwClubID;
- clubAction2.dwUserID = pIServerUserItem->GetUserID();
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_ONLINEEX, dwSocketID, &clubAction2, sizeof(clubAction2));
-
- }
- }
-
-
- //俱乐部在线桌子信息
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubTable(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubOnLineTable OnLineTable;
- OnLineTable.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubOnLineTable pClubOnLineTable;
- ZeroMemory(&pClubOnLineTable, sizeof(pClubOnLineTable));
- pClubOnLineTable.dwClubID = OnLineTable.dwclubid();
- pClubOnLineTable.dwTableID = OnLineTable.dwtableid();
- pClubOnLineTable.cbType = OnLineTable.cbtype();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //获取桌子配置
- if (pClubOnLineTable.cbType == 0)
- {
- //返回数据
- CMD_GR_ClubOnLineTableCfAck ClubOnLineTableCfAck;
- ZeroMemory(&ClubOnLineTableCfAck, sizeof(ClubOnLineTableCfAck));
-
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- auto iter = m_PrivateRoomAll.find(pClubOnLineTable.dwTableID);
- if (iter != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Temp;
- ZeroMemory(&Temp, sizeof(JN_GR_RoomListBig));
- Temp = iter->second;
-
- JN_GR_RoomListInfo RoomInfo;
- ZeroMemory(&RoomInfo, sizeof(JN_GR_RoomListInfo));
-
- RoomInfo.dwDiFen = Temp.dwDiFen;
- RoomInfo.dwJuShu = Temp.dwJuShu;
- RoomInfo.bRoomCreatePay = Temp.bRoomCreatePay;
- RoomInfo.dwRoomNumber = Temp.dwRoomNumber;
- RoomInfo.dwServerID = Temp.dwServerID;
- RoomInfo.bFanGua = Temp.bFanGua;
- RoomInfo.bWanFa = Temp.bWanFa;
-
- RoomInfo.bDuoLai = Temp.bDuoLai; //多癞子可平胡,0可以 1不可以
- RoomInfo.wFengDing = Temp.wFengDing; //封顶值
- RoomInfo.tmp1 = Temp.tmp1; //备用字段
- RoomInfo.tmp2 = Temp.tmp2; //备用字段
-
- StringCchCopy(RoomInfo.szName, _countof(RoomInfo.szName), Temp.szName); //房间名称
- StringCchCopy(RoomInfo.szIp, _countof(RoomInfo.szIp), Temp.szIp); //房间ip
- RoomInfo.wPort = Temp.wPort; //房间端口
-
- CopyMemory(&(ClubOnLineTableCfAck.Room), &RoomInfo, sizeof(RoomInfo));
- ClubOnLineTableCfAck.dwTableID = pClubOnLineTable.dwTableID;
-
- Club::PB_CS_S_ClubOnLineTableCfAck OnLineTableCfAck;
- OnLineTableCfAck.set_dwtableid(ClubOnLineTableCfAck.dwTableID);
- std::string szName = CW2AEX<1024>(ClubOnLineTableCfAck.Room.szName, CP_UTF8).m_psz;
- std::string szIp = CW2AEX<1024>(ClubOnLineTableCfAck.Room.szIp, CP_UTF8).m_psz;
- OnLineTableCfAck.mutable_room()->set_szname(szName);
- OnLineTableCfAck.mutable_room()->set_dwserverid(ClubOnLineTableCfAck.Room.dwServerID);
- OnLineTableCfAck.mutable_room()->set_szip(szIp);
- OnLineTableCfAck.mutable_room()->set_bduolai(ClubOnLineTableCfAck.Room.bDuoLai);
- OnLineTableCfAck.mutable_room()->set_wfengding(ClubOnLineTableCfAck.Room.wFengDing);
- OnLineTableCfAck.mutable_room()->set_tmp1(ClubOnLineTableCfAck.Room.tmp1);
- OnLineTableCfAck.mutable_room()->set_tmp2(ClubOnLineTableCfAck.Room.tmp2);
- for (WORD i = 0; i < 4; i++)
- {
- OnLineTableCfAck.mutable_room()->add_tmp6(ClubOnLineTableCfAck.Room.tmp6[i]);
- }
- OnLineTableCfAck.mutable_room()->set_wport(ClubOnLineTableCfAck.Room.wPort);
- OnLineTableCfAck.mutable_room()->set_dwroomnumber(ClubOnLineTableCfAck.Room.dwRoomNumber);
- OnLineTableCfAck.mutable_room()->set_dwdifen(ClubOnLineTableCfAck.Room.dwDiFen);
- OnLineTableCfAck.mutable_room()->set_dwjushu(ClubOnLineTableCfAck.Room.dwJuShu);
- OnLineTableCfAck.mutable_room()->set_broomcreatepay(ClubOnLineTableCfAck.Room.bRoomCreatePay);
- OnLineTableCfAck.mutable_room()->set_bfangua(ClubOnLineTableCfAck.Room.bFanGua);
- OnLineTableCfAck.mutable_room()->set_bwanfa(ClubOnLineTableCfAck.Room.bWanFa);
- OnLineTableCfAck.mutable_room()->set_tmp3(ClubOnLineTableCfAck.Room.tmp3);
- OnLineTableCfAck.mutable_room()->set_tmp4(ClubOnLineTableCfAck.Room.tmp4);
- OnLineTableCfAck.mutable_room()->set_tmp5(ClubOnLineTableCfAck.Room.tmp5);
- //发送数据
- std::string pbdata = OnLineTableCfAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBONLINE_TABLE_ACK, (void*)pbdata.c_str(), pbdata.length());
- }
-
- }
- }
-
- //桌子用户信息
- if (pClubOnLineTable.cbType == 1)
- {
-
- CMD_GR_ClubOnLineTableAck OnLineTableAck;
- ZeroMemory(&OnLineTableAck, sizeof(OnLineTableAck));
-
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- auto iter = m_PrivateRoomAll.find(pClubOnLineTable.dwTableID);
- if (iter != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Temp;
- ZeroMemory(&Temp, sizeof(JN_GR_RoomListBig));
- Temp = iter->second;
-
- OnLineTableAck.dwTableID = pClubOnLineTable.dwTableID;
- OnLineTableAck.wJushu = Temp.currentjushu;
- OnLineTableAck.wTableState = Temp.roomStatus;
-
- //房主
- OnLineTableAck.Userinfo[4].dwUserID = Temp.dwUserID;
- CopyMemory(OnLineTableAck.Userinfo[4].szName, Temp.szName, sizeof(Temp.szName));
- CopyMemory(OnLineTableAck.Userinfo[4].szHeadUrl, Temp.szHeadUrl, sizeof(Temp.szHeadUrl));
- // && 0 == Temp.roomStatus
- if (Temp.dwUserID == pIServerUserItem->GetUserID()&& 0<Temp.currentjushu&&Temp.dwBody > Temp.dwReadyBody)
- {
- TCHAR szString[512] = TEXT("");
- _sntprintf(szString, CountArray(szString), TEXT("userid=%d [%d]已经开始游戏,但检测少人了(%d>%d),当前局数:%d"), pIServerUserItem->GetUserID(),Temp.dwRoomNumber, Temp.dwBody, Temp.dwReadyBody, Temp.currentjushu);
- CTraceService::TraceString(szString, TraceLevel_Warning);
-
- bool bIsUserNull = false;
- for (int i = 0; i < Temp.dwBody; i++){
- if (0 == Temp.player[i].dwUserID)
- {
- bIsUserNull = true;
- //将少人的数据补上
- std::shared_ptr<CTableFrame> pTableFrame;
- CString csTest;
- csTest.Format(_T("%d"), Temp.dwRoomNumber);
- std::wstring str = csTest.GetBuffer();
- csTest.ReleaseBuffer();
- pTableFrame = GetPriTableFrame(str);
- if (pTableFrame){
- IServerUserItem * pTagerIServerUserItem = pTableFrame->GetTableUserItem(i);
- if (pTagerIServerUserItem == NULL)continue;
- if (pIServerUserItem == pTagerIServerUserItem) continue; //请求自己
-
- //变量定义
- //tagMobileUserInfoHead pUserInfoHead;
- tagUserInfo *pUserInfo = pTagerIServerUserItem->GetUserInfo();
- Temp.player[i].dwUserID=pUserInfo->dwUserID;
- lstrcpyn(Temp.player[i].szHeadUrl, pUserInfo->szHeadUrl, CountArray(Temp.player[i].szHeadUrl));
- lstrcpyn(Temp.player[i].szName, pUserInfo->szNickName, CountArray(Temp.player[i].szName));
-
-
- Temp.dwReadyBody++;
- //同步到中心服务器
- UpdataBodyOwnRoomToServer(&Temp, sizeof(Temp));
- }
- }
- }
- OnLineTableAck.wTableState = Temp.roomStatus;
- //玩家
- CopyMemory(OnLineTableAck.Userinfo, Temp.player, sizeof(Temp.player));
-
- Club::PB_CS_S_ClubOnLineTableAck TableAck;
- TableAck.set_dwtableid(OnLineTableAck.dwTableID);
- TableAck.set_wjushu(OnLineTableAck.wJushu);
- TableAck.set_wtablestate(OnLineTableAck.wTableState);
- for (WORD i = 0; i < 5; i++)
- {
- Club::pb_PlayerInfo* PlayerInfo = TableAck.add_userinfo();
- PlayerInfo->set_dwuserid(OnLineTableAck.Userinfo[i].dwUserID);
- std::string szName = CW2AEX<1024>(OnLineTableAck.Userinfo[i].szName, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(OnLineTableAck.Userinfo[i].szHeadUrl, CP_UTF8).m_psz;
- PlayerInfo->set_szname(szName);
- PlayerInfo->set_szheadurl(szHeadUrl);
- }
- //发送数据
- std::string pbdata = TableAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBONLINE_TABLEUSER_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- if ((Temp.dwBody == Temp.dwReadyBody || bIsUserNull) && 0 == Temp.roomStatus)
- {
- Temp.roomStatus = 1;//房间状态
- //同步到中心服务器
- UpdataBodyOwnRoomToServer(&Temp, sizeof(Temp));
- //自动创建1个房间
- if (0 < Temp.tmp6[0] && 1 == Temp.tmp5)
- {
- memset(szString, 0, 512 * sizeof(TCHAR));
- _sntprintf(szString, CountArray(szString), TEXT("userid=%d 检测少人(游戏已开始),m_PriTableID_2_TableID有这个房间 可以(自动创建1个房间)"), pIServerUserItem->GetUserID());
- CTraceService::TraceString(szString, TraceLevel_Warning);
-
- this->OnAutoCreateRoomToDB(Temp.tmp6[0], pIServerUserItem->GetUserID(), Temp.tmp4);
- }
- }
- }
- else{
- //玩家
- CopyMemory(OnLineTableAck.Userinfo, Temp.player, sizeof(Temp.player));
- Club::PB_CS_S_ClubOnLineTableAck TableAck;
- TableAck.set_dwtableid(OnLineTableAck.dwTableID);
- TableAck.set_wjushu(OnLineTableAck.wJushu);
- TableAck.set_wtablestate(OnLineTableAck.wTableState);
- for (WORD i = 0; i < 5; i++)
- {
- Club::pb_PlayerInfo* PlayerInfo = TableAck.add_userinfo();
- PlayerInfo->set_dwuserid(OnLineTableAck.Userinfo[i].dwUserID);
- std::string szName = CW2AEX<1024>(OnLineTableAck.Userinfo[i].szName, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(OnLineTableAck.Userinfo[i].szHeadUrl, CP_UTF8).m_psz;
- PlayerInfo->set_szname(szName);
- PlayerInfo->set_szheadurl(szHeadUrl);
- }
- //发送数据
- std::string pbdata = TableAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBONLINE_TABLEUSER_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- }
- }
- }
-
- }
- return true;
- }
-
-
- //俱乐部会员黑名单
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubBlackUser(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubUser2 ClubUser2;
- ClubUser2.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubUser2 pClubUser;
- ZeroMemory(&pClubUser, sizeof(pClubUser));
- pClubUser.dwClubID = ClubUser2.dwclubid();
- pClubUser.wStartIndex = ClubUser2.wstartindex();
- pClubUser.wCount = ClubUser2.wcount();
- pClubUser.cbKind = ClubUser2.cbkind();
- pClubUser.dwTemp = ClubUser2.dwtemp();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubUser2 ClubUser;
- ZeroMemory(&ClubUser, sizeof(ClubUser));
-
- //设置变量
- ClubUser.dwUserID = pIServerUserItem->GetUserID();
- ClubUser.dwClubID = pClubUser.dwClubID;
- ClubUser.wStartIndex = pClubUser.wStartIndex;
- ClubUser.wCount = pClubUser.wCount;
- ClubUser.cbKind = pClubUser.cbKind;
- ClubUser.dwTemp = pClubUser.dwTemp;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_USER2, dwSocketID, &ClubUser, sizeof(ClubUser));
- }
-
- //俱乐部检测协议
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubProtocol(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubProtocol Protocol;
- Protocol.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubProtocol pClubProtocol;
- ZeroMemory(&pClubProtocol, sizeof(pClubProtocol));
- pClubProtocol.dwClubID = Protocol.dwclubid();
- pClubProtocol.dwTemp = Protocol.dwtemp();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubProtocol ClubProtocol;
- ZeroMemory(&ClubProtocol, sizeof(ClubProtocol));
-
- //设置变量
- ClubProtocol.dwUserID = pIServerUserItem->GetUserID();
- ClubProtocol.dwClubID = pClubProtocol.dwClubID;
- ClubProtocol.dwTemp = pClubProtocol.dwTemp;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_PROTOCOL, dwSocketID, &ClubProtocol, sizeof(ClubProtocol));
- }
-
- //俱乐部同意协议
- bool CAttemperEngineSink::OnTCPNetworkSubAgreeClubProtocol(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_S_ClubProtocolAgree Protocol;
- Protocol.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubProtocolAgree pClubUserAgree;
- ZeroMemory(&pClubUserAgree, sizeof(pClubUserAgree));
- pClubUserAgree.dwClubID = Protocol.dwclubid();
- pClubUserAgree.cbAgree = Protocol.cbagree();
- pClubUserAgree.dwTemp = Protocol.dwtemp();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubProtocolAgree ClubUserAgree;
- ZeroMemory(&ClubUserAgree, sizeof(ClubUserAgree));
-
- //设置变量
- ClubUserAgree.dwUserID = pIServerUserItem->GetUserID();
- ClubUserAgree.dwClubID = pClubUserAgree.dwClubID;
- ClubUserAgree.dwTemp = pClubUserAgree.dwTemp;
- ClubUserAgree.cbAgree = pClubUserAgree.cbAgree;
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_PROTOCOLAGREE, dwSocketID, &ClubUserAgree, sizeof(ClubUserAgree));
- }
-
- //俱乐部公告
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubNotice(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubNotice Notice;
- Notice.ParseFromArray(pData, wDataSize);
- CString message = (CA2CTEX<2048>(Notice.message().c_str(), CP_UTF8)).m_szBuffer;
- //处理消息
- CMD_GR_ClubNotice pClubUserNotice;
- ZeroMemory(&pClubUserNotice, sizeof(pClubUserNotice));
- pClubUserNotice.dwClubID = Notice.dwclubid();
- pClubUserNotice.cbType = Notice.cbtype();
- pClubUserNotice.dwTemp = Notice.dwtemp();
- _sntprintf(pClubUserNotice.Message, CountArray(pClubUserNotice.Message), TEXT("%s"), message);
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造结构
- DBR_GR_ClubNotice ClubNotice;
- ZeroMemory(&ClubNotice, sizeof(ClubNotice));
-
- //设置变量
- ClubNotice.dwUserID = pIServerUserItem->GetUserID();
- ClubNotice.dwClubID = pClubUserNotice.dwClubID;
- ClubNotice.dwTemp = pClubUserNotice.dwTemp;
- ClubNotice.cbType = pClubUserNotice.cbType;
- CopyMemory(ClubNotice.Message, pClubUserNotice.Message, sizeof(pClubUserNotice.Message));
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_NOTICE, dwSocketID, &ClubNotice, sizeof(ClubNotice));
- }
-
- //群主解散俱乐部房间
- bool CAttemperEngineSink::OnTCPNetworkSubDissolveRoom(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubDissolveRoom DissolveRoom;
- DissolveRoom.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubDissolveRoom pClubDissolveRoom;
- ZeroMemory(&pClubDissolveRoom, sizeof(pClubDissolveRoom));
- pClubDissolveRoom.dwClubID = DissolveRoom.dwclubid();
- pClubDissolveRoom.dwRoomID = DissolveRoom.dwroomid();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //校验该房间属于该俱乐部
- CWHDataLocker DataLocker(m_CriticalSection);
- JN_GR_RoomListBig* pRoomListBig = &m_PrivateRoomAll[pClubDissolveRoom.dwRoomID];
- if (pRoomListBig == NULL) return false;
- if (pRoomListBig->roomType == 1 && pRoomListBig->tmp6[0] == pClubDissolveRoom.dwClubID)
- {
- DBR_GR_ClubDissolveRoom ClubDissolveRoom = { 0 };
- ClubDissolveRoom.dwClubID = pClubDissolveRoom.dwClubID;
- ClubDissolveRoom.dwRoomID = pClubDissolveRoom.dwRoomID;
- ClubDissolveRoom.dwUserID = pIServerUserItem->GetUserID();
-
- //校验该用户为该俱乐部群主
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_DISSOLVEROOM, dwSocketID, &ClubDissolveRoom, sizeof(ClubDissolveRoom));
- }
- else
- {
- SendRequestFailure(pIServerUserItem, TEXT("不是本俱乐部房间,不能强制解散!"), 0);
- }
- return true;
- }
-
- //俱乐部统计战绩
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubCountExploits(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubExploits ploits;
- ploits.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubExploits pClubRecord;
- ZeroMemory(&pClubRecord, sizeof(pClubRecord));
- pClubRecord.dwClubID = ploits.dwclubid();
- pClubRecord.PrivateTableID = ploits.privatetableid();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_COUNT_EXPLOITS, dwSocketID, &pClubRecord, wDataSize);
- }
- //俱乐部统计对局数排名
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubCountPlaygames(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubPlaygames Playgames;
- Playgames.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubPlaygames pClubPlaygames;
- ZeroMemory(&pClubPlaygames, sizeof(pClubPlaygames));
- pClubPlaygames.dwClubID = Playgames.dwclubid();
- pClubPlaygames.wType = Playgames.wtype();
- pClubPlaygames.StartIndex = Playgames.startindex();
- pClubPlaygames.mCount = Playgames.mcount();
- pClubPlaygames.wDateCount = Playgames.wdatecount();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- CMD_GR_ClubPlaygamesUser pClubPlaygamesUser;
- ZeroMemory(&pClubPlaygamesUser, sizeof(pClubPlaygamesUser));
- pClubPlaygamesUser.dwClubID = pClubPlaygames.dwClubID;
- pClubPlaygamesUser.wType = pClubPlaygames.wType;
- pClubPlaygamesUser.StartIndex = pClubPlaygames.StartIndex;
- pClubPlaygamesUser.mCount = pClubPlaygames.mCount;
- pClubPlaygamesUser.wDateCount = pClubPlaygames.wDateCount;
- pClubPlaygamesUser.UserID = pIServerUserItem->GetUserID();
-
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_COUNT_PLAYGAEMS, dwSocketID, &pClubPlaygamesUser, sizeof(CMD_GR_ClubPlaygamesUser));
- }
- //俱乐部统计积分数排名
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubCountIntegral(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_C_ClubIntegral Integral;
- Integral.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_ClubIntegral pClubIntegral;
- ZeroMemory(&pClubIntegral, sizeof(pClubIntegral));
- pClubIntegral.dwClubID = Integral.dwclubid();
- pClubIntegral.wType = Integral.wtype();
- pClubIntegral.wDateCount = Integral.wdatecount();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
- CMD_GR_ClubIntegralUser pClubIntegralUser;
- pClubIntegralUser.dwClubID = pClubIntegral.dwClubID;
- pClubIntegralUser.wType = pClubIntegral.wType;
- pClubIntegralUser.wDateCount = pClubIntegral.wDateCount;
- pClubIntegralUser.UserID = pIServerUserItem->GetUserID();
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_COUNT_INTEGRAL, dwSocketID, &pClubIntegralUser, sizeof(CMD_GR_ClubIntegralUser));
- }
-
- //俱乐部打样
- bool CAttemperEngineSink::OnTCPNetworkSubGetClubSample(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- Club::PB_CS_Club_Make_A_Sample MakeSample;
- MakeSample.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_Club_Make_A_Sample pSample;
- ZeroMemory(&pSample, sizeof(pSample));
- pSample.dwClubID = MakeSample.dwclubid();
- pSample.IsSample = MakeSample.issample();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //构造数据
- DBR_GR_Club_Make_A_Sample Sample;
- ZeroMemory(&Sample, sizeof(Sample));
-
- Sample.dwClubID = pSample.dwClubID;
- Sample.IsSample = pSample.IsSample;
- Sample.dwUserID = pIServerUserItem->GetUserID();
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_MAKEA_SAMPLE, dwSocketID, &Sample, sizeof(Sample));
- }
-
-
- ////////////////////////////////////////////////////////
- //查询银行
- //bool CAttemperEngineSink::OnTCPNetworkSubQueryInsureInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GR_C_QueryInsureInfoRequest));
- // if (wDataSize != sizeof(CMD_GR_C_QueryInsureInfoRequest)) return false;
- //
- // //房间判断
- // ASSERT(m_pGameServiceOption->wServerType&GAME_GENRE_GOLD);
- // if ((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) == 0) return false;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //变量定义
- // CMD_GR_C_QueryInsureInfoRequest * pQueryInsureInfoRequest = (CMD_GR_C_QueryInsureInfoRequest *)pData;
- //
- // //变量定义
- // DBR_GR_QueryInsureInfo QueryInsureInfo;
- // ZeroMemory(&QueryInsureInfo, sizeof(QueryInsureInfo));
- //
- // //构造数据
- // QueryInsureInfo.cbActivityGame = pQueryInsureInfoRequest->cbActivityGame;
- // QueryInsureInfo.dwUserID = pIServerUserItem->GetUserID();
- // QueryInsureInfo.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(QueryInsureInfo.szPassword, pQueryInsureInfoRequest->szInsurePass, CountArray(QueryInsureInfo.szPassword));
- //
- // CTraceService::TraceString(TEXT("查询银行已屏蔽 DBR_GR_QUERY_INSURE_INFO"), TraceLevel_Warning);
- // //投递请求
- // //m_pIDBCorrespondManager->PostDataBaseRequest(QueryInsureInfo.dwUserID, DBR_GR_QUERY_INSURE_INFO, dwSocketID, &QueryInsureInfo, sizeof(QueryInsureInfo));
- //
- // return true;
- //}
- //
- ////开通银行
- //bool CAttemperEngineSink::OnTCPNetworkSubEnableInsureRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GR_C_EnableInsureRequest));
- // if (wDataSize != sizeof(CMD_GR_C_EnableInsureRequest)) return false;
- //
- // //房间判断
- // ASSERT(m_pGameServiceOption->wServerType&GAME_GENRE_GOLD);
- // if ((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) == 0) return false;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //变量定义
- // CMD_GR_C_EnableInsureRequest * pEnableInsureRequest = (CMD_GR_C_EnableInsureRequest *)pData;
- //
- // //变量定义
- // DBR_GR_UserEnableInsure UserEnableInsure;
- // ZeroMemory(&UserEnableInsure, sizeof(UserEnableInsure));
- //
- // //构造数据
- // UserEnableInsure.dwUserID = pIServerUserItem->GetUserID();
- // UserEnableInsure.dwClientAddr = pIServerUserItem->GetClientAddr();
- // UserEnableInsure.cbActivityGame = pEnableInsureRequest->cbActivityGame;
- // lstrcpyn(UserEnableInsure.szLogonPass, pEnableInsureRequest->szLogonPass, CountArray(UserEnableInsure.szLogonPass));
- // lstrcpyn(UserEnableInsure.szInsurePass, pEnableInsureRequest->szInsurePass, CountArray(UserEnableInsure.szInsurePass));
- // lstrcpyn(UserEnableInsure.szMachineID, pEnableInsureRequest->szMachineID, CountArray(UserEnableInsure.szMachineID));
- //
- // //投递请求
- // m_pIDBCorrespondManager->PostDataBaseRequest(UserEnableInsure.dwUserID, DBR_GR_USER_ENABLE_INSURE, dwSocketID, &UserEnableInsure, sizeof(UserEnableInsure));
- //
- // return true;
- //}
- //
- ////存款请求
- //bool CAttemperEngineSink::OnTCPNetworkSubSaveScoreRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GR_C_SaveScoreRequest));
- // if (wDataSize != sizeof(CMD_GR_C_SaveScoreRequest)) return false;
- //
- // //房间判断
- // ASSERT(m_pGameServiceOption->wServerType&GAME_GENRE_GOLD);
- // if ((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) == 0) return false;
- //
- // //变量定义
- // CMD_GR_C_SaveScoreRequest * pSaveScoreRequest = (CMD_GR_C_SaveScoreRequest *)pData;
- //
- // //效验参数
- // ASSERT(pSaveScoreRequest->lSaveScore > 0L);
- // if (pSaveScoreRequest->lSaveScore <= 0L) return false;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //规则判断
- // if (pSaveScoreRequest->cbActivityGame == FALSE && CServerRule::IsForfendSaveInRoom(m_pGameServiceOption->dwServerRule))
- // {
- // //发送数据
- // SendInsureFailure(pIServerUserItem, TEXT("此房间禁止房间存款,存入操作失败!"), 0L, pSaveScoreRequest->cbActivityGame);
- // return true;
- // }
- //
- // //规则判断
- // if (pSaveScoreRequest->cbActivityGame == TRUE && CServerRule::IsForfendSaveInGame(m_pGameServiceOption->dwServerRule))
- // {
- // //发送数据
- // SendInsureFailure(pIServerUserItem, TEXT("此房间禁止游戏存款,存入操作失败!"), 0L, pSaveScoreRequest->cbActivityGame);
- // return true;
- // }
- //
- // //变量定义
- // SCORE lConsumeQuota;
- //
- //
- // //获取限额
- // if (pIServerUserItem->GetTableID() != INVALID_TABLE)
- // {
- // auto pTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- // if (!pTableFrame)
- // return false;
- // lConsumeQuota = pTableFrame->QueryConsumeQuota(pIServerUserItem);
- // }
- // else
- // {
- // lConsumeQuota = pIServerUserItem->GetUserScore() + pIServerUserItem->GetTrusteeScore();
- // }
- //
- // //限额判断
- // if (pSaveScoreRequest->lSaveScore > lConsumeQuota)
- // {
- // SCORE lUserWholeScore = pIServerUserItem->GetUserScore() + pIServerUserItem->GetTrusteeScore();
- // if (lConsumeQuota < lUserWholeScore)
- // {
- // //构造提示
- // TCHAR szDescribe[128] = TEXT("");
- // _sntprintf(szDescribe, CountArray(szDescribe), TEXT("由于您正在游戏中,游戏币可存入额度为 %I64d,存入操作失败!"), lConsumeQuota);
- //
- // //发送数据
- // SendInsureFailure(pIServerUserItem, szDescribe, 0L, pSaveScoreRequest->cbActivityGame);
- // }
- // else
- // {
- // //发送数据
- // SendInsureFailure(pIServerUserItem, TEXT("您的游戏币余额不足,存入操作失败!"), 0L, pSaveScoreRequest->cbActivityGame);
- // }
- //
- // return true;
- // }
- //
- // //锁定积分
- // if (pIServerUserItem->FrozenedUserScore(pSaveScoreRequest->lSaveScore) == false)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // //变量定义
- // DBR_GR_UserSaveScore UserSaveScore;
- // ZeroMemory(&UserSaveScore, sizeof(UserSaveScore));
- //
- // //构造数据
- // UserSaveScore.cbActivityGame = pSaveScoreRequest->cbActivityGame;
- // UserSaveScore.dwUserID = pIServerUserItem->GetUserID();
- // UserSaveScore.lSaveScore = pSaveScoreRequest->lSaveScore;
- // UserSaveScore.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(UserSaveScore.szMachineID, pIServerUserItem->GetMachineID(), CountArray(UserSaveScore.szMachineID));
- //
- // //投递请求
- // m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_USER_SAVE_SCORE, dwSocketID, &UserSaveScore, sizeof(UserSaveScore));
- //
- // return true;
- //}
- //
- ////取款请求
- //bool CAttemperEngineSink::OnTCPNetworkSubTakeScoreRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GR_C_TakeScoreRequest));
- // if (wDataSize != sizeof(CMD_GR_C_TakeScoreRequest)) return false;
- //
- // //房间判断
- // ASSERT(m_pGameServiceOption->wServerType&GAME_GENRE_GOLD);
- // if ((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) == 0) return false;
- //
- // //变量定义
- // CMD_GR_C_TakeScoreRequest * pTakeScoreRequest = (CMD_GR_C_TakeScoreRequest *)pData;
- // pTakeScoreRequest->szInsurePass[CountArray(pTakeScoreRequest->szInsurePass) - 1] = 0;
- //
- // //效验参数
- // ASSERT(pTakeScoreRequest->lTakeScore > 0L);
- // if (pTakeScoreRequest->lTakeScore <= 0L) return false;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //规则判断
- // if (pTakeScoreRequest->cbActivityGame == FALSE && CServerRule::IsForfendTakeInRoom(m_pGameServiceOption->dwServerRule))
- // {
- // //发送数据
- // SendInsureFailure(pIServerUserItem, TEXT("此房间禁止房间取款,取出操作失败!"), 0L, pTakeScoreRequest->cbActivityGame);
- // return true;
- // }
- //
- // //规则判断
- // if (pTakeScoreRequest->cbActivityGame == TRUE && CServerRule::IsForfendTakeInGame(m_pGameServiceOption->dwServerRule))
- // {
- // //发送数据
- // SendInsureFailure(pIServerUserItem, TEXT("此房间禁止游戏取款,取出操作失败!"), 0L, pTakeScoreRequest->cbActivityGame);
- // return true;
- // }
- //
- // //变量定义
- // DBR_GR_UserTakeScore UserTakeScore;
- // ZeroMemory(&UserTakeScore, sizeof(UserTakeScore));
- //
- // //构造数据
- // UserTakeScore.cbActivityGame = pTakeScoreRequest->cbActivityGame;
- // UserTakeScore.dwUserID = pIServerUserItem->GetUserID();
- // UserTakeScore.lTakeScore = pTakeScoreRequest->lTakeScore;
- // UserTakeScore.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(UserTakeScore.szPassword, pTakeScoreRequest->szInsurePass, CountArray(UserTakeScore.szPassword));
- // lstrcpyn(UserTakeScore.szMachineID, pIServerUserItem->GetMachineID(), CountArray(UserTakeScore.szMachineID));
- //
- // //投递请求
- // m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_USER_TAKE_SCORE, dwSocketID, &UserTakeScore, sizeof(UserTakeScore));
- //
- // return true;
- //}
- //
- ////转帐请求
- //bool CAttemperEngineSink::OnTCPNetworkSubTransferScoreRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GP_C_TransferScoreRequest));
- // if (wDataSize != sizeof(CMD_GP_C_TransferScoreRequest)) return false;
- //
- // //房间判断
- // ASSERT(m_pGameServiceOption->wServerType&GAME_GENRE_GOLD);
- // if ((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) == 0) return false;
- //
- // //变量定义
- // CMD_GP_C_TransferScoreRequest * pTransferScoreRequest = (CMD_GP_C_TransferScoreRequest *)pData;
- // pTransferScoreRequest->szAccounts[CountArray(pTransferScoreRequest->szAccounts) - 1] = 0;
- // pTransferScoreRequest->szInsurePass[CountArray(pTransferScoreRequest->szInsurePass) - 1] = 0;
- //
- // //效验参数
- // ASSERT(pTransferScoreRequest->lTransferScore > 0L);
- // if (pTransferScoreRequest->lTransferScore <= 0L) return false;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //变量定义
- // DBR_GR_UserTransferScore UserTransferScore;
- // ZeroMemory(&UserTransferScore, sizeof(UserTransferScore));
- //
- // //构造数据
- // UserTransferScore.cbActivityGame = pTransferScoreRequest->cbActivityGame;
- // UserTransferScore.dwUserID = pIServerUserItem->GetUserID();
- // UserTransferScore.dwClientAddr = pIServerUserItem->GetClientAddr();
- // UserTransferScore.lTransferScore = pTransferScoreRequest->lTransferScore;
- // lstrcpyn(UserTransferScore.szAccounts, pTransferScoreRequest->szAccounts, CountArray(UserTransferScore.szAccounts));
- // lstrcpyn(UserTransferScore.szMachineID, pIServerUserItem->GetMachineID(), CountArray(UserTransferScore.szMachineID));
- // lstrcpyn(UserTransferScore.szPassword, pTransferScoreRequest->szInsurePass, CountArray(UserTransferScore.szPassword));
- // lstrcpyn(UserTransferScore.szTransRemark, pTransferScoreRequest->szTransRemark, CountArray(UserTransferScore.szTransRemark));
- //
- // //投递请求
- // m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_USER_TRANSFER_SCORE, dwSocketID, &UserTransferScore, sizeof(UserTransferScore));
- //
- // return true;
- //}
- //
- //查询用户请求
- //bool CAttemperEngineSink::OnTCPNetworkSubQueryUserInfoRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GR_C_QueryUserInfoRequest));
- // if (wDataSize != sizeof(CMD_GR_C_QueryUserInfoRequest)) return false;
- //
- // //房间判断
- // ASSERT((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) != 0);
- // if ((m_pGameServiceOption->wServerType&GAME_GENRE_GOLD) == 0) return false;
- //
- // //变量定义
- // CMD_GR_C_QueryUserInfoRequest * pQueryUserInfoRequest = (CMD_GR_C_QueryUserInfoRequest *)pData;
- // pQueryUserInfoRequest->szAccounts[CountArray(pQueryUserInfoRequest->szAccounts) - 1] = 0;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //ID判断
- // if (pQueryUserInfoRequest->cbByNickName == FALSE)
- // {
- // //长度判断
- // int nLen = lstrlen(pQueryUserInfoRequest->szAccounts);
- // if (nLen >= 8)
- // {
- // SendInsureFailure(pIServerUserItem, TEXT("请输入合法的玩家ID!"), 0, pQueryUserInfoRequest->cbActivityGame);
- // return true;
- // }
- //
- // //合法判断
- // for (int i = 0; i < nLen; i++)
- // {
- // if (pQueryUserInfoRequest->szAccounts[i] < TEXT('0') || pQueryUserInfoRequest->szAccounts[i] > TEXT('9'))
- // {
- // SendInsureFailure(pIServerUserItem, TEXT("请输入合法的玩家ID!"), 0, pQueryUserInfoRequest->cbActivityGame);
- // return true;
- // }
- // }
- // }
- //
- // //变量定义
- // DBR_GR_QueryTransferUserInfo QueryTransferUserInfo;
- // ZeroMemory(&QueryTransferUserInfo, sizeof(QueryTransferUserInfo));
- //
- // //构造数据
- // QueryTransferUserInfo.dwUserID = pIServerUserItem->GetUserID();
- // QueryTransferUserInfo.cbByNickName = pQueryUserInfoRequest->cbByNickName;
- // QueryTransferUserInfo.cbActivityGame = pQueryUserInfoRequest->cbActivityGame;
- // lstrcpyn(QueryTransferUserInfo.szAccounts, pQueryUserInfoRequest->szAccounts, CountArray(QueryTransferUserInfo.szAccounts));
- //
- // //投递请求
- // m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_QUERY_TRANSFER_USER_INFO, dwSocketID, &QueryTransferUserInfo, sizeof(QueryTransferUserInfo));
- //
- // return true;
- //}
-
- ////领取任务
- //bool CAttemperEngineSink::OnTCPNetworkSubTakeTaskRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //参数校验
- // ASSERT(wDataSize == sizeof(CMD_GR_C_TakeTask));
- // if (wDataSize != sizeof(CMD_GR_C_TakeTask)) return false;
- //
- // //提取数据
- // CMD_GR_C_TakeTask * pTaskTake = (CMD_GR_C_TakeTask *)pData;
- // pTaskTake->szPassword[CountArray(pTaskTake->szPassword) - 1] = 0;
- // pTaskTake->szMachineID[CountArray(pTaskTake->szMachineID) - 1] = 0;
- //
- // //查找用户
- // IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pTaskTake->dwUserID);
- // if (pIServerUserItem == NULL) return false;
- //
- // //构造结构
- // DBR_GR_TaskTake TaskTake;
- // TaskTake.dwUserID = pTaskTake->dwUserID;
- // TaskTake.wTaskID = pTaskTake->wTaskID;
- // TaskTake.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(TaskTake.szPassword, pTaskTake->szPassword, CountArray(TaskTake.szPassword));
- // lstrcpyn(TaskTake.szMachineID, pTaskTake->szMachineID, CountArray(TaskTake.szMachineID));
- //
- // //投递请求
- // m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_TASK_TAKE, dwSocketID, &TaskTake, sizeof(TaskTake));
- //
- // return true;
- //}
- //
- ////领取奖励
- //bool CAttemperEngineSink::OnTCPNetworkSubTaskRewardRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //参数校验
- // ASSERT(wDataSize == sizeof(CMD_GR_C_TaskReward));
- // if (wDataSize != sizeof(CMD_GR_C_TaskReward)) return false;
- //
- // //提取数据
- // CMD_GR_C_TaskReward * pTaskReward = (CMD_GR_C_TaskReward *)pData;
- // pTaskReward->szPassword[CountArray(pTaskReward->szPassword) - 1] = 0;
- // pTaskReward->szMachineID[CountArray(pTaskReward->szMachineID) - 1] = 0;
- //
- // //查找用户
- // IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pTaskReward->dwUserID);
- // if (pIServerUserItem == NULL) return false;
- //
- // //构造结构
- // DBR_GR_TaskReward TaskReward;
- // TaskReward.dwUserID = pTaskReward->dwUserID;
- // TaskReward.wTaskID = pTaskReward->wTaskID;
- // TaskReward.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(TaskReward.szPassword, pTaskReward->szPassword, CountArray(TaskReward.szPassword));
- // lstrcpyn(TaskReward.szMachineID, pTaskReward->szMachineID, CountArray(TaskReward.szMachineID));
- //
- // //投递请求
- // m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_TASK_REWARD, dwSocketID, &TaskReward, sizeof(TaskReward));
- //
- // return true;
- //}
- //
- ////加载任务
- //bool CAttemperEngineSink::OnTCPNetworkSubLoadTaskInfoRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //参数校验
- // ASSERT(wDataSize == sizeof(CMD_GR_C_LoadTaskInfo));
- // if (wDataSize != sizeof(CMD_GR_C_LoadTaskInfo)) return false;
- //
- // //提取数据
- // CMD_GR_C_LoadTaskInfo * pLoadTaskInfo = (CMD_GR_C_LoadTaskInfo *)pData;
- // pLoadTaskInfo->szPassword[CountArray(pLoadTaskInfo->szPassword) - 1] = 0;
- //
- // //查找用户
- // IServerUserItem * pIServerUserItem = m_ServerUserManager.SearchUserItem(pLoadTaskInfo->dwUserID);
- // if (pIServerUserItem == NULL) return false;
- //
- // //构造结构
- // DBR_GR_TaskQueryInfo TaskQueryInfo;
- // TaskQueryInfo.dwUserID = pLoadTaskInfo->dwUserID;
- // lstrcpyn(TaskQueryInfo.szPassword, pLoadTaskInfo->szPassword, CountArray(TaskQueryInfo.szPassword));
- //
- // //投递请求
- // m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_TASK_QUERY_INFO, dwSocketID, &TaskQueryInfo, sizeof(TaskQueryInfo));
- //
- // return true;
- //}
-
- //查询设置
- bool CAttemperEngineSink::OnTCPNetworkSubQueryOption(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT((pIServerUserItem != NULL) && (pIServerUserItem->GetMasterOrder() > 0));
- if ((pIServerUserItem == NULL) || (pIServerUserItem->GetMasterOrder() == 0)) return false;
-
- //变量定义
- CMD_GR_OptionCurrent OptionCurrent;
- ZeroMemory(&OptionCurrent, sizeof(OptionCurrent));
-
- //挂接属性
- OptionCurrent.ServerOptionInfo.wKindID = m_pGameServiceOption->wKindID;
- OptionCurrent.ServerOptionInfo.wNodeID = m_pGameServiceOption->wNodeID;
- OptionCurrent.ServerOptionInfo.wSortID = m_pGameServiceOption->wSortID;
-
- //房间配置
- OptionCurrent.ServerOptionInfo.wRevenueRatio = m_pGameServiceOption->wRevenueRatio;
- OptionCurrent.ServerOptionInfo.lServiceScore = m_pGameServiceOption->lServiceScore;
- OptionCurrent.ServerOptionInfo.lRestrictScore = m_pGameServiceOption->lRestrictScore;
- OptionCurrent.ServerOptionInfo.lMinTableScore = m_pGameServiceOption->lMinTableScore;
- OptionCurrent.ServerOptionInfo.lMinEnterScore = m_pGameServiceOption->lMinEnterScore;
- OptionCurrent.ServerOptionInfo.lMaxEnterScore = m_pGameServiceOption->lMaxEnterScore;
-
- //会员限制
- OptionCurrent.ServerOptionInfo.cbMinEnterMember = m_pGameServiceOption->cbMinEnterMember;
- OptionCurrent.ServerOptionInfo.cbMaxEnterMember = m_pGameServiceOption->cbMaxEnterMember;
-
- //房间属性
- OptionCurrent.ServerOptionInfo.dwServerRule = m_pGameServiceOption->dwServerRule;
- lstrcpyn(OptionCurrent.ServerOptionInfo.szServerName, m_pGameServiceOption->szServerName, CountArray(OptionCurrent.ServerOptionInfo.szServerName));
-
- //聊天规则
- OptionCurrent.dwRuleMask |= SR_FORFEND_GAME_CHAT;
- OptionCurrent.dwRuleMask |= SR_FORFEND_ROOM_CHAT;
- OptionCurrent.dwRuleMask |= SR_FORFEND_WISPER_CHAT;
- OptionCurrent.dwRuleMask |= SR_FORFEND_WISPER_ON_GAME;
-
- //房间规则
- OptionCurrent.dwRuleMask |= SR_FORFEND_ROOM_ENTER;
- OptionCurrent.dwRuleMask |= SR_FORFEND_GAME_ENTER;
- OptionCurrent.dwRuleMask |= SR_FORFEND_GAME_LOOKON;
-
- //银行规则
- OptionCurrent.dwRuleMask |= SR_FORFEND_TAKE_IN_ROOM;
- OptionCurrent.dwRuleMask |= SR_FORFEND_TAKE_IN_GAME;
- OptionCurrent.dwRuleMask |= SR_FORFEND_SAVE_IN_ROOM;
- OptionCurrent.dwRuleMask |= SR_FORFEND_SAVE_IN_GAME;
-
- //其他规则
- //OptionCurrent.dwRuleMask|=SR_RECORD_GAME_TRACK;
- OptionCurrent.dwRuleMask |= SR_FORFEND_GAME_RULE;
- OptionCurrent.dwRuleMask |= SR_FORFEND_LOCK_TABLE;
- OptionCurrent.dwRuleMask |= SR_ALLOW_ANDROID_SIMULATE;
-
- //组件规则
- if (m_pGameServiceAttrib->cbDynamicJoin == TRUE) OptionCurrent.dwRuleMask |= SR_ALLOW_DYNAMIC_JOIN;
- if (m_pGameServiceAttrib->cbAndroidUser == TRUE) OptionCurrent.dwRuleMask |= SR_ALLOW_ANDROID_ATTEND;
- //if (m_pGameServiceAttrib->cbOffLineTrustee==TRUE) OptionCurrent.dwRuleMask|=SR_ALLOW_OFFLINE_TRUSTEE;
-
- //模式规则
- if ((m_pGameServiceOption->wServerType&(GAME_GENRE_GOLD | GAME_GENRE_MATCH)) == 0) OptionCurrent.dwRuleMask |= SR_RECORD_GAME_SCORE;
- if ((m_pGameServiceOption->wServerType&(GAME_GENRE_GOLD | GAME_GENRE_MATCH)) == 0) OptionCurrent.dwRuleMask |= SR_IMMEDIATE_WRITE_SCORE;
-
- //发送数据
- SendData(pIServerUserItem, MDM_GR_MANAGE, SUB_GR_OPTION_CURRENT, &OptionCurrent, sizeof(OptionCurrent));
-
- return true;
- }
-
- //房间设置
- bool CAttemperEngineSink::OnTCPNetworkSubOptionServer(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_GR_ServerOption));
- if (wDataSize != sizeof(CMD_GR_ServerOption)) return false;
-
- //变量定义
- CMD_GR_ServerOption * pServerOption = (CMD_GR_ServerOption *)pData;
- tagServerOptionInfo * pServerOptionInfo = &pServerOption->ServerOptionInfo;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT((pIServerUserItem != NULL) && (pIServerUserItem->GetMasterOrder() > 0));
- if ((pIServerUserItem == NULL) || (pIServerUserItem->GetMasterOrder() == 0)) return false;
-
- //变量定义
- bool bModifyServer = false;
-
- //挂接节点
- if (m_pGameServiceOption->wNodeID != pServerOptionInfo->wNodeID)
- {
- bModifyServer = true;
- m_pGameServiceOption->wNodeID = pServerOptionInfo->wNodeID;
- }
-
- //挂接类型
- if ((pServerOptionInfo->wKindID != 0) && (m_pGameServiceOption->wKindID != pServerOptionInfo->wKindID))
- {
- bModifyServer = true;
- m_pGameServiceOption->wKindID = pServerOptionInfo->wKindID;
- }
-
- //挂接排序
- if ((pServerOptionInfo->wSortID != 0) && (m_pGameServiceOption->wSortID != pServerOptionInfo->wSortID))
- {
- bModifyServer = true;
- m_pGameServiceOption->wSortID = pServerOptionInfo->wSortID;
- }
-
- //房间名字
- if ((pServerOptionInfo->szServerName[0] != 0) && (lstrcmp(m_pGameServiceOption->szServerName, pServerOptionInfo->szServerName) != 0))
- {
- bModifyServer = true;
- lstrcpyn(m_pGameServiceOption->szServerName, pServerOptionInfo->szServerName, CountArray(m_pGameServiceOption->szServerName));
- }
-
- //税收配置
- m_pGameServiceOption->wRevenueRatio = pServerOptionInfo->wRevenueRatio;
- m_pGameServiceOption->lServiceScore = pServerOptionInfo->lServiceScore;
-
- //房间配置
- m_pGameServiceOption->lRestrictScore = pServerOptionInfo->lRestrictScore;
- m_pGameServiceOption->lMinTableScore = pServerOptionInfo->lMinTableScore;
- m_pGameServiceOption->lMinEnterScore = pServerOptionInfo->lMinEnterScore;
- m_pGameServiceOption->lMaxEnterScore = pServerOptionInfo->lMaxEnterScore;
-
- //会员限制
- m_pGameServiceOption->cbMinEnterMember = pServerOptionInfo->cbMinEnterMember;
- m_pGameServiceOption->cbMaxEnterMember = pServerOptionInfo->cbMaxEnterMember;
-
- //聊天规则
- CServerRule::SetForfendGameChat(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendGameChat(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendRoomChat(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendRoomChat(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendWisperChat(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendWisperChat(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendWisperOnGame(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendWisperOnGame(pServerOptionInfo->dwServerRule));
-
- //房间规则
- CServerRule::SetForfendRoomEnter(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendRoomEnter(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendGameEnter(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendGameEnter(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendGameLookon(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendGameLookon(pServerOptionInfo->dwServerRule));
-
- //银行规则
- CServerRule::SetForfendTakeInRoom(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendTakeInRoom(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendTakeInGame(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendTakeInGame(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendSaveInRoom(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendSaveInRoom(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendSaveInGame(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendSaveInGame(pServerOptionInfo->dwServerRule));
-
- //其他规则
- CServerRule::SetRecordGameTrack(m_pGameServiceOption->dwServerRule, CServerRule::IsRecordGameTrack(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendGameRule(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendGameRule(pServerOptionInfo->dwServerRule));
- CServerRule::SetForfendLockTable(m_pGameServiceOption->dwServerRule, CServerRule::IsForfendLockTable(pServerOptionInfo->dwServerRule));
-
- //动态加入
- if (m_pGameServiceAttrib->cbDynamicJoin == TRUE)
- {
- CServerRule::SetAllowDynamicJoin(m_pGameServiceOption->dwServerRule, CServerRule::IsAllowDynamicJoin(pServerOptionInfo->dwServerRule));
- }
-
- //机器管理
- if (m_pGameServiceAttrib->cbAndroidUser == TRUE)
- {
- CServerRule::SetAllowAndroidAttend(m_pGameServiceOption->dwServerRule, CServerRule::IsAllowAndroidAttend(pServerOptionInfo->dwServerRule));
- }
-
- //断线托管
- if (m_pGameServiceAttrib->cbOffLineTrustee == TRUE)
- {
- CServerRule::SetAllowOffLineTrustee(m_pGameServiceOption->dwServerRule, CServerRule::IsAllowOffLineTrustee(pServerOptionInfo->dwServerRule));
- }
-
- //记录成绩
- if ((m_pGameServiceOption->wServerType&(GAME_GENRE_GOLD | GAME_GENRE_MATCH)) == 0)
- {
- CServerRule::SetRecordGameScore(m_pGameServiceOption->dwServerRule, CServerRule::IsRecordGameScore(pServerOptionInfo->dwServerRule));
- }
-
- //立即写分
- if ((m_pGameServiceOption->wServerType&(GAME_GENRE_GOLD | GAME_GENRE_MATCH)) == 0)
- {
- CServerRule::SetImmediateWriteScore(m_pGameServiceOption->dwServerRule, CServerRule::IsImmediateWriteScore(pServerOptionInfo->dwServerRule));
- }
-
- //调整参数
- CServiceUnits * pServiceUnits = CServiceUnits::g_pServiceUnits;
- pServiceUnits->RectifyServiceParameter();
-
- //发送修改
- if (bModifyServer == true)
- {
- //变量定义
- CMD_CS_C_ServerModify ServerModify;
- ZeroMemory(&ServerModify, sizeof(ServerModify));
-
- //服务端口
- ServerModify.wServerPort = pServiceUnits->m_TCPNetworkEngine->GetCurrentPort();
-
- //房间信息
- ServerModify.wKindID = m_pGameServiceOption->wKindID;
- ServerModify.wNodeID = m_pGameServiceOption->wNodeID;
- ServerModify.wSortID = m_pGameServiceOption->wSortID;
- ServerModify.dwOnLineCount = m_ServerUserManager.GetUserItemCount();
- ServerModify.dwFullCount = m_pGameServiceOption->wMaxPlayer - RESERVE_USER_COUNT;
- lstrcpyn(ServerModify.szServerName, m_pGameServiceOption->szServerName, CountArray(ServerModify.szServerName));
- lstrcpyn(ServerModify.szServerAddr, m_pInitParameter->m_ServiceAddress.szAddress, CountArray(ServerModify.szServerAddr));
-
- //DWORD dTableNum = 0;
- if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIServerUserItem->GetTableID());
- TCHAR szTemp[32] = { 0 };
- if (pat != nullptr) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- /*if (!csTemp.IsEmpty())
- {
- dTableNum = _wtol(szTemp);
- }*/
- }
- //发送数据
- m_pITCPSocketService->SendData(MDM_CS_SERVICE_INFO, SUB_CS_C_SERVER_MODIFY, &ServerModify, sizeof(ServerModify)/*, dTableNum, pIServerUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
- }
-
- //发送信息
- SendRequestFailure(pIServerUserItem, TEXT("当前游戏服务器房间的“运行值”状态配置数据修改成功"), 0);
-
- //输出信息
- TCHAR szBuffer[128] = TEXT("");
- _sntprintf(szBuffer, CountArray(szBuffer), TEXT("远程修改房间配置通知 管理员 %s [ %ld ]"), pIServerUserItem->GetNickName(), pIServerUserItem->GetUserID());
-
- //输出信息
- CTraceService::TraceString(szBuffer, TraceLevel_Info);
-
- return true;
- }
-
- //踢出用户
- //bool CAttemperEngineSink::OnTCPNetworkSubManagerKickUser(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize == sizeof(CMD_GR_KickUser));
- // if (wDataSize != sizeof(CMD_GR_KickUser)) return false;
- //
- // //变量定义
- // CMD_GR_KickUser * pKickUser = (CMD_GR_KickUser *)pData;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT((pIServerUserItem != NULL) && (pIServerUserItem->GetMasterOrder() > 0));
- // if ((pIServerUserItem == NULL) || (pIServerUserItem->GetMasterOrder() == 0)) return false;
- //
- // //权限判断
- // ASSERT(CMasterRight::CanKillUser(pIServerUserItem->GetMasterRight()) == true);
- // if (CMasterRight::CanKillUser(pIServerUserItem->GetMasterRight()) == false) return false;
- //
- // //目标用户
- // IServerUserItem * pITargetUserItem = m_ServerUserManager.SearchUserItem(pKickUser->dwTargetUserID);
- // if (pITargetUserItem == NULL) return true;
- //
- // //用户状态
- // if (pITargetUserItem->GetUserStatus() == US_PLAYING) return true;
- //
- // //踢出记录
- // m_KickUserItemMap[pITargetUserItem->GetUserID()] = (DWORD)time(NULL);
- //
- // //请离桌子
- // WORD wTargerTableID = pITargetUserItem->GetTableID();
- // if (wTargerTableID != INVALID_TABLE)
- // {
- // //发送消息
- // SendGameMessage(pITargetUserItem, TEXT("你已被管理员请离桌子!"), SMT_TABLE_EXIT);
- //
- // auto pTableFrame = GetTableFrame(wTargerTableID);
- // if (!pTableFrame)
- // return false;
- // if (pTableFrame->PerformStandUpAction(pITargetUserItem) == false) return true;
- // }
- //
- // //发送通知
- // LPCTSTR pszMessage = TEXT("你已被管理员请离此游戏房间!");
- // SendRoomMessage(pITargetUserItem, pszMessage, SMT_TABLE_EXIT);
- //
- // pITargetUserItem->SetUserStatus(US_NULL, INVALID_TABLE, INVALID_CHAIR);
- //
- // return true;
- //}
-
- //限制聊天
- //bool CAttemperEngineSink::OnTCPNetworkSubLimitUserChat(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验数据
- // ASSERT(wDataSize == sizeof(CMD_GR_LimitUserChat));
- // if (wDataSize != sizeof(CMD_GR_LimitUserChat)) return false;
- //
- // //消息处理
- // CMD_GR_LimitUserChat * pLimitUserChat = (CMD_GR_LimitUserChat *)pData;
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- // if (pIServerUserItem == NULL) return false;
- //
- // //目标用户
- // IServerUserItem * pITargerUserItem = m_ServerUserManager.SearchUserItem(pLimitUserChat->dwTargetUserID);
- // if (pITargerUserItem == NULL) return true;
- //
- // //变量定义
- // DWORD dwAddRight = 0, dwRemoveRight = 0;
- //
- // //大厅聊天
- // if (pLimitUserChat->cbLimitFlags == OSF_ROOM_CHAT)
- // {
- // if (CMasterRight::CanLimitRoomChat(pIServerUserItem->GetMasterRight()) == false) return false;
- //
- // if (pLimitUserChat->cbLimitValue == TRUE)
- // dwAddRight |= UR_CANNOT_ROOM_CHAT;
- // else
- // dwRemoveRight |= UR_CANNOT_ROOM_CHAT;
- // }
- //
- // //游戏聊天
- // if (pLimitUserChat->cbLimitFlags == OSF_GAME_CHAT)
- // {
- // if (CMasterRight::CanLimitGameChat(pIServerUserItem->GetMasterRight()) == false) return false;
- //
- // if (pLimitUserChat->cbLimitValue == TRUE)
- // dwAddRight |= UR_CANNOT_GAME_CHAT;
- // else
- // dwRemoveRight |= UR_CANNOT_GAME_CHAT;
- // }
- //
- // //大厅私聊
- // if (pLimitUserChat->cbLimitFlags == OSF_ROOM_WISPER)
- // {
- // if (CMasterRight::CanLimitWisper(pIServerUserItem->GetMasterRight()) == false) return false;
- //
- // if (pLimitUserChat->cbLimitValue == TRUE)
- // dwAddRight |= UR_CANNOT_WISPER;
- // else
- // dwRemoveRight |= UR_CANNOT_WISPER;
- // }
- //
- // //发送喇叭
- // if (pLimitUserChat->cbLimitFlags == OSF_SEND_BUGLE)
- // {
- // if (CMasterRight::CanLimitUserChat(pIServerUserItem->GetMasterRight()) == false) return false;
- //
- // if (pLimitUserChat->cbLimitValue == TRUE)
- // dwAddRight |= UR_CANNOT_BUGLE;
- // else
- // dwRemoveRight |= UR_CANNOT_BUGLE;
- // }
- //
- // if (dwAddRight != 0 || dwRemoveRight != 0)
- // {
- // pITargerUserItem->ModifyUserRight(dwAddRight, dwRemoveRight);
- //
- // //发送通知
- // CMD_GR_ConfigUserRight cur;
- // ZeroMemory(&cur, sizeof(cur));
- // cur.dwUserRight = pITargerUserItem->GetUserRight();
- //
- // SendData(pITargerUserItem, MDM_GR_CONFIG, SUB_GR_CONFIG_USER_RIGHT, &cur, sizeof(cur));
- //
- // //发送消息
- // SendRequestFailure(pIServerUserItem, TEXT("用户聊天权限配置成功!"), 0);
- // }
- // else return false;
- //
- // return true;
- //}
-
- //解散所有所有游戏中牌桌
- bool CAttemperEngineSink::OnTCPNetworkSubKickAllUser()
- {
- //消息处理
- //CMD_GR_KickAllUser * pKillAllUser = (CMD_GR_KickAllUser *)pData;
-
- //效验数据
- //ASSERT(wDataSize <= sizeof(CMD_GR_KickAllUser));
- //if (wDataSize > sizeof(CMD_GR_KickAllUser)) return false;
- //ASSERT(wDataSize == CountStringBuffer(pKillAllUser->szKickMessage));
- //if (wDataSize != CountStringBuffer(pKillAllUser->szKickMessage)) return false;
-
- //获取用户
- //WORD wBindIndex = LOWORD(dwSocketID);
- //IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //if (pIServerUserItem == NULL) return false;
-
- //权限判断
- //ASSERT(CMasterRight::CanKillUser(pIServerUserItem->GetMasterRight()) == true);
- //if (CMasterRight::CanKillUser(pIServerUserItem->GetMasterRight()) == false) return false;
-
- //解散所有游戏
- for (auto value : m_TableFrameArray)
- {
- auto pTableFrame = value.second;
- //获取桌子
- if (pTableFrame->GetStartCount() ==0 ) continue;
- pTableFrame->DismissGame();
- }
-
- //tagBindParameter *pBindParameter = m_pNormalParameter;
- //for( INT i = 0; i < m_pGameServiceOption->wMaxPlayer; i++ )
- //{
- // //目录用户
- // IServerUserItem * pITargerUserItem= pBindParameter->pIServerUserItem;
- // if (pITargerUserItem==NULL || pITargerUserItem==pIServerUserItem )
- // {
- // pBindParameter++;
- // continue;
- // }
-
- // //发送消息
- // SendRoomMessage(pITargerUserItem,pKillAllUser->szKickMessage,SMT_CHAT|SMT_EJECT|SMT_CLOSE_LINK|SMT_CLOSE_ROOM);
-
- // pBindParameter++;
- //}
-
- return true;
- }
-
- //发布消息
- bool CAttemperEngineSink::OnTCPNetworkSubSendMessage(VOID * pData, WORD wDataSize)
- {
- //获取用户
- //WORD wBindIndex = LOWORD(dwSocketID);
- //IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //if (pIServerUserItem == NULL) return false;
-
- //权限判断
- //ASSERT(CMasterRight::CanIssueMessage(pIServerUserItem->GetMasterRight()) == true);
- //if (CMasterRight::CanIssueMessage(pIServerUserItem->GetMasterRight()) == false) return false;
-
- //变量定义
- CMD_GR_SendMessage *pSysMessage = (CMD_GR_SendMessage *)pData;
-
- if (pSysMessage->cbLoop == TRUE)
- {
- //定于变量
- tagSystemMessage *pSendMessage = new tagSystemMessage;
- ZeroMemory(pSendMessage, sizeof(tagSystemMessage));
-
- //构造消息
- pSendMessage->dwLastTime = (DWORD)time(NULL);
- pSendMessage->SystemMessage.dwMessageID = TEMP_MESSAGE_ID;
- pSendMessage->SystemMessage.cbAllRoom = pSysMessage->cbAllRoom;
- if (pSysMessage->cbRoom == TRUE && pSysMessage->cbGame == TRUE)
- pSendMessage->SystemMessage.cbMessageType = 3;
- else if (pSysMessage->cbRoom == TRUE)
- pSendMessage->SystemMessage.cbMessageType = 2;
- else if (pSysMessage->cbGame == TRUE)
- pSendMessage->SystemMessage.cbMessageType = 1;
- pSendMessage->SystemMessage.dwTimeRate = pSysMessage->dwTimeRate;
- pSendMessage->SystemMessage.tStartTime = (DWORD)time(NULL);
- pSendMessage->SystemMessage.tConcludeTime = pSysMessage->tConcludeTime;
- lstrcpyn(pSendMessage->SystemMessage.szSystemMessage, pSysMessage->szSystemMessage, CountArray(pSendMessage->SystemMessage.szSystemMessage));
-
- //记录消息
- m_SystemMessageActive.Add(pSendMessage);
- }
-
- //消息处理
- return SendSystemMessage((CMD_GR_SendMessage *)pData, wDataSize);
- }
-
- //解散游戏
- bool CAttemperEngineSink::OnTCPNetworkSubDismissGame(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验数据
- ASSERT(wDataSize == sizeof(CMD_GR_DismissGame));
- if (wDataSize != sizeof(CMD_GR_DismissGame)) return false;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- //权限判断
- ASSERT(CMasterRight::CanDismissGame(pIServerUserItem->GetMasterRight()) == true);
- if (CMasterRight::CanDismissGame(pIServerUserItem->GetMasterRight()) == false) return false;
-
- //消息处理
- CMD_GR_DismissGame * pDismissGame = (CMD_GR_DismissGame *)pData;
-
- auto pTableFrame = GetTableFrame(pDismissGame->wDismissTableNum);
- if (!pTableFrame)
- return false;
- //解散游戏
- if (pTableFrame->IsGameStarted()) pTableFrame->DismissGame();
- //pTableFrame->SendGameMessage(TEXT("抱歉,此桌已被管理员解散游戏"), 0);
-
- //SetUserServerID(pIServerUserItem, 0);
-
- return true;
- }
-
- bool CAttemperEngineSink::OnTCPNetworkSubDeletePrivateTableReq(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_DELETE_PRIVATE_ROOM_REQ RoomReq;
- RoomReq.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_DELETE_PRIVATE_ROOM_REQ req;
- ZeroMemory(&req, sizeof(req));
- req.wTableID = RoomReq.wtableid();
- req.wChairID = RoomReq.wchairid();
- req.leftTime = RoomReq.lefttime();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- auto pTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (!pTableFrame)
- {
- SendRequestFailure(pIServerUserItem, TEXT("房间已被删除!"), 0);
- return true;
- }
-
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame != nullptr) pTableFrame->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (csTemp.IsEmpty()) {
- SendRequestFailure(pIServerUserItem,TEXT("不是好友房间,不能解散!"), 0);
- return true;
- }
-
- auto pUserItem = pTableFrame->GetTableUserItem(req.wChairID);
- if (pUserItem == NULL) {
- SendRequestFailure(pIServerUserItem, TEXT("您的座位号有误,不能解散!"), 0);
- return true;
- }
-
- if (pIServerUserItem->GetUserID() != pUserItem->GetUserID())
- {
- return true;
- }
-
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if (cbUserStatus != US_PLAYING && cbUserStatus != US_READY && cbUserStatus != US_SIT && cbUserStatus != US_PLAYINGWAIT)//用户判断
- {
- SendRequestFailure(pIServerUserItem, TEXT("您当前的状态不能申请解散!"), 0);
- return true;
- }
-
- pTableFrame->DeletePrivateTableReq(pIServerUserItem, req);
-
- pTableFrame->DeletePrivateTableResp(pIServerUserItem, 1, true);
- return true;
- }
-
- //删除私有房间
- bool CAttemperEngineSink::OnTCPNetworkSubDeletePrivateTableResp(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- UserInfo::PB_CS_C_DELETE_PRIVATE_ROOM_RESP RoomResp;
- RoomResp.ParseFromArray(pData, wDataSize);
-
- //处理消息
- CMD_GR_DELETE_PRIVATE_ROOM_RESP pDeleteResp;
- ZeroMemory(&pDeleteResp, sizeof(pDeleteResp));
- pDeleteResp.wTableID = RoomResp.wtableid();
- pDeleteResp.wChairID = RoomResp.wchairid();
- pDeleteResp.bAgree = RoomResp.bagree();
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- auto pTableFrame = GetTableFrame(pDeleteResp.wTableID);
- if (!pTableFrame)
- {
- //SendRequestFailure(pIServerUserItem, TEXT("房间已被删除!"), 0);
- return true;
- }
-
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame != nullptr) pTableFrame->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- if (csTemp.IsEmpty()) {
- SendRequestFailure(pIServerUserItem, TEXT("不是私有房间,不能删除!"), 0);
- return true;
- }
-
- auto pUserItem = pTableFrame->GetTableUserItem(pDeleteResp.wChairID);
- if (pUserItem == NULL) return false;
- if (pUserItem->GetUserID() != pIServerUserItem->GetUserID())
- return false;
-
- BYTE cbUserStatus = pIServerUserItem->GetUserStatus();
- if (cbUserStatus != US_PLAYING && cbUserStatus != US_READY && cbUserStatus != US_SIT && cbUserStatus != US_PLAYINGWAIT)//用户判断
- {
- SendRequestFailure(pIServerUserItem, TEXT("您当前的状态不能投票!"), 0);
- return true;
- }
-
- pTableFrame->DeletePrivateTableResp(pIServerUserItem, pDeleteResp.bAgree);
-
- return true;
- }
-
- //警告命令
- bool CAttemperEngineSink::OnTCPNetworkSubWarningUser(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验数据
- ASSERT(wDataSize == sizeof(CMD_GR_SendWarning));
- if (wDataSize != sizeof(CMD_GR_SendWarning)) return false;
-
- //提取数据
- CMD_GR_SendWarning * pSendWarning = (CMD_GR_SendWarning*)pData;
- ASSERT(pSendWarning != NULL);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- IServerUserItem * pITargetUserItem = m_ServerUserManager.SearchUserItem(pSendWarning->dwTargetUserID);
- if (pITargetUserItem == NULL) return true;
-
- //权限判断
- ASSERT(CMasterRight::CanSendWarning(pIServerUserItem->GetMasterRight()) == true);
- if (CMasterRight::CanSendWarning(pIServerUserItem->GetMasterRight()) == false) return false;
-
- //权限判断
- ASSERT(pIServerUserItem->GetMasterOrder() > pITargetUserItem->GetMasterOrder());
- if (pIServerUserItem->GetMasterOrder() < pITargetUserItem->GetMasterOrder()) return false;
-
- //发送警告
- TCHAR szMessage[128] = TEXT("");
- _sntprintf(szMessage, CountArray(szMessage), TEXT("警告:%s"), pSendWarning->szWarningMessage);
- SendRequestFailure(pITargetUserItem, szMessage, 0);
-
- return true;
- }
-
- //用户登录
- VOID CAttemperEngineSink::OnEventUserLogon(IServerUserItem * pIServerUserItem, bool bAlreadyOnLine)
- {
- CTraceService::TraceString(TEXT("用户登录 OnEventUserLogon"), TraceLevel_Debug);
-
- //获取参数
- WORD wBindIndex = pIServerUserItem->GetBindIndex();
- bool bAndroidUser = pIServerUserItem->IsAndroidUser();
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- /*if (pIServerUserItem->GetUserStatus() == US_LOOKON)
- {
- pIServerUserItem->SetUserStatus(US_FREE, INVALID_TABLE, INVALID_CHAIR, true);
- }*/
-
- //玩家获取自己的数据
- SendViewTableUserInfoPacketToMobileUser(pIServerUserItem, pIServerUserItem->GetUserID());
-
-
- TurntableLogon::PB_CS_S_LogonSuccess Success;
-
- //发送数据
- std::string pbdata = Success.SerializePartialAsString();
-
- SendData(pBindParameter->dwSocketID, MDM_GR_LOGON, SUB_GR_LOGON_FINISH, (void*)pbdata.c_str(), pbdata.length());
-
-
- //立即登录
- if (pIServerUserItem->GetTableID() == INVALID_TABLE)
- {
- WORD wMobileUserRule = pIServerUserItem->GetMobileUserRule();
- if ((wMobileUserRule&BEHAVIOR_LOGON_IMMEDIATELY) != 0)
- {
- MobileUserImmediately(pIServerUserItem);
- }
- else
- {
- SendViewTableUserInfoPacketToMobileUser(pIServerUserItem, INVALID_CHAIR);
- }
-
- m_Data.dLoginQOK++;
- pIServerUserItem->SetClientReady(true);
- }
- else
- {
- //断线重连
- auto pTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (pTableFrame)
- {
- bool bRet = pTableFrame->OnEventUserOnLine(pIServerUserItem);
-
- if (!bRet)
- {
- CString csTestB;
- csTestB.Format(_T("断线重练失败 -> 原因:OnEventUserOnLine调用失败, 用户ID:%d,桌号:%d,状态:%d chairID=%d"), pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID
- , pIServerUserItem->GetUserInfo()->cbUserStatus,
- pIServerUserItem->GetChairID());
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
- }
- else{
- m_Data.dLoginDuanXianOK++;
- }
-
- }
- else
- {
- CString csTestB;
- csTestB.Format(_T("断线重练失败 -> 原因:桌号实体不存在, 用户ID:%d,桌号:%d,状态:%d"), pIServerUserItem->GetUserID()
- , pIServerUserItem->GetUserInfo()->wTableID
- , pIServerUserItem->GetUserInfo()->cbUserStatus);
-
- CTraceService::TraceString(csTestB, TraceLevel_Normal);
-
- ///+++2017-11-24
- pIServerUserItem->SetUserStatus(US_FREE, INVALID_TABLE, INVALID_CHAIR, false);
- }
- }
- //}
-
- //网络设置
- if (bAndroidUser == false)
- {
- if (pBindParameter->cbClientKind == CLIENT_KIND_MOBILE)
- {
- m_pITCPNetworkEngine->AllowBatchSend(pBindParameter->dwSocketID, true, BG_MOBILE);
- }
- else
- {
- m_pITCPNetworkEngine->AllowBatchSend(pBindParameter->dwSocketID, true, BG_COMPUTER);
- }
- }
-
- //登录通知
- //if (m_pIMatchServiceManager != NULL) m_pIMatchServiceManager->OnEventUserLogon(pIServerUserItem);
-
- return;
- }
-
- //用户离开
- VOID CAttemperEngineSink::OnEventUserLogout(IServerUserItem * pIServerUserItem, DWORD dwLeaveReason)
- {
- //变量定义
- DBR_GR_LeaveGameServer LeaveGameServer;
- ZeroMemory(&LeaveGameServer, sizeof(LeaveGameServer));
-
- //提取成绩
- pIServerUserItem->QueryRecordInfo(LeaveGameServer.RecordInfo);
- pIServerUserItem->DistillVariation(LeaveGameServer.VariationInfo);
-
- //用户信息
- LeaveGameServer.dwLeaveReason = dwLeaveReason;
- LeaveGameServer.dwUserID = pIServerUserItem->GetUserID();
- LeaveGameServer.dwInoutIndex = pIServerUserItem->GetInoutIndex();
- LeaveGameServer.dwOnLineTimeCount = (DWORD)(time(NULL)) - pIServerUserItem->GetLogonTime();
-
- //连接信息
- LeaveGameServer.dwClientAddr = pIServerUserItem->GetClientAddr();
- lstrcpyn(LeaveGameServer.szMachineID, pIServerUserItem->GetMachineID(), CountArray(LeaveGameServer.szMachineID));
-
- //投递请求
- //m_pIDBCorrespondManager->PostDataBaseRequest(pIServerUserItem->GetUserID(), DBR_GR_LEAVE_GAME_SERVER, 0L, &LeaveGameServer, sizeof(LeaveGameServer), TRUE);
-
- //查找对象
- //tagUserTaskEntry * pUserTaskEntry = m_UserTaskManager.GetUserTaskEntry(pIServerUserItem->GetUserID(), TASK_STATUS_UNFINISH | TASK_STATUS_FAILED);
-
- //推进任务
- //if (pUserTaskEntry != NULL)
- //{
- // PerformTaskProgress(pIServerUserItem, pUserTaskEntry, LeaveGameServer.VariationInfo.dwWinCount, LeaveGameServer.VariationInfo.dwLostCount, LeaveGameServer.VariationInfo.dwDrawCount);
- //}
-
- //汇总用户
- if (m_bCollectUser == true)
- {
- //变量定义
- CMD_CS_C_UserLeave UserLeave;
- ZeroMemory(&UserLeave, sizeof(UserLeave));
-
- //设置变量
- UserLeave.dwUserID = pIServerUserItem->GetUserID();
-
- /*DWORD dTableNum = 0;*/
- if (pIServerUserItem && pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- auto pat = GetTableFrame(pIServerUserItem->GetTableID());
-
- TCHAR szTemp[32] = { 0 };
- if (pat != nullptr) pat->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- /*if (!csTemp.IsEmpty())
- {
- dTableNum = _wtol(szTemp);
- }*/
- }
- //发送消息
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_USER_LEAVE, &UserLeave, sizeof(UserLeave)/*, dTableNum, pIServerUserItem->GetUserID(), m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
- }
-
- //玩家退赛
- //if (m_pIMatchServiceManager != NULL)
- //{
- // m_pIMatchServiceManager->OnEventUserQuitMatch(pIServerUserItem, 0);
- //}
-
- //删除分组
- DeleteDistribute(pIServerUserItem);
-
- //移除任务
- //m_UserTaskManager.RemoveUserTask(pIServerUserItem->GetUserID());
-
- //删除用户
- m_ServerUserManager.DeleteUserItem(pIServerUserItem);
-
- //登出通知
- //if (m_pIMatchServiceManager != NULL) m_pIMatchServiceManager->OnEventUserLogout(pIServerUserItem);
-
- return;
- }
-
- //解锁游戏币
- bool CAttemperEngineSink::PerformUnlockScore(DWORD dwUserID, DWORD dwInoutIndex, DWORD dwLeaveReason)
- {
- return true;
- ////变量定义
- //DBR_GR_LeaveGameServer LeaveGameServer;
- //ZeroMemory(&LeaveGameServer, sizeof(LeaveGameServer));
-
- ////设置变量
- //LeaveGameServer.dwUserID = dwUserID;
- //LeaveGameServer.dwInoutIndex = dwInoutIndex;
- //LeaveGameServer.dwLeaveReason = dwLeaveReason;
-
- ////投递请求
- ////m_pIDBCorrespondManager->PostDataBaseRequest(dwUserID, DBR_GR_LEAVE_GAME_SERVER, 0L, &LeaveGameServer, sizeof(LeaveGameServer));
-
- //return true;
- }
-
- //推进任务
- bool CAttemperEngineSink::PerformTaskProgress(IServerUserItem * pIServerUserItem, tagUserTaskEntry * pUserTaskEntry, DWORD dwWinCount, DWORD dwLostCount, DWORD dwDrawCount)
- {
- //参数校验
- ASSERT(pIServerUserItem != NULL && pUserTaskEntry != NULL);
- if (pIServerUserItem == NULL || pUserTaskEntry == NULL) return false;
-
- //状态校验
- if (pUserTaskEntry->pTaskParameter == NULL) return true;
- if (pUserTaskEntry->cbTaskStatus != TASK_STATUS_UNFINISH) return true;
- if (pUserTaskEntry->pTaskParameter->wKindID != m_pGameServiceOption->wKindID) return true;
-
- //任务参数
- tagTaskParameter * pTaskParameter = pUserTaskEntry->pTaskParameter;
-
- //获取时间
- DWORD dwSpanSecond = (DWORD)time(NULL) - pUserTaskEntry->dwLastUpdateTime;
- dwSpanSecond = __min(dwSpanSecond, pUserTaskEntry->dwResidueTime);
-
- //更新时间
- pUserTaskEntry->dwResidueTime -= dwSpanSecond;
- pUserTaskEntry->dwLastUpdateTime = (DWORD)time(NULL);
-
- //任务超时
- if (pUserTaskEntry->dwResidueTime == 0)
- {
- pUserTaskEntry->wTaskProgress = 0;
- pUserTaskEntry->pTaskParameter = NULL;
- pUserTaskEntry->cbTaskStatus = TASK_STATUS_FAILED;
- }
-
- //任务未完成
- if (pUserTaskEntry->cbTaskStatus == TASK_STATUS_UNFINISH)
- {
- //任务类型
- switch (pTaskParameter->wTaskType)
- {
- case TASK_TYPE_WIN_INNINGS: //赢局任务
- {
- //更新状态
- pUserTaskEntry->wTaskProgress += dwWinCount;
- if (pUserTaskEntry->wTaskProgress >= pTaskParameter->wTaskObject)
- {
- pUserTaskEntry->cbTaskStatus = TASK_STATUS_SUCCESS;
- }
-
- break;
- };
- case TASK_TYPE_SUM_INNINGS: //总局任务
- {
- //更新状态
- pUserTaskEntry->wTaskProgress += dwWinCount + dwLostCount + dwDrawCount;
- if (pUserTaskEntry->wTaskProgress >= pTaskParameter->wTaskObject)
- {
- pUserTaskEntry->cbTaskStatus = TASK_STATUS_SUCCESS;
- }
- break;
- };
- case TASK_TYPE_FIRST_WIN: //首胜任务
- {
- //更新状态
- pUserTaskEntry->wTaskProgress = dwWinCount;
- if (pUserTaskEntry->wTaskProgress == pTaskParameter->wTaskObject)
- {
- pUserTaskEntry->cbTaskStatus = TASK_STATUS_SUCCESS;
- }
- else
- {
- pUserTaskEntry->cbTaskStatus = TASK_STATUS_FAILED;
- }
-
- break;
- };
- case TASK_TYPE_JOIN_MATCH: //比赛任务
- {
- break;
- };
- default:
- {
- ASSERT(FALSE);
- break;
- };
- }
- }
-
- //任务完成
- //if (pUserTaskEntry->cbTaskStatus == TASK_STATUS_SUCCESS)
- //{
- // //构造结构
- // CMD_GR_S_TaskFinish TaskFinish;
- // TaskFinish.wFinishTaskID = pTaskParameter->wTaskID;
- // lstrcpyn(TaskFinish.szTaskName, pTaskParameter->szTaskName, CountArray(TaskFinish.szTaskName));
-
- // //发送消息
- // WORD wHeadSize = sizeof(TaskFinish) - sizeof(TaskFinish.szTaskName);
- // WORD wDataSize = wHeadSize + CountStringBuffer(TaskFinish.szTaskName);
- // SendData(pIServerUserItem, MDM_GR_TASK, SUB_GR_TASK_FINISH, &TaskFinish, wDataSize);
- //}
-
- //递归调用
- if (pUserTaskEntry->pNextTaskEntry != NULL)
- {
- PerformTaskProgress(pIServerUserItem, pUserTaskEntry->pNextStatusEntry, dwWinCount, dwLostCount, dwDrawCount);
- }
-
- return true;
- }
-
- //版本检查
- bool CAttemperEngineSink::PerformCheckVersion(DWORD dwPlazaVersion, DWORD dwFrameVersion, DWORD dwClientVersion, DWORD dwSocketID)
- {
- //变量定义
- bool bMustUpdateClient = false;
- bool bAdviceUpdateClient = false;
-
- //游戏版本
- //if (VERSION_EFFICACY == TRUE)
- //{
- // if (GetSubVer(dwClientVersion) < GetSubVer(m_pGameServiceAttrib->dwClientVersion)) bAdviceUpdateClient = true;
- // if (GetMainVer(dwClientVersion) != GetMainVer(m_pGameServiceAttrib->dwClientVersion)) bMustUpdateClient = true;
- // if (GetProductVer(dwClientVersion) != GetProductVer(m_pGameServiceAttrib->dwClientVersion)) bMustUpdateClient = true;
- //}
- //else
- {
- if (GetSubVer(dwClientVersion) < GetSubVer(m_pGameParameter->dwClientVersion)) bAdviceUpdateClient = true;
- if (GetMainVer(dwClientVersion) != GetMainVer(m_pGameParameter->dwClientVersion)) bMustUpdateClient = true;
- if (GetProductVer(dwClientVersion) != GetProductVer(m_pGameParameter->dwClientVersion)) bMustUpdateClient = true;
- }
-
- //更新通知
- if ((bMustUpdateClient == true) || (bAdviceUpdateClient == true))
- {
- //变量定义
- CMD_GR_UpdateNotify UpdateNotify;
- ZeroMemory(&UpdateNotify, sizeof(UpdateNotify));
-
- //变量定义
- UpdateNotify.cbMustUpdatePlaza = false;
- UpdateNotify.cbMustUpdateClient = bMustUpdateClient;
- UpdateNotify.cbAdviceUpdateClient = bAdviceUpdateClient;
-
- //当前版本
- UpdateNotify.dwCurrentPlazaVersion = VERSION_PLAZA;
- UpdateNotify.dwCurrentFrameVersion = VERSION_FRAME;
- UpdateNotify.dwCurrentClientVersion = m_pGameServiceAttrib->dwClientVersion;
-
- //发送消息
- SendData(dwSocketID, MDM_GR_LOGON, SUB_GR_UPDATE_NOTIFY, &UpdateNotify, sizeof(UpdateNotify));
-
- //中止判断
- if (bMustUpdateClient == true)
- {
- m_pITCPNetworkEngine->ShutDownSocket(dwSocketID);
- return false;
- }
- }
-
- return true;
- }
-
- //切换连接
- bool CAttemperEngineSink::SwitchUserItemConnect(IServerUserItem * pIServerUserItem, TCHAR szMachineID[LEN_MACHINE_ID], WORD wTargetIndex, BYTE cbDeviceType, WORD wBehaviorFlags, WORD wPageTableCount)
- {
- //效验参数
- ASSERT((pIServerUserItem != NULL) && (wTargetIndex != INVALID_WORD));
- if ((pIServerUserItem == NULL) || (wTargetIndex == INVALID_WORD))
- {
- //CTraceService::TraceString(TEXT("登录失败,切换链接校验失败。"), TraceLevel_Normal);
- return false;
- }
-
- //断开用户
- if (pIServerUserItem->GetBindIndex() != INVALID_WORD)
- {
- // by jn 此次修改存在风险,属于尝试性修改。稍后观察是否有其他风险 2017/08/21
- // pIServerUserItem->DetachBindStatus(); //强制解绑
-
- //发送通知
- LPCTSTR pszMessage = TEXT("网络连接不稳定,请重试.");
- SendRoomMessage(pIServerUserItem, pszMessage, SMT_CLOSE_SEND);
-
- //绑定参数
- WORD wSourceIndex = pIServerUserItem->GetBindIndex();
- tagBindParameter * pSourceParameter = GetBindParameter(wSourceIndex);
-
- //解除绑定
- ASSERT((pSourceParameter != NULL) && (pSourceParameter->pIServerUserItem == pIServerUserItem));
- if ((pSourceParameter != NULL) && (pSourceParameter->pIServerUserItem == pIServerUserItem))
- {
- pSourceParameter->pIServerUserItem = NULL;
- }
-
- //断开用户
- if (pIServerUserItem->IsAndroidUser() == true)
- {
- //m_AndroidUserManager.DeleteAndroidUserItem(pSourceParameter->dwSocketID, true);
- }
- else
- {
- m_pITCPNetworkEngine->ShutDownSocket(pSourceParameter->dwSocketID);
- }
- }
-
- //变量定义
- bool bAndroidUser = (wTargetIndex >= INDEX_ANDROID);
- tagBindParameter * pTargetParameter = GetBindParameter(wTargetIndex);
-
- //激活用户
- pTargetParameter->pIServerUserItem = pIServerUserItem;
- pIServerUserItem->SetUserParameter(pTargetParameter->dwClientAddr, wTargetIndex, szMachineID, bAndroidUser, false);
-
- if (pIServerUserItem->GetUserStatus() == US_OFFLINE)
- {
- //变量定义
- WORD wTableID = pIServerUserItem->GetTableID();
- WORD wChairID = pIServerUserItem->GetChairID();
-
- pIServerUserItem->SetUserStatus(US_PLAYING, wTableID, wChairID);
- }
-
- //手机标识
- if (pTargetParameter->cbClientKind == CLIENT_KIND_MOBILE)
- {
- pIServerUserItem->SetMobileUser(true);
- SetMobileUserParameter(pIServerUserItem, cbDeviceType, wBehaviorFlags, wPageTableCount);
- }
-
- //取消托管
- if (m_pGameServiceOption->wServerType == GAME_GENRE_MATCH)
- {
- if (pIServerUserItem->IsTrusteeUser() == true && pIServerUserItem->GetUserStatus() != US_PLAYING)
- {
- pIServerUserItem->SetTrusteeUser(false);
- }
- }
-
-
- if (IsJC(7777))
- {
- TCHAR szString[512] = TEXT("");
- _sntprintf(szString, CountArray(szString), TEXT("用户 %s(%d) 切换连接登录"), pIServerUserItem->GetUserInfo()->szNickName, pIServerUserItem->GetUserInfo()->dwUserID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
- }
-
- //2018.7.2 奚志远 解决大退房间列表不见了
- DWORD dwUserID = pIServerUserItem->GetUserID();
- auto iter = m_UserID_2_PriTableIDGROUP.find(dwUserID);
- if (iter == m_UserID_2_PriTableIDGROUP.end())
- {
- JN_GR_RoomListGroup Temp;
- ZeroMemory(&Temp, sizeof(Temp));
-
- std::pair<DWORD, JN_GR_RoomListGroup> Sub(dwUserID, Temp);
- m_UserID_2_PriTableIDGROUP.insert(Sub);
-
- UserInfo::PB_CS_S_RoomListGroupSend GroupSend;
- for (WORD i = 0; i < Temp.Num; i++)
- {
- if (Temp.jgrDate[i].dwRoomNumber == 0)break;
- UserInfo::PB_CS_S_RoomList* RoomList = GroupSend.add_jgrdate();
- RoomList->set_dwuserid(Temp.jgrDate[i].dwUserID);
- RoomList->set_dwserverid(Temp.jgrDate[i].dwServerID);
- RoomList->set_dwroomnumber(Temp.jgrDate[i].dwRoomNumber);
- RoomList->set_dwinsert_updata_del(Temp.jgrDate[i].dwInsert_UpData_Del);
- RoomList->set_dwdifen(Temp.jgrDate[i].dwDiFen);
- RoomList->set_dwjushu(Temp.jgrDate[i].dwJuShu);
- RoomList->set_dwreadybody(Temp.jgrDate[i].dwReadyBody);
- RoomList->set_dwbody(Temp.jgrDate[i].dwBody);
- RoomList->set_bwanfa(Temp.jgrDate[i].bWanFa);
- std::string szIp = CW2AEX<1024>(Temp.jgrDate[i].szIp, CP_UTF8).m_psz;
- RoomList->set_szip(szIp);
- RoomList->set_bduolai(Temp.jgrDate[i].bDuoLai);
- RoomList->set_wfengding(Temp.jgrDate[i].wFengDing);
- RoomList->set_tmp1(Temp.jgrDate[i].tmp1);
- RoomList->set_tmp2(Temp.jgrDate[i].tmp2);
- RoomList->set_tmp3(Temp.jgrDate[i].tmp3);
- RoomList->set_tmp4(Temp.jgrDate[i].tmp4);
- RoomList->set_tmp5(Temp.jgrDate[i].tmp5);
- for (WORD i = 0; i < 4; i++)
- {
- RoomList->add_tmp6(Temp.jgrDate[i].tmp6[i]);
- }
- RoomList->set_wport(Temp.jgrDate[i].wPort);
- }
- GroupSend.set_num(Temp.Num);
- //发送数据
- std::string pbdata = GroupSend.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ALL, (void*)pbdata.c_str(), pbdata.length());
- }
- else
- {
- JN_GR_RoomListGroupSend Temp;
- ZeroMemory(&Temp, sizeof(JN_GR_RoomListGroupSend));
-
- for (int i = 0; i < m_UserID_2_PriTableIDGROUP[dwUserID].Num; i++)
- {
- CopyMemory(&(Temp.jgrDate[i]), &(m_UserID_2_PriTableIDGROUP[dwUserID].jgrDate[i]), sizeof(JN_GR_RoomList));
-
- //纠正
- Temp.jgrDate[i].tmp1 = m_UserID_2_PriTableIDGROUP[dwUserID].jgrDate[i].bRoomCreatePay;
- Temp.jgrDate[i].tmp2 = m_UserID_2_PriTableIDGROUP[dwUserID].jgrDate[i].tmp1;
- Temp.jgrDate[i].tmp3 = m_UserID_2_PriTableIDGROUP[dwUserID].jgrDate[i].tmp2;
- }
- UserInfo::PB_CS_S_RoomListGroupSend GroupSend;
- for (WORD i = 0; i < m_UserID_2_PriTableIDGROUP[dwUserID].Num; i++)
- {
- if (Temp.jgrDate[i].dwRoomNumber == 0)break;
- UserInfo::PB_CS_S_RoomList* RoomList = GroupSend.add_jgrdate();
- RoomList->set_dwuserid(Temp.jgrDate[i].dwUserID);
- RoomList->set_dwserverid(Temp.jgrDate[i].dwServerID);
- RoomList->set_dwroomnumber(Temp.jgrDate[i].dwRoomNumber);
- RoomList->set_dwinsert_updata_del(Temp.jgrDate[i].dwInsert_UpData_Del);
- RoomList->set_dwdifen(Temp.jgrDate[i].dwDiFen);
- RoomList->set_dwjushu(Temp.jgrDate[i].dwJuShu);
- RoomList->set_dwreadybody(Temp.jgrDate[i].dwReadyBody);
- RoomList->set_dwbody(Temp.jgrDate[i].dwBody);
- RoomList->set_bwanfa(Temp.jgrDate[i].bWanFa);
- std::string szIp = CW2AEX<1024>(Temp.jgrDate[i].szIp, CP_UTF8).m_psz;
- RoomList->set_szip(szIp);
- RoomList->set_bduolai(Temp.jgrDate[i].bDuoLai);
- RoomList->set_wfengding(Temp.jgrDate[i].wFengDing);
- RoomList->set_tmp1(Temp.jgrDate[i].tmp1);
- RoomList->set_tmp2(Temp.jgrDate[i].tmp2);
- RoomList->set_tmp3(Temp.jgrDate[i].tmp3);
- RoomList->set_tmp4(Temp.jgrDate[i].tmp4);
- RoomList->set_tmp5(Temp.jgrDate[i].tmp5);
- for (WORD i = 0; i < 4; i++)
- {
- RoomList->add_tmp6(Temp.jgrDate[i].tmp6[i]);
- }
- RoomList->set_wport(Temp.jgrDate[i].wPort);
- }
- GroupSend.set_num(m_UserID_2_PriTableIDGROUP[dwUserID].Num);
- //发送数据
- std::string pbdata = GroupSend.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ALL, (void*)pbdata.c_str(), pbdata.length());
- }
-
-
- //提示消息
- //CTraceService::TraceString(szString, TraceLevel_Normal);
-
- //登录事件
- OnEventUserLogon(pIServerUserItem, true);
-
- //安全提示
- //if ((bAndroidUser == false) && (bIsOffLine == false) && (bSameMachineID == false))
- //{
- // SendRoomMessage(pIServerUserItem, TEXT("请注意,您的帐号在另一地方进入了此游戏房间,对方被迫离开!"), SMT_CLOSE_SEND);
- //}
-
- return true;
- }
-
- //登录失败
- bool CAttemperEngineSink::SendLogonFailure(LPCTSTR pszString, LONG lErrorCode, DWORD dwSocketID)
- {
- CTraceService::TraceString(TEXT("登录失败 SendLogonFailure"), TraceLevel_Exception);
- //变量定义
-
- TurntableLogon::PB_CS_S_LogonFailure Failure;
- Failure.set_lerrorcode(lErrorCode);
- std::string szDescribeString = CW2AEX<1024>(pszString, CP_UTF8).m_psz;
- Failure.set_szdescribestring(szDescribeString);
- //发送数据
- std::string pbdata = Failure.SerializePartialAsString();
-
- SendData(dwSocketID, MDM_GR_LOGON, SUB_M_LOGON_FAILURE, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- //银行失败
- //bool CAttemperEngineSink::SendInsureFailure(IServerUserItem * pIServerUserItem, LPCTSTR pszString, LONG lErrorCode, BYTE cbActivityGame)
- //{
- // CTraceService::TraceString(TEXT("银行失败 SendInsureFailure"), TraceLevel_Debug);
- // //效验参数
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL) return false;
- //
- // //变量定义
- // CMD_GR_S_UserInsureFailure UserInsureFailure;
- // ZeroMemory(&UserInsureFailure, sizeof(UserInsureFailure));
- //
- // //构造数据
- // UserInsureFailure.cbActivityGame = cbActivityGame;
- // UserInsureFailure.lErrorCode = lErrorCode;
- // lstrcpyn(UserInsureFailure.szDescribeString, pszString, CountArray(UserInsureFailure.szDescribeString));
- //
- // //数据属性
- // WORD wDataSize = CountStringBuffer(UserInsureFailure.szDescribeString);
- // WORD wHeadSize = sizeof(UserInsureFailure) - sizeof(UserInsureFailure.szDescribeString);
- //
- // //发送数据
- // SendData(pIServerUserItem, MDM_GR_INSURE, SUB_GR_USER_INSURE_FAILURE, &UserInsureFailure, wHeadSize + wDataSize);
- //
- // return true;
- //}
-
- //请求失败
- bool CAttemperEngineSink::SendRequestFailure(IServerUserItem * pIServerUserItem, LPCTSTR pszDescribe, LONG lErrorCode)
- {
- CTraceService::TraceString(TEXT("请求失败 SendRequestFailure"), TraceLevel_Debug);
- //变量定义
- CMD_GR_RequestFailure RequestFailure;
- ZeroMemory(&RequestFailure, sizeof(RequestFailure));
-
- //设置变量
- RequestFailure.lErrorCode = lErrorCode;
- lstrcpyn(RequestFailure.szDescribeString, pszDescribe, CountArray(RequestFailure.szDescribeString));
-
- UserInfo::PB_CS_S_RequestFailure Failure;
- Failure.set_lerrorcode(RequestFailure.lErrorCode);
- std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
- Failure.set_szdescribestring(szDescribeString);
- //发送数据
- std::string pbdata = Failure.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- //道具失败
- //bool CAttemperEngineSink::SendPropertyFailure(IServerUserItem * pIServerUserItem, LPCTSTR pszDescribe, LONG lErrorCode, WORD wRequestArea)
- //{
- // //变量定义
- // CMD_GR_PropertyFailure PropertyFailure;
- // ZeroMemory(&PropertyFailure, sizeof(PropertyFailure));
- //
- // //设置变量
- // PropertyFailure.lErrorCode = lErrorCode;
- // PropertyFailure.wRequestArea = wRequestArea;
- // lstrcpyn(PropertyFailure.szDescribeString, pszDescribe, CountArray(PropertyFailure.szDescribeString));
- //
- // //发送数据
- // WORD wDataSize = CountStringBuffer(PropertyFailure.szDescribeString);
- // WORD wHeadSize = sizeof(PropertyFailure) - sizeof(PropertyFailure.szDescribeString);
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_PROPERTY_FAILURE, &PropertyFailure, wHeadSize + wDataSize);
- //
- // return true;
- //}
-
- //发送用户
- bool CAttemperEngineSink::SendUserInfoPacket(IServerUserItem * pIServerUserItem, DWORD dwSocketID, bool bSendAndroidFalg)
- {
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //变量定义
- BYTE cbBuffer[SOCKET_TCP_PACKET];
- tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
- tagUserInfoHead * pUserInfoHead = (tagUserInfoHead *)cbBuffer;
- CSendPacketHelper SendPacket(cbBuffer + sizeof(tagUserInfoHead), sizeof(cbBuffer) - sizeof(tagUserInfoHead));
-
- //用户属性
- pUserInfoHead->wFaceID = pUserInfo->wFaceID;
- pUserInfoHead->dwGameID = pUserInfo->dwGameID;
- pUserInfoHead->dwUserID = pUserInfo->dwUserID;
- pUserInfoHead->dwGroupID = pUserInfo->dwGroupID;
- pUserInfoHead->dwCustomID = pUserInfo->dwCustomID;
-
- //用户属性
- pUserInfoHead->cbGender = pUserInfo->cbGender;
- pUserInfoHead->cbMemberOrder = pUserInfo->cbMemberOrder;
- pUserInfoHead->cbMasterOrder = pUserInfo->cbMasterOrder;
- pUserInfoHead->bIsAndroid = pIServerUserItem->IsAndroidUser() && bSendAndroidFalg;
-
- //用户状态
- pUserInfoHead->wTableID = pUserInfo->wTableID;
- pUserInfoHead->wChairID = pUserInfo->wChairID;
- pUserInfoHead->cbUserStatus = pUserInfo->cbUserStatus;
-
- //用户局数
- pUserInfoHead->dwWinCount = pUserInfo->dwWinCount;
- pUserInfoHead->dwLostCount = pUserInfo->dwLostCount;
- pUserInfoHead->dwDrawCount = pUserInfo->dwDrawCount;
- pUserInfoHead->dwFleeCount = pUserInfo->dwFleeCount;
- pUserInfoHead->dwExperience = pUserInfo->dwExperience;
- pUserInfoHead->lLoveLiness = pUserInfo->lLoveLiness;
-
- //用户积分
- pUserInfoHead->lGrade = pUserInfo->lGrade;
- pUserInfoHead->lInsure = pUserInfo->lInsure;
- pUserInfoHead->lIngot = 0;
-
- //用户成绩
- pUserInfoHead->lScore = pUserInfo->lScore;
- pUserInfoHead->lScore += pIServerUserItem->GetTrusteeScore();
- pUserInfoHead->lScore += pIServerUserItem->GetFrozenedScore();
-
- //叠加信息
- SendPacket.AddPacket(pUserInfo->szNickName, DTP_GR_NICK_NAME);
- SendPacket.AddPacket(pUserInfo->szGroupName, DTP_GR_GROUP_NAME);
- SendPacket.AddPacket(pUserInfo->szUnderWrite, DTP_GR_UNDER_WRITE);
-
- //发送数据
- if (dwSocketID == INVALID_DWORD)
- {
- WORD wHeadSize = sizeof(tagUserInfoHead);
- SendData(BG_COMPUTER, MDM_GR_USER, SUB_GR_USER_ENTER, cbBuffer, wHeadSize + SendPacket.GetDataSize());
- SendUserInfoPacketBatchToMobileUser(pIServerUserItem);
- }
- else
- {
- WORD wHeadSize = sizeof(tagUserInfoHead);
- SendData(dwSocketID, MDM_GR_USER, SUB_GR_USER_ENTER, cbBuffer, wHeadSize + SendPacket.GetDataSize());
- }
-
- return true;
- }
-
- ////广播道具
- //bool CAttemperEngineSink::SendPropertyMessage(DWORD dwSourceID, DWORD dwTargerID, WORD wPropertyIndex, WORD wPropertyCount)
- //{
- // //构造结构
- // CMD_GR_S_PropertyMessage PropertyMessage;
- // PropertyMessage.wPropertyIndex = wPropertyIndex;
- // PropertyMessage.dwSourceUserID = dwSourceID;
- // PropertyMessage.dwTargerUserID = dwTargerID;
- // PropertyMessage.wPropertyCount = wPropertyCount;
- //
- // //在线用户
- // WORD wUserIndex = 0;
- // while (true)
- // {
- // IServerUserItem * pIServerUserItemSend = m_ServerUserManager.EnumUserItem(wUserIndex++);
- // if (pIServerUserItemSend == NULL) break;
- // SendData(pIServerUserItemSend, MDM_GR_USER, SUB_GR_PROPERTY_MESSAGE, &PropertyMessage, sizeof(PropertyMessage));
- // }
- //
- // return true;
- //}
-
- //道具效应
- //bool CAttemperEngineSink::SendPropertyEffect(IServerUserItem * pIServerUserItem)
- //{
- // //参数校验
- // if (pIServerUserItem == NULL) return false;
- //
- // //构造结构
- // CMD_GR_S_PropertyEffect PropertyEffect;
- // PropertyEffect.wUserID = pIServerUserItem->GetUserID();
- // PropertyEffect.cbMemberOrder = pIServerUserItem->GetMemberOrder();
- //
- // //在线用户
- // WORD wUserIndex = 0;
- // while (true)
- // {
- // IServerUserItem * pIServerUserItemSend = m_ServerUserManager.EnumUserItem(wUserIndex++);
- // if (pIServerUserItemSend == NULL) break;
- // SendData(pIServerUserItemSend, MDM_GR_USER, SUB_GR_PROPERTY_EFFECT, &PropertyEffect, sizeof(PropertyEffect));
- // }
- //
- // return true;
- //}
-
- //道具事件
- //bool CAttemperEngineSink::OnEventPropertyBuyPrep(WORD cbRequestArea, WORD wPropertyIndex, IServerUserItem *pISourceUserItem, IServerUserItem *pTargetUserItem)
- //{
- // //目标玩家
- // if (pTargetUserItem == NULL)
- // {
- // //发送消息
- // SendPropertyFailure(pISourceUserItem, TEXT("赠送失败,您要赠送的玩家已经离开!"), 0L, cbRequestArea);
- //
- // return false;
- // }
- //
- // //房间判断
- // if ((m_pGameServiceOption->wServerType == GAME_GENRE_GOLD || m_pGameServiceOption->wServerType == GAME_GENRE_MATCH) &&
- // (wPropertyIndex == PROPERTY_ID_SCORE_CLEAR || wPropertyIndex == PROPERTY_ID_TWO_CARD || wPropertyIndex == PROPERTY_ID_FOUR_CARD || wPropertyIndex == PROPERTY_ID_POSSESS))
- // {
- // //发送消息
- // SendPropertyFailure(pISourceUserItem, TEXT("此房间不可以使用此道具,购买失败"), 0L, cbRequestArea);
- //
- // return false;
- // }
- //
- // //查找道具
- // tagPropertyInfo * pPropertyInfo = m_GamePropertyManager.SearchPropertyItem(wPropertyIndex);
- //
- // //有效效验
- // if (pPropertyInfo == NULL)
- // {
- // //发送消息
- // SendPropertyFailure(pISourceUserItem, TEXT("此道具还未启用,购买失败!"), 0L, cbRequestArea);
- //
- // return false;
- // }
- //
- // //自己使用
- // if ((pPropertyInfo->wIssueArea&PT_SERVICE_AREA_MESELF) == 0 && pISourceUserItem == pTargetUserItem)
- // {
- // //发送消息
- // SendPropertyFailure(pISourceUserItem, TEXT("此道具不可自己使用,购买失败!"), 0L, cbRequestArea);
- //
- // return false;
- // }
- //
- // //玩家使用
- // if ((pPropertyInfo->wIssueArea&PT_SERVICE_AREA_PLAYER) == 0 && pISourceUserItem != pTargetUserItem)
- // {
- // //发送消息
- // SendPropertyFailure(pISourceUserItem, TEXT("此道具不可赠送给玩家,只能自己使用,购买失败!"), 0L, cbRequestArea);
- //
- // return false;
- // }
- //
- // //旁观范围
- // if ((pPropertyInfo->wIssueArea&PT_SERVICE_AREA_LOOKON) == 0)
- // {
- // //变量定义
- // WORD wTableID = pTargetUserItem->GetTableID();
- // if (wTableID != INVALID_TABLE)
- // {
- // //变量定义
- // WORD wEnumIndex = 0;
- // //获取桌子
- // auto pTableFrame = GetTableFrame(wTableID);
- // if (!pTableFrame)
- // return false;
- // //枚举用户
- // do
- // {
- // //获取用户
- // IServerUserItem * pIServerUserItem = pTableFrame->EnumLookonUserItem(wEnumIndex++);
- // if (pIServerUserItem == nullptr) break;
- // if (pIServerUserItem == pTargetUserItem)
- // {
- // //发送消息
- // SendPropertyFailure(pISourceUserItem, TEXT("此道具不可赠送给旁观用户,购买失败!"), 0L, cbRequestArea);
- // return false;
- // }
- // } while (true);
- // }
- // }
- //
- // //道具判断
- // switch (wPropertyIndex)
- // {
- // case PROPERTY_ID_SCORE_CLEAR: //负分清零
- // {
- // //变量定义
- // SCORE lCurrScore = pTargetUserItem->GetUserScore();
- // if (lCurrScore >= 0)
- // {
- // //变量定义
- // TCHAR szMessage[128] = TEXT("");
- // if (pISourceUserItem == pTargetUserItem)
- // _sntprintf(szMessage, CountArray(szMessage), TEXT("您现在的积分已经是非负数,不需要使用负分清零道具!"));
- // else
- // _sntprintf(szMessage, CountArray(szMessage), TEXT("[ %s ]现在的积分已经是非负数,不需要使用负分清零道具!"), pTargetUserItem->GetNickName());
- //
- // //发送消息
- // SendPropertyFailure(pISourceUserItem, szMessage, 0L, cbRequestArea);
- //
- // return false;
- // }
- // break;
- // }
- // case PROPERTY_ID_ESCAPE_CLEAR: //逃跑清零
- // {
- // //变量定义
- // DWORD dwCurrFleeCount = pTargetUserItem->GetUserInfo()->dwFleeCount;
- // if (dwCurrFleeCount == 0)
- // {
- // //变量定义
- // TCHAR szMessage[128] = TEXT("");
- // if (pISourceUserItem == pTargetUserItem)
- // _sntprintf(szMessage, CountArray(szMessage), TEXT("您现在的逃跑率已经为0,不需要使用逃跑清零道具!"));
- // else
- // _sntprintf(szMessage, CountArray(szMessage), TEXT("[ %s ]现在的逃跑率已经为0,不需要使用逃跑清零道具!"), pTargetUserItem->GetNickName());
- //
- // //发送消息
- // SendPropertyFailure(pISourceUserItem, szMessage, 0L, cbRequestArea);
- //
- // return false;
- // }
- // break;
- // }
- // default: break;
- // }
- //
- // return true;
- //}
-
- //绑定用户
- IServerUserItem * CAttemperEngineSink::GetBindUserItem(WORD wBindIndex)
- {
- //获取参数
- tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- //获取用户
- if (pBindParameter != NULL)
- {
- return pBindParameter->pIServerUserItem;
- }
- else
- {
- CString strErr;
- strErr.Format(_T("绑定用户失败 pBindParameter=NULL"));
- CTraceService::TraceString(strErr, TraceLevel_Normal);
- }
-
- //错误断言
- ASSERT(FALSE);
-
- return NULL;
- }
-
- //绑定参数
- tagBindParameter * CAttemperEngineSink::GetBindParameter(WORD wBindIndex)
- {
- //无效连接
- if (wBindIndex == INVALID_WORD)
- {
- //CString strErr;
- //strErr.Format(_T("绑定用户失败 wBindIndex=INVALID_WORD"));
- //CTraceService::TraceString(strErr, TraceLevel_Normal);
- return NULL;
- }
-
- if (m_pGameServiceOption == NULL)
- {
- CString strErr;
- strErr.Format(_T("绑定用户失败 m_pGameServiceOption=NULL"));
- CTraceService::TraceString(strErr, TraceLevel_Normal);
- return NULL;
- }
-
- //常规连接
- if (wBindIndex < m_pGameServiceOption->wMaxPlayer)
- {
- return m_pNormalParameter + wBindIndex;
- }
-
- //机器连接
- //if ((wBindIndex >= INDEX_ANDROID) && (wBindIndex < (INDEX_ANDROID + MAX_ANDROID)))
- //{
- // return m_pAndroidParameter + (wBindIndex - INDEX_ANDROID);
- //}
- //else
- {
- ///---记录下非法索引
- CString strErr;
- strErr.Format(_T("绑定索引错误,wBindIndex=%d"), wBindIndex);
- CTraceService::TraceString(strErr, TraceLevel_Warning);
- }
-
- //错误断言
- ASSERT(FALSE);
-
- return NULL;
- }
-
- //道具类型
- WORD CAttemperEngineSink::GetPropertyType(WORD wPropertyIndex)
- {
- switch (wPropertyIndex)
- {
- case PROPERTY_ID_CAR: case PROPERTY_ID_EGG: case PROPERTY_ID_CLAP: case PROPERTY_ID_KISS: case PROPERTY_ID_BEER:
- case PROPERTY_ID_CAKE: case PROPERTY_ID_RING: case PROPERTY_ID_BEAT: case PROPERTY_ID_BOMB: case PROPERTY_ID_SMOKE:
- case PROPERTY_ID_VILLA: case PROPERTY_ID_BRICK: case PROPERTY_ID_FLOWER:
- {
- return PT_TYPE_PRESENT;
- };
- case PROPERTY_ID_TWO_CARD: case PROPERTY_ID_FOUR_CARD: case PROPERTY_ID_SCORE_CLEAR: case PROPERTY_ID_ESCAPE_CLEAR:
- case PROPERTY_ID_TRUMPET: case PROPERTY_ID_TYPHON: case PROPERTY_ID_GUARDKICK_CARD: case PROPERTY_ID_POSSESS:
- case PROPERTY_ID_BLUERING_CARD: case PROPERTY_ID_YELLOWRING_CARD: case PROPERTY_ID_WHITERING_CARD: case PROPERTY_ID_REDRING_CARD:
- case PROPERTY_ID_VIPROOM_CARD:
- {
- return PT_TYPE_PROPERTY;
- };
- default: break;
- }
-
- ASSERT(false);
-
- return PT_TYPE_ERROR;
- }
-
- //分配用户
- bool CAttemperEngineSink::PerformDistribute()
- {
- //人数校验
- if (m_DistributeManage.GetCount() < m_pGameServiceOption->wMinDistributeUser) return false;
-
- //分配用户
- while (true)
- {
- //人数校验
- if (m_DistributeManage.GetCount() < m_pGameServiceOption->wMinPartakeGameUser) break;
-
- //变量定义
- CDistributeInfoArray DistributeInfoArray;
-
- //获取用户
- WORD wRandCount = __max(m_pGameServiceOption->wMaxPartakeGameUser - m_pGameServiceOption->wMinPartakeGameUser + 1, 1);
- WORD wChairCount = m_pGameServiceOption->wMinPartakeGameUser + rand() % wRandCount;
- WORD wDistributeCount = m_DistributeManage.PerformDistribute(DistributeInfoArray, wChairCount);
- if (wDistributeCount < m_pGameServiceOption->wMinPartakeGameUser) break;
-
- //寻找位置
- std::shared_ptr<CTableFrame> pCurrTableFrame;
- for (WORD i = 0; i < m_pGameServiceOption->wTableCount; i++)
- {
- auto pTableFrame = GetTableFrame(i);//获取对象
- if (!pTableFrame)
- continue;
- //状态判断
- if (pTableFrame->GetSitUserCount() == 0)
- {
- pCurrTableFrame = pTableFrame;
- break;
- }
- }
-
- //桌子判断
- if (!pCurrTableFrame) break;
-
- //玩家坐下
- bool bSitSuccess = true;
- INT_PTR nSitFailedIndex = INVALID_CHAIR;
- for (INT_PTR nIndex = 0; nIndex < DistributeInfoArray.GetCount(); nIndex++)
- {
- //变量定义
- WORD wChairID = pCurrTableFrame->GetNullChairID();
-
- //分配用户
- if (wChairID != INVALID_CHAIR)
- {
- //获取用户
- IServerUserItem * pIServerUserItem = DistributeInfoArray[nIndex].pIServerUserItem;
-
- //用户坐下
- if (pCurrTableFrame->PerformSitDownAction(wChairID, pIServerUserItem) == false)
- {
- bSitSuccess = false;
- nSitFailedIndex = nIndex;
- break;
- }
- }
- }
-
- //坐下结果
- if (bSitSuccess)
- {
- //移除结点
- while (DistributeInfoArray.GetCount() > 0)
- {
- m_DistributeManage.RemoveDistributeNode((tagDistributeNode *)DistributeInfoArray[0].pPertainNode);
- DistributeInfoArray.RemoveAt(0);
- }
- }
- else
- {
- for (INT_PTR nIndex = 0; nIndex < DistributeInfoArray.GetCount(); nIndex++)
- {
- if (nSitFailedIndex == nIndex)
- {
- m_DistributeManage.RemoveDistributeNode((tagDistributeNode *)DistributeInfoArray[nIndex].pPertainNode);
- }
- else
- {
- //用户起立
- if (DistributeInfoArray[nIndex].pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- WORD wTableID = DistributeInfoArray[nIndex].pIServerUserItem->GetTableID();
- auto pTableFrame = GetTableFrame(wTableID);//获取对象
- if (!pTableFrame)
- return false;
- pTableFrame->PerformStandUpAction(DistributeInfoArray[nIndex].pIServerUserItem);
- }
- }
- }
- }
- }
- //提示消息
- CString csTest;
- csTest.Format(_T("分配用户IDI_DISTRIBUTE_USER ---->分组值m_DistributeManage.GetCount() %d "), m_DistributeManage.GetCount());
- CTraceService::TraceString(csTest, TraceLevel_Normal);
-
- return true;
- }
-
- //配置机器
- bool CAttemperEngineSink::InitAndroidUser()
- {
- //机器参数
- tagAndroidUserParameter AndroidUserParameter;
- ZeroMemory(&AndroidUserParameter, sizeof(AndroidUserParameter));
-
- //配置参数
- AndroidUserParameter.bServiceContinue = true;
- AndroidUserParameter.pGameParameter = m_pGameParameter;
- AndroidUserParameter.pGameServiceAttrib = m_pGameServiceAttrib;
- AndroidUserParameter.pGameServiceOption = m_pGameServiceOption;
-
- //服务组件
- AndroidUserParameter.pITimerEngine = m_pITimerEngine;
- AndroidUserParameter.pIServerUserManager = &m_ServerUserManager;
- AndroidUserParameter.pIGameServiceManager = m_pIGameServiceManager;
- AndroidUserParameter.pITCPNetworkEngineEvent = QUERY_OBJECT_PTR_INTERFACE(m_pIAttemperEngine, ITCPNetworkEngineEvent);
-
- //服务配置
- if (m_pGameServiceAttrib->wChairCount >= MAX_CHAIR)
- {
- AndroidUserParameter.bServiceContinue = false;
- AndroidUserParameter.dwMinSitInterval = MIN_INTERVAL_TIME;
- AndroidUserParameter.dwMaxSitInterval = MAX_INTERVAL_TIME;
- }
-
- //设置对象
- //if (m_AndroidUserManager.InitAndroidUser(AndroidUserParameter) == false)
- //{
- // return false;
- //}
-
- return true;
- }
-
- std::wstring CAttemperEngineSink::GetNextPrivateRoomID(int idLen)
- {
- //连接协调服务器,创建私有房间号码
- static std::wstring str = L"123456789";
- static std::wstring zero = L"0";
-
- srand(time(nullptr));
- const int tryTimes = 100; //失败尝试次数
- int a = m_pGameServiceOption->wServerID % 100 / 10; // 十位数
- int b = m_pGameServiceOption->wServerID % 100 % 10; // 个位数
- if (b == 9) a++;
- std::wstring roomID(L"");
- for (int i = 0; i < tryTimes; i++)
- {
-
- roomID.resize(idLen);
- for (int j = 0; j < idLen; j++)
- roomID[j] = str[rand() % str.length()];
-
- roomID[4] = str[a];
- if (b == 9)
- roomID[5] = zero[0];
- else
- roomID[5] = str[b];
-
- auto titer = m_PriTableID_2_TableID.find(roomID);
- if (titer == m_PriTableID_2_TableID.end())
- return roomID;
- }
- return roomID;
- }
-
- bool CAttemperEngineSink::DecUserTable(DWORD dwUser, DWORD dwTableID,int TableCount)
- {
- const auto iterate = m_UserID_2_PriTableIDGROUP.find(dwUser);
- if (iterate == std::end(m_UserID_2_PriTableIDGROUP))
- return false;
- JN_GR_RoomListGroup Temp = iterate->second;
-
- JN_GR_RoomListGroup TempSet;
- ZeroMemory(&TempSet, sizeof(JN_GR_RoomListGroup));
-
- bool bEnd = false;
- int iNum = 0;
- for (int i = 0; i < (Temp.Num > 30 ? 30 : Temp.Num); i++)
- {
- if (Temp.jgrDate[i].dwRoomNumber == dwTableID && dwTableID > 0)
- {
- //同步到中心服务器
- JN_GR_RoomListBig UserChat = Temp.jgrDate[i];
- UserChat.dwInsert_UpData_Del = 2;
- UpdataBodyOwnRoomToServer(&UserChat, sizeof(UserChat));
- //俱乐部删除桌子广播
- if (UserChat.roomType == 1 && UserChat.tmp6[0] != 0)
- {
- if (UserChat.tmp5 == 0 || (UserChat.tmp5 == 1 && TableCount > 1))
- {
- CMD_GR_UserData UserData;
- ZeroMemory(&UserData, sizeof(UserData));
- UserData.dwClubID = UserChat.tmp6[0];
- UserData.newsFlag = 2;
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_NotifyUser, 0, &(UserData), sizeof(CMD_GR_UserData));
- }
- }
- }
- else
- {
- if (Temp.jgrDate[i].dwRoomNumber != 0)
- {
- TempSet.jgrDate[iNum] = Temp.jgrDate[i];
- iNum++;
- }
- }
- }
-
- TempSet.Num = iNum;
- if (iNum == 0) bEnd = true;
-
- if (bEnd)
- {
- m_UserID_2_PriTableIDGROUP.erase(dwUser);
- }
- else
- {
- m_UserID_2_PriTableIDGROUP[dwUser] = TempSet;
- }
-
- return true;
- }
- std::shared_ptr<CTableFrame> CAttemperEngineSink::CreatePrivateTable(DWORD RoomID, WORD wGameType)
- {
- CString PrivateTableID;
- PrivateTableID.Format(_T("%d"), RoomID);
-
- //桌子参数
- tagTableFrameParameter TableFrameParameter;
- ZeroMemory(&TableFrameParameter, sizeof(TableFrameParameter));
-
- //内核组件
- TableFrameParameter.pITimerEngine = m_pITimerEngine;
- TableFrameParameter.pIKernelDataBaseEngine = m_pIKernelDataBaseEngine;
- TableFrameParameter.pIRecordDataBaseEngine = m_pIRecordDataBaseEngine;
-
- //服务组件
- TableFrameParameter.pIMainServiceFrame = this;
- //TableFrameParameter.pIAndroidUserManager = &m_AndroidUserManager;
- TableFrameParameter.pIGameServiceManager = m_pIGameServiceManager;
-
- //配置参数
- TableFrameParameter.pGameParameter = m_pGameParameter;
- TableFrameParameter.pGameServiceAttrib = m_pGameServiceAttrib;
- TableFrameParameter.pGameServiceOption = m_pGameServiceOption;
-
-
- auto table = std::make_shared<CTableFrame>();
-
- TCHAR szTemp[32] = { 0 };
- if (table != nullptr) table->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
- table->SetPrivateTableID(PrivateTableID.GetBuffer(0));
- PrivateTableID.ReleaseBuffer();
-
- const auto tableId = m_privateTableIDPool.front();
- m_privateTableIDPool.pop_front(); ///---如果用完了呢?
-
- m_TableFrameArray[tableId] = table;
- //配置桌子
- if (table->InitializationFrame(tableId, TableFrameParameter, wGameType) == false)
- {
- return nullptr;
- }
- return table;
- }
-
- //配置桌子
- bool CAttemperEngineSink::InitTableFrameArray()
- {
- //桌子参数
- tagTableFrameParameter TableFrameParameter;
- ZeroMemory(&TableFrameParameter, sizeof(TableFrameParameter));
-
- //内核组件
- TableFrameParameter.pITimerEngine = m_pITimerEngine;
- TableFrameParameter.pIKernelDataBaseEngine = m_pIKernelDataBaseEngine;
- TableFrameParameter.pIRecordDataBaseEngine = m_pIRecordDataBaseEngine;
-
- //服务组件
- TableFrameParameter.pIMainServiceFrame = this;
- //TableFrameParameter.pIAndroidUserManager = &m_AndroidUserManager;
- TableFrameParameter.pIGameServiceManager = m_pIGameServiceManager;
-
- //配置参数
- TableFrameParameter.pGameParameter = m_pGameParameter;
- TableFrameParameter.pGameServiceAttrib = m_pGameServiceAttrib;
- TableFrameParameter.pGameServiceOption = m_pGameServiceOption;
-
- //创建桌子
- for (WORD i = 0; i < m_pGameServiceOption->wTableCount; i++)
- {
- //创建对象
- auto pTableFrame = std::make_shared<CTableFrame>();
- m_TableFrameArray[i] = pTableFrame;
-
- //配置桌子
- if (pTableFrame->InitializationFrame(i, TableFrameParameter,1) == false)
- {
- return false;
- }
-
- //绑定桌子
- //if (m_pIMatchServiceManager != NULL)
- //{
- // m_pIMatchServiceManager->BindTableFrame(QUERY_OBJECT_PTR_INTERFACE((m_TableFrameArray[i]), ITableFrame), i);
- //}
- }
-
- return true;
- }
-
- //配置比赛
- //bool CAttemperEngineSink::InitMatchServiceManager()
- //{
- // //参数校验
- // if (m_pIMatchServiceManager == NULL) return true;
- //
- // //桌子参数
- // tagMatchManagerParameter MatchManagerParameter;
- // ZeroMemory(&MatchManagerParameter, sizeof(MatchManagerParameter));
- //
- // //配置参数
- // MatchManagerParameter.pGameMatchOption = m_pGameMatchOption;
- // MatchManagerParameter.pGameServiceOption = m_pGameServiceOption;
- // MatchManagerParameter.pGameServiceAttrib = m_pGameServiceAttrib;
- //
- // //内核组件
- // MatchManagerParameter.pITimerEngine = m_pITimerEngine;
- // MatchManagerParameter.pICorrespondManager = m_pIDBCorrespondManager;
- // MatchManagerParameter.pTCPNetworkEngine = QUERY_OBJECT_PTR_INTERFACE(m_pIAttemperEngine, ITCPNetworkEngineEvent);
- //
- // //服务组件
- // MatchManagerParameter.pIMainServiceFrame = this;
- // MatchManagerParameter.pIServerUserItemSink = this;
- // MatchManagerParameter.pIAndroidUserManager = &m_AndroidUserManager;
- // MatchManagerParameter.pIServerUserManager = QUERY_OBJECT_INTERFACE(m_ServerUserManager, IServerUserManager);
- //
- // //初始化接口
- // m_pIMatchServiceManager->InitMatchInterface(MatchManagerParameter);
- //
- // return true;
- //}
-
- //发送请求
- bool CAttemperEngineSink::SendUIControlPacket(WORD wRequestID, VOID * pData, WORD wDataSize)
- {
- //发送数据
- CServiceUnits * pServiceUnits = CServiceUnits::g_pServiceUnits;
- pServiceUnits->PostControlRequest(wRequestID, pData, wDataSize);
-
- return true;
- }
-
- //插入分配
- bool CAttemperEngineSink::InsertDistribute(IServerUserItem * pIServerUserItem)
- {
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //状态判断
- ASSERT(pIServerUserItem->GetUserStatus() < US_PLAYING);
- if (pIServerUserItem->GetUserStatus() >= US_PLAYING) return false;
-
- //比赛类型
- //if (m_pIMatchServiceManager != NULL)
- //{
- // //获取参数
- // WORD wBindIndex = pIServerUserItem->GetBindIndex();
- // tagBindParameter * pBindParameter = GetBindParameter(wBindIndex);
-
- // //加入比赛
- // return m_pIMatchServiceManager->OnEventUserJoinMatch(pIServerUserItem, 0, pBindParameter->dwSocketID);
- //}
-
- //变量定义
- tagDistributeInfo DistributeInfo;
- ZeroMemory(&DistributeInfo, sizeof(DistributeInfo));
-
- //设置变量
- DistributeInfo.pIServerUserItem = pIServerUserItem;
- DistributeInfo.wLastTableID = pIServerUserItem->GetTableID();
- DistributeInfo.pPertainNode = NULL;
-
- //加入数组
- if (m_DistributeManage.InsertDistributeNode(DistributeInfo) == false)
- {
- return pIServerUserItem->IsAndroidUser() ? false : true;
- }
-
- //用户起立
- if (pIServerUserItem->GetTableID() != INVALID_TABLE)
- {
- WORD wTableID = pIServerUserItem->GetTableID();
- auto pTableFrame = GetTableFrame(wTableID);//获取对象
- if (!pTableFrame)
- return false;
- pTableFrame->PerformStandUpAction(pIServerUserItem);
- }
-
-
- UserInfo::PB_CS_S_Distribute Distribute;
- //发送数据
- std::string pbdata = Distribute.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_WAIT_DISTRIBUTE, (void*)pbdata.c_str(), pbdata.length());
-
-
- //分配判断
- bool bDistribute = false;
- if (m_pGameServiceOption->cbDistributeRule&DISTRIBUTE_IMMEDIATE) bDistribute = true;
-
- //执行分组
- if (bDistribute == true)
- {
- PerformDistribute();
- }
-
- return true;
- }
-
-
- bool CAttemperEngineSink::DeletePrivateTable(ITableFrame* pTableFrame)
- {
- if (!pTableFrame)
- return false;
-
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
- CString csTemp = szTemp;
-
- JN_GR_RoomListBig TargetRoom;
- ZeroMemory(&TargetRoom, sizeof(TargetRoom));
-
- if (csTemp.IsEmpty())
- {
- return false;
- }
- else
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Temp = it->second;
- if (Temp.dwRoomNumber == _ttol(szTemp))
- {
- TargetRoom = Temp;
- break;
- }
- it++;
- }
- }
-
- //俱乐部自动创房判定
- int TableCount = 0;
- if (TargetRoom.tmp5 == 1 && TargetRoom.roomType == 1)
- {
- int FreeTalbe = 0;
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Temp = it->second;
- if (Temp.tmp6[0] == TargetRoom.tmp6[0] && Temp.roomStatus == 0 && Temp.dwRoomNumber != TargetRoom.dwRoomNumber)
- {
- FreeTalbe++;
- }
-
- if (Temp.tmp6[0] == TargetRoom.tmp6[0])
- {
- TableCount++;
- }
- it++;
- }
-
- //没有找到空闲的桌子
- if (FreeTalbe == 0)
- {
- this->OnAutoCreateRoomToDB(TargetRoom.tmp6[0], 0, TargetRoom.tmp4);
- }
- }
-
-
- bool result = DecUserTable(pTableFrame->GetPrivateTableOwnerID(), _ttol(szTemp), TableCount);
- if (result == false)
- {
- //无条件上报删除该桌子
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("上报删除桌子 [ tableID=%d ]"), _ttol(szTemp));
- CTraceService::TraceString(szString, TraceLevel_Warning);
-
- TargetRoom.dwInsert_UpData_Del = 2;
- UpdataBodyOwnRoomToServer(&TargetRoom, sizeof(TargetRoom));
-
- //俱乐部删除桌子广播
- if (TargetRoom.roomType == 1 && TargetRoom.tmp6[0] != 0)
- {
- if (TargetRoom.tmp5 == 0 || (TargetRoom.tmp5 == 1 && TableCount > 1))
- {
- CMD_GR_UserData UserData;
- ZeroMemory(&UserData, sizeof(UserData));
- UserData.dwClubID = TargetRoom.tmp6[0];
- UserData.newsFlag = 2;
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_NotifyUser, 0, &(UserData), sizeof(CMD_GR_UserData));
- }
- }
- }
-
- m_TableFrameArray.erase(pTableFrame->GetTableID()); ///---yd 释放桌子后,tableId回收到“私有桌子ID池”中
- m_privateTableIDPool.push_back(pTableFrame->GetTableID());
-
- std::wstring sPrivateTableID = szTemp;
- m_PriTableID_2_TableID.erase(sPrivateTableID);
-
- return true;
- }
-
- //敏感词过滤
- void CAttemperEngineSink::SensitiveWordFilter(LPCTSTR pMsg, LPTSTR pszFiltered, int nMaxLen)
- {
- //m_WordsFilter.Filtrate(pMsg, pszFiltered, nMaxLen);
- }
-
- //删除用户
- bool CAttemperEngineSink::DeleteDistribute(IServerUserItem * pIServerUserItem)
- {
- //移除节点
- m_DistributeManage.RemoveDistributeNode(pIServerUserItem);
-
- return true;
- }
-
- //设置参数
- void CAttemperEngineSink::SetMobileUserParameter(IServerUserItem * pIServerUserItem, BYTE cbDeviceType, WORD wBehaviorFlags, WORD wPageTableCount)
- {
- if (wPageTableCount > m_pGameServiceOption->wTableCount)wPageTableCount = m_pGameServiceOption->wTableCount;
- pIServerUserItem->SetMobileUserDeskCount(wPageTableCount);
- pIServerUserItem->SetMobileUserRule(wBehaviorFlags);
- pIServerUserItem->SetMobileUserMachineType(cbDeviceType);
- }
-
- //群发用户信息
- bool CAttemperEngineSink::SendUserInfoPacketBatchToMobileUser(IServerUserItem * pIServerUserItem)
- {
- //return true;
- //效验参数
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- //变量定义
- tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
- tagMobileUserInfoHead pUserInfoHead;
-
- //用户属性
- pUserInfoHead.wFaceID = pUserInfo->wFaceID;
- pUserInfoHead.dwGameID = pUserInfo->dwGameID;
- pUserInfoHead.dwUserID = pUserInfo->dwUserID;
- pUserInfoHead.dwCustomID = pUserInfo->dwCustomID;
-
- //用户属性
- pUserInfoHead.cbGender = pUserInfo->cbGender;
- pUserInfoHead.cbMemberOrder = pUserInfo->cbMemberOrder;
-
- //用户状态
- pUserInfoHead.wTableID = pUserInfo->wTableID;
- pUserInfoHead.wChairID = pUserInfo->wChairID;
- pUserInfoHead.cbUserStatus = pUserInfo->cbUserStatus;
-
- //用户局数
- pUserInfoHead.dwWinCount = pUserInfo->dwWinCount;
- pUserInfoHead.dwLostCount = pUserInfo->dwLostCount;
- pUserInfoHead.dwDrawCount = pUserInfo->dwDrawCount;
- pUserInfoHead.dwFleeCount = pUserInfo->dwFleeCount;
- pUserInfoHead.dwExperience = pUserInfo->dwExperience;
-
- pUserInfoHead.llDingWeiX = pUserInfo->dDingWeiX;
- pUserInfoHead.llDingWeiY = pUserInfo->dDingWeiY;
- pUserInfoHead.iJiePing = pUserInfo->llJiePing;
- pUserInfoHead.iXinYong = pUserInfo->iXinYong;
- lstrcpyn(pUserInfoHead.RetTime, pUserInfo->RegisterDate, CountArray(pUserInfo->RegisterDate));
-
- //用户成绩
- pUserInfoHead.lScore = pUserInfo->lScore;
- pUserInfoHead.lScore += pIServerUserItem->GetTrusteeScore();
- pUserInfoHead.lScore += pIServerUserItem->GetFrozenedScore();
-
- lstrcpyn(pUserInfoHead.ChengShi, pUserInfo->szChengShi, CountArray(pUserInfo->szChengShi));
- lstrcpyn(pUserInfoHead.szNickname, pUserInfo->szNickName, CountArray(pUserInfo->szNickName));
- //用户头像地址
- lstrcpyn(pUserInfoHead.szHeadUrl, pUserInfo->szHeadUrl, CountArray(pUserInfo->szHeadUrl));
- //IP地址
- pUserInfoHead.dwClientAddr = pIServerUserItem->GetClientAddr();
-
-
- UserInfo::PB_CS_S_tagMobileUserInfoHead UserInfoHead;
- UserInfoHead.set_wfaceid(pUserInfoHead.wFaceID);
- UserInfoHead.set_dwgameid(pUserInfoHead.dwGameID);
- UserInfoHead.set_dwuserid(pUserInfoHead.dwUserID);
- UserInfoHead.set_dwcustomid(pUserInfoHead.dwCustomID);
- UserInfoHead.set_cbgender(pUserInfoHead.cbGender);
- UserInfoHead.set_cbmemberorder(pUserInfoHead.cbMemberOrder);
- UserInfoHead.set_wtableid(pUserInfoHead.wTableID);
- UserInfoHead.set_wchairid(pUserInfoHead.wChairID);
- UserInfoHead.set_cbuserstatus(pUserInfoHead.cbUserStatus);
- UserInfoHead.set_lscore(pUserInfoHead.lScore);
- UserInfoHead.set_dwwincount(pUserInfoHead.dwWinCount);
- UserInfoHead.set_dwlostcount(pUserInfoHead.dwLostCount);
- UserInfoHead.set_dwdrawcount(pUserInfoHead.dwDrawCount);
- UserInfoHead.set_dwfleecount(pUserInfoHead.dwFleeCount);
- UserInfoHead.set_dwexperience(pUserInfoHead.dwExperience);
- std::string szNickname = CW2AEX<1024>(pUserInfoHead.szNickname, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(pUserInfoHead.szHeadUrl, CP_UTF8).m_psz;
- std::string RetTime = CW2AEX<1024>(pUserInfoHead.RetTime, CP_UTF8).m_psz;
- std::string ChengShi = CW2AEX<1024>(pUserInfoHead.ChengShi, CP_UTF8).m_psz;
- UserInfoHead.set_sznickname(szNickname);
- UserInfoHead.set_szheadurl(szHeadUrl);
- UserInfoHead.set_dwclientaddr(pUserInfoHead.dwClientAddr);
- UserInfoHead.set_ixinyong(pUserInfoHead.iXinYong);
- UserInfoHead.set_rettime(RetTime);
- UserInfoHead.set_chengshi(ChengShi);
- UserInfoHead.set_lldingweix(pUserInfoHead.llDingWeiX);
- UserInfoHead.set_lldingweiy(pUserInfoHead.llDingWeiY);
- UserInfoHead.set_ijieping(pUserInfoHead.iJiePing);
- //发送数据
- std::string pbdata = UserInfoHead.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ENTER, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- /*
- ///[+++花牌增加 ---需要客户端确认下,对以前版本是否兼容
- tagGameConfig gameConfig;
- ZeroMemory(&gameConfig, sizeof(gameConfig));
-
- auto pTmpTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (pTmpTableFrame != NULL)
- {
- gameConfig = pTmpTableFrame->GetGameConfig();
- }
- SendData(pBindParameter->dwSocketID, MDM_GR_LOGON, SUB_GR_LOGON_FINISH, &gameConfig, sizeof(gameConfig));
- ///+++]
- */
-
- //发可视用户信息
- bool CAttemperEngineSink::SendViewTableUserInfoPacketToMobileUser(IServerUserItem * pIServerUserItem, DWORD dwUserIDReq)
- {
- ///[+++花牌增加 ---需要客户端确认下,对以前版本是否兼容
- tagGameConfig gameConfig;
- ZeroMemory(&gameConfig, sizeof(gameConfig));
-
- auto pTmpTableFrame = GetTableFrame(pIServerUserItem->GetTableID());
- if (pTmpTableFrame != NULL)
- {
- gameConfig = pTmpTableFrame->GetGameConfig();
- }
- ///+++]
-
- //变量定义
- tagMobileUserInfoHead pUserInfoHead;
- WORD wMobileUserRule = pIServerUserItem->GetMobileUserRule();
- //WORD wTagerTableID = pIServerUserItem->GetTableID();
- WORD wTagerDeskPos = pIServerUserItem->GetMobileUserDeskPos();
- WORD wTagerDeskCount = pIServerUserItem->GetMobileUserDeskCount();
- bool bViewModeAll = ((wMobileUserRule&VIEW_MODE_ALL) != 0);
- if (wTagerDeskCount == 0) wTagerDeskCount = 1;
-
- //枚举用户
- WORD wEnumIndex = 0;
- while (wEnumIndex < m_ServerUserManager.GetUserItemCount())
- {
- //过滤用户
- IServerUserItem *pIUserItem = m_ServerUserManager.EnumUserItem(wEnumIndex++);
- if (pIUserItem == NULL || (dwUserIDReq == INVALID_CHAIR && pIUserItem == pIServerUserItem)) continue; //表示请求所有人但不包含请求自己的信息
- if (dwUserIDReq != INVALID_CHAIR && pIUserItem->GetUserID() != dwUserIDReq) continue; //表示只发送指定用户的信息
-
- //部分可视
- if (dwUserIDReq == INVALID_CHAIR && !bViewModeAll)
- {//如果不是全图可见模式,则只发送当前桌子的用户数据
- if (pIUserItem->GetTableID() < wTagerDeskPos) continue;
- if (pIUserItem->GetTableID() > (wTagerDeskPos + wTagerDeskCount - 1)) continue;
- }
-
- //定义变量
- tagUserInfo * pUserInfo = pIUserItem->GetUserInfo();
-
- //前端区别麻将判断根据高八位(人数)大于0 则为扑克,反之为麻将
- if (14 <= gameConfig.wSubGameID && 16 >= gameConfig.wSubGameID)//扑克表示高8位chairCount 底8位wSubGameID LYH 2018-10-18
- {
- BYTE cbChairCount = pTmpTableFrame->GetChairCount();
- pUserInfoHead.wFaceID = ((cbChairCount << 8) | gameConfig.wSubGameID);
- }
- else{
- pUserInfoHead.wFaceID = gameConfig.wSubGameID/*pUserInfo->wFaceID*/; ///2017-10-25 麻将复用FaceID当作游戏ID
- }
- //用户属性
- //pUserInfoHead.wFaceID = gameConfig.wSubGameID/*pUserInfo->wFaceID*/; ///2017-10-25 复用FaceID,当作游戏ID
- pUserInfoHead.dwGameID = pUserInfo->dwGameID;
- pUserInfoHead.dwUserID = pUserInfo->dwUserID;
- //DWORD wVenueID = 0xFFFFFFFF;
- //if (isVenueServer())
- //{
- // //登录完成 ///---此处应客户端要求,增加场ID,用以标识登录的是金币场
- // wVenueID = m_pGameServiceOption->wNodeID;
- //}
- //pUserInfoHead.dwCustomID = wVenueID/*pUserInfo->dwCustomID*/; ///---作为场馆ID
- pUserInfoHead.dwCustomID = pUserInfo->dwCustomID;
- //用户属性
- pUserInfoHead.cbGender = pUserInfo->cbGender;
- pUserInfoHead.cbMemberOrder = pUserInfo->cbMemberOrder;
-
- //用户状态
- pUserInfoHead.wTableID = pUserInfo->wTableID;
- pUserInfoHead.wChairID = pUserInfo->wChairID;
- pUserInfoHead.cbUserStatus = pUserInfo->cbUserStatus;
-
- //用户局数
- pUserInfoHead.dwWinCount = pUserInfo->dwWinCount;
- pUserInfoHead.dwLostCount = pUserInfo->dwLostCount;
- pUserInfoHead.dwDrawCount = pUserInfo->dwDrawCount;
- pUserInfoHead.dwFleeCount = pUserInfo->dwFleeCount;
- pUserInfoHead.dwExperience = pUserInfo->dwExperience;
-
- //用户成绩
- pUserInfoHead.lScore = pUserInfo->lScore;
- pUserInfoHead.lScore += pIUserItem->GetTrusteeScore();
- pUserInfoHead.lScore += pIUserItem->GetFrozenedScore();
-
- pUserInfoHead.iJiePing = pUserInfo->llJiePing;
- pUserInfoHead.iXinYong = pUserInfo->iXinYong;
- pUserInfoHead.llDingWeiX = pUserInfo->dDingWeiX;
- pUserInfoHead.llDingWeiY = pUserInfo->dDingWeiY;
-
- lstrcpyn(pUserInfoHead.ChengShi, pUserInfo->szChengShi, CountArray(pUserInfo->szChengShi));
- lstrcpyn(pUserInfoHead.szNickname, pUserInfo->szNickName, CountArray(pUserInfo->szNickName));
- //用户头像地址
- lstrcpyn(pUserInfoHead.szHeadUrl, pUserInfo->szHeadUrl, CountArray(pUserInfo->szHeadUrl));
- //IP地址
- pUserInfoHead.dwClientAddr = pIUserItem->GetClientAddr();
- lstrcpyn(pUserInfoHead.RetTime, pUserInfo->RegisterDate, CountArray(pUserInfo->RegisterDate));
-
- UserInfo::PB_CS_S_tagMobileUserInfoHead UserInfoHead;
- UserInfoHead.set_wfaceid(pUserInfoHead.wFaceID);
- UserInfoHead.set_dwgameid(pUserInfoHead.dwGameID);
- UserInfoHead.set_dwuserid(pUserInfoHead.dwUserID);
- UserInfoHead.set_dwcustomid(pUserInfoHead.dwCustomID);
- UserInfoHead.set_cbgender(pUserInfoHead.cbGender);
- UserInfoHead.set_cbmemberorder(pUserInfoHead.cbMemberOrder);
- UserInfoHead.set_wtableid(pUserInfoHead.wTableID);
- UserInfoHead.set_wchairid(pUserInfoHead.wChairID);
- UserInfoHead.set_cbuserstatus(pUserInfoHead.cbUserStatus);
- UserInfoHead.set_lscore(pUserInfoHead.lScore);
- UserInfoHead.set_dwwincount(pUserInfoHead.dwWinCount);
- UserInfoHead.set_dwlostcount(pUserInfoHead.dwLostCount);
- UserInfoHead.set_dwdrawcount(pUserInfoHead.dwDrawCount);
- UserInfoHead.set_dwfleecount(pUserInfoHead.dwFleeCount);
- UserInfoHead.set_dwexperience(pUserInfoHead.dwExperience);
- std::string szNickname = CW2AEX<1024>(pUserInfoHead.szNickname, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(pUserInfoHead.szHeadUrl, CP_UTF8).m_psz;
- std::string RetTime = CW2AEX<1024>(pUserInfoHead.RetTime, CP_UTF8).m_psz;
- std::string ChengShi = CW2AEX<1024>(pUserInfoHead.ChengShi, CP_UTF8).m_psz;
- UserInfoHead.set_sznickname(szNickname);
- UserInfoHead.set_szheadurl(szHeadUrl);
- UserInfoHead.set_dwclientaddr(pUserInfoHead.dwClientAddr);
- UserInfoHead.set_ixinyong(pUserInfoHead.iXinYong);
- UserInfoHead.set_rettime(RetTime);
- UserInfoHead.set_chengshi(ChengShi);
- UserInfoHead.set_lldingweix(pUserInfoHead.llDingWeiX);
- UserInfoHead.set_lldingweiy(pUserInfoHead.llDingWeiY);
- UserInfoHead.set_ijieping(pUserInfoHead.iJiePing);
- //发送数据
- std::string pbdata = UserInfoHead.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ENTER, (void*)pbdata.c_str(), pbdata.length());
- }
-
- return true;
- }
-
- //手机立即登录
- bool CAttemperEngineSink::MobileUserImmediately(IServerUserItem * pIServerUserItem)
- {
- CTraceService::TraceString(TEXT("手机立即登录 MobileUserImmediately"), TraceLevel_Debug);
- //动态加入
- bool bDynamicJoin = true;
- if (m_pGameServiceAttrib->cbDynamicJoin == FALSE) bDynamicJoin = false;
- if (CServerRule::IsAllowDynamicJoin(m_pGameServiceOption->dwServerRule) == false) bDynamicJoin = false;
-
- //查找桌子
- INT nStartIndex = rand() % m_pGameServiceOption->wTableCount;
- for (INT_PTR i = 0; i < (m_pGameServiceOption->wTableCount); i++)
- {
- //定义变量
- INT nTableIndex = (i + nStartIndex) % m_pGameServiceOption->wTableCount;
-
- //获取桌子
- auto pTableFrame = GetTableFrame(nTableIndex);//获取对象
- if (!pTableFrame)
- continue;
- if ((pTableFrame->IsGameStarted() == true) && (bDynamicJoin == false)) continue;
- if (pTableFrame->IsTableLocked()) continue;
- if (pTableFrame->GetChairCount() == pTableFrame->GetNullChairCount()) continue;
-
- //无效过滤
- WORD wChairID = pTableFrame->GetRandNullChairID();
- if (wChairID == INVALID_CHAIR) continue;
-
- //用户坐下
- pTableFrame->PerformSitDownAction(wChairID, pIServerUserItem);
- return true;
- }
-
- //查找桌子
- nStartIndex = rand() % m_pGameServiceOption->wTableCount;
- for (INT_PTR i = 0; i < (m_pGameServiceOption->wTableCount); i++)
- {
- //定义变量
- INT nTableIndex = (i + nStartIndex) % m_pGameServiceOption->wTableCount;
-
- //获取桌子
- auto pTableFrame = GetTableFrame(nTableIndex);//获取对象
- if (!pTableFrame)
- continue;
- if ((pTableFrame->IsGameStarted() == true) && (bDynamicJoin == false)) continue;
- if (pTableFrame->IsTableLocked()) continue;
-
- //无效过滤
- WORD wChairID = pTableFrame->GetRandNullChairID();
- if (wChairID == INVALID_CHAIR) continue;
-
- //用户坐下
- pTableFrame->PerformSitDownAction(wChairID, pIServerUserItem);
- return true;
- }
-
- //失败
- SendRequestFailure(pIServerUserItem, TEXT("没找到可进入的游戏桌!"), REQUEST_FAILURE_NORMAL);
- return true;
- }
-
- //发送系统消息
- bool CAttemperEngineSink::SendSystemMessage(CMD_GR_SendMessage * pSendMessage, WORD wDataSize)
- {
- //消息处理
- ASSERT(pSendMessage != NULL);
-
- //效验数据
- ASSERT(wDataSize == sizeof(CMD_GR_SendMessage) - sizeof(pSendMessage->szSystemMessage) + sizeof(TCHAR)*pSendMessage->wChatLength);
- if (wDataSize != sizeof(CMD_GR_SendMessage) - sizeof(pSendMessage->szSystemMessage) + sizeof(TCHAR)*pSendMessage->wChatLength)
- return false;
-
- //所有房间
- if (pSendMessage->cbAllRoom == TRUE)
- {
- pSendMessage->cbAllRoom = FALSE;
- m_pITCPSocketService->SendData(MDM_CS_MANAGER_SERVICE, SUB_CS_C_SYSTEM_MESSAGE, pSendMessage, wDataSize/*, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
- }
- //else
- //{
- //发送系统消息
- //if (pSendMessage->cbGame == TRUE)
- //SendGameMessage(pSendMessage->szSystemMessage, SMT_CHAT);
- //if (pSendMessage->cbRoom == TRUE)
- //SendRoomMessage(pSendMessage->szSystemMessage, SMT_CHAT);
- //}
-
- if (pSendMessage->cbGame == TRUE) SendGameMessage(pSendMessage->szSystemMessage, SMT_SYS);
- return true;
- }
-
- bool CAttemperEngineSink::SetUserServerID(IServerUserItem * pIServerUserItem, BYTE cbFlag, WORD ServerID)
- {
- //记录用户的ServerID
- CMD_CS_C_UserServer UserServer;
- ZeroMemory(&UserServer, sizeof(UserServer));
- UserServer.dwUserID = pIServerUserItem->GetUserID();
- UserServer.cbFlag = cbFlag;
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_USER_SERVER, &UserServer, sizeof(UserServer)/*, 0, 0, m_pIGameServiceManager == NULL ? NULL : m_pIGameServiceManager->GetDataString()*/);
-
- return true;
- }
-
- //移除消息
- void CAttemperEngineSink::RemoveSystemMessage()
- {
- //缓存消息
- m_SystemMessageBuffer.Append(m_SystemMessageActive);
- m_SystemMessageActive.RemoveAll();
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
-
- // 是否监测此用户
- BOOL CAttemperEngineSink::IsJC(DWORD UserID)
- {
- for (int i = 0; i < 20;i++)
- {
- if (m_JC.dUserID[i] == 0) break;
-
- if (m_JC.dUserID[i] == UserID)
- {
- return TRUE;
- }
- }
-
- return FALSE;
- }
-
-
- // 更新通道
- int CAttemperEngineSink::UpDataTongDao()
- {
- //查询所有节点服务器信息
- std::unordered_map<std::wstring, int> iptostat;
- //枚举数据
- POSITION Position = NULL;
-
- //枚举数据
- for (DWORD i = 0; i < m_ServerListManager.GetGameServerCount(); i++)
- {
- //获取数据
- CGameServerItem * pGameServerItem = m_ServerListManager.EmunGameServerItem(Position);
- if (pGameServerItem == NULL) continue;
-
- bool finda = false;
- std::wstring cc = pGameServerItem->m_GameServer.szServerAddr;
-
- auto iter = iptostat.find(cc);
- if (iter != std::end(iptostat))
- {
- //已经存在
- finda = true;
- }
-
- if (finda) continue;
-
- iptostat[cc] = 1;
- }
-
- IPLIST Temp;
- ZeroMemory(&Temp, sizeof(IPLIST));
-
- CList<std::wstring> aa;
- std::unordered_map<std::wstring, int>::iterator iter_ = iptostat.begin();
- for (int i = 0; i < iptostat.size(); i++)
- {
- if (iter_->first != _T(""))
- {
- aa.AddTail(iter_->first);
- }
- iter_++;
- }
- iptostat.clear();
-
- POSITION Pos = aa.GetHeadPosition();
- int i = 0;
- while (Pos)
- {
- std::wstring wRet = aa.GetNext(Pos);
-
- StringCchCat(Temp.ST_LIST[i], 64, wRet.c_str());
- i++;
-
- if (i > (64-1)) break;
- }
- //更新加载通道
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GP_ONLINE_SERVICE, 0L, &Temp, sizeof(IPLIST));
-
- return 0;
- }
-
- //分享奖励钻石(仅当天首次分享才有奖励)
- bool CAttemperEngineSink::OnTCPNetworkShareAwardBean(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnTCPNetworkShareAwardBean"), TraceLevel_Debug);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_ShareAwardBean shareAwardBean;
- shareAwardBean.dwUserID = pIServerUserItem->GetUserID();
- lstrcpyn(shareAwardBean.szClientIp, dwIP2csIP(pIServerUserItem->GetClientAddr()), sizeof(shareAwardBean.szClientIp));
-
- m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_SHRAE_AWARD_BEAN, dwSocketID, &shareAwardBean, sizeof(shareAwardBean));
- return true;
- }
-
- //分享奖励钻石结果
- bool CAttemperEngineSink::OnDBShareAwardResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_ShareAwardBeanResult * pShareAwardResult = (DBR_GR_ShareAwardBeanResult*)pData;
-
- UserInfo::PB_CS_S_ShareAwardBeanResult BeanResult;
- BeanResult.set_dwcurrency(pShareAwardResult->dwCurrency);
- BeanResult.set_wawardcurrency(pShareAwardResult->wAwardCurrency);
- //发送数据
- std::string pbdata = BeanResult.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_SHRAE_AWARD_BEAN_RESULT, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- //用户分享信息
- bool CAttemperEngineSink::OnTCPNetworkShareInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnTCPNetworkShareInfo"), TraceLevel_Debug);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
-
- m_pIRecordDataBaseEngine->PostDataBaseRequest(SUB_GR_USER_SHRAE_INFO, dwSocketID, &dUserID, sizeof(dUserID));
- return true;
- }
-
- //用户当天分享信息结果
- bool CAttemperEngineSink::OnDBShareInfoResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_ShareAwardInfo * pShareInfo = (DBR_GR_ShareAwardInfo *)pData;
-
- UserInfo::PB_CS_S_ShareAwardInfo shareAwardInfo;
- shareAwardInfo.set_wtodaysharedflag(pShareInfo->wTodaySharedFlag);
- shareAwardInfo.set_wshardawardcurrency(pShareInfo->wShardAwardCurrency);
- //发送数据
- std::string pbdata = shareAwardInfo.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_SHRAE_INFO_RESULT, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- /////+++拉取场馆游戏服务器
- //bool CAttemperEngineSink::OnTCPNetworkMainVenue(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // switch (wSubCmdID)
- // {
- // case SUB_GR_VENUE_C_GAME_SERVER: //拉取场馆游戏服务器(返回最优的那个) 场馆ID
- // {
- // OnTCPNetworkGetVenueGameSvr(pData, wDataSize, dwSocketID);
- // return true;
- // }
- // case SUB_GR_VENUE_C_INFO_LIST: //拉取场馆信息列表
- // {
- // OnTCPNetworkGetVenueInfoList(pData, wDataSize, dwSocketID);
- // return true;
- // }
- // default: break;
- // }
- //
- // return false;
- //}
-
- ///---发送场馆信息列表
- //bool CAttemperEngineSink::OnTCPNetworkGetVenueInfoList(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // TRACE("\n\n***Fun=[%s] Line[%d] ***\n\n", __FUNCTION__, __LINE__);
- // if (m_vecVenueInfo.size() <= 0 || NULL == m_pITCPNetworkEngine)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL)
- // {
- // return false;
- // }
- //
- // //网络数据
- // bool bExistVenue = false; ///---是否存在场馆信息
- // WORD wSendSize = 0;
- // BYTE cbDataBuffer[SOCKET_TCP_PACKET] = { 0 };
- // memset(cbDataBuffer, 0, sizeof(cbDataBuffer));
- //
- // for (std::vector<tagVenueInfo>::iterator it = m_vecVenueInfo.begin(); it != m_vecVenueInfo.end(); it++)
- // {
- // //发送数据
- // if ((wSendSize + sizeof(tagVenueInfo)) > sizeof(cbDataBuffer))
- // {
- // m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_VENUE, SUB_GR_VENUE_S_INFO_LIST, cbDataBuffer, wSendSize);
- // wSendSize = 0;
- // }
- //
- // //获取数据
- // tagVenueInfo venueInfo = *it;
- //
- // // 协议数据
- // CMD_VenueInfo cmdVenueInfo(venueInfo);
- //
- // //拷贝数据
- // CopyMemory(cbDataBuffer + wSendSize, &cmdVenueInfo, sizeof(cmdVenueInfo));
- // wSendSize += sizeof(cmdVenueInfo);
- // bExistVenue = true;
- // }
- //
- // //发送剩余
- // if (wSendSize > 0)
- // {
- // m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_VENUE, SUB_GR_VENUE_S_INFO_LIST, cbDataBuffer, wSendSize);
- // }
- //
- // ///---不存在,发空
- // if (!bExistVenue)
- // {
- // ASSERT(false);
- // m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_VENUE, SUB_GR_VENUE_S_INFO_LIST);
- // }
- //
- // ///---查询该用户有无破产赠送 (改在进入低级场时触发)
- // ////if (pIServerUserItem->GetUserScore() < SCORE_RELIEF_VALUE)
- // ////{
- // //// OnTCPNetworkQueryRelief(pData, wDataSize, dwSocketID);
- // ////}
- //
- // return true;
- //}
- //tagVenueInfo CAttemperEngineSink::getVenueInfo(WORD wVenueID)
- //{
- // tagVenueInfo venue;
- // for (std::vector<tagVenueInfo>::iterator it = m_vecVenueInfo.begin();
- // it != m_vecVenueInfo.end(); it++)
- // {
- // tagVenueInfo venueTemp = *it;
- //
- // if (venueTemp.wVenueID == wVenueID)
- // {
- // return venueTemp;
- // }
- // }
- // ASSERT(FALSE);
- // return venue;
- //}
- ///---查询破产补助信息
- //bool CAttemperEngineSink::OnTCPNetworkQueryRelief(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- // DWORD dwUserID = pIServerUserItem->GetUserID();
- // m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_RELIEF_INFO, dwSocketID, &dwUserID, sizeof(dwUserID)); /*m_pIRecordDataBaseEngine投递队列有数据延迟太大*/
- //
- // /////---打印下,投递时间
- // //TCHAR szString[512] = { 0 };
- // //_sntprintf(szString, CountArray(szString), TEXT("查询有无破产领取 [ userID=%d ]"), dwUserID);
- // //CTraceService::TraceString(szString, TraceLevel_Normal);
- //
- // return true;
- //}
-
- // 人数倒序排列
- class SortByLineCountDescFunc
- {
- public:
- int operator()(CGameServerItem* l, CGameServerItem* r)
- {
- return l->m_GameServer.dwOnLineCount > r->m_GameServer.dwOnLineCount;
- }
- };
-
- // 服务器级倒序排列
- class SortByServerLevelDescFunc
- {
- public:
- int operator()(CGameServerItem* l, CGameServerItem* r)
- {
- return l->m_GameServer.wServerLevel > r->m_GameServer.wServerLevel;
- }
- };
-
-
- /*
- 增加分组成功概率规则:1, 玩家往人数多的游戏服务上去匹配;
- 2, 同一服务器往人数多的桌子上去匹配;
- */
-
- ///---拉取场馆服务器
- //bool CAttemperEngineSink::OnTCPNetworkGetVenueGameSvr(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //效验参数
- // ASSERT(wDataSize >= sizeof(WORD));
- // if (wDataSize < sizeof(WORD))
- // {
- // return false;
- // }
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL)
- // {
- // return false;
- // }
- //
- // WORD * pwVenueID = (WORD *)pData; //场馆ID
- //
- // ///---检查有无救济
- // if (CanGetRelief(pIServerUserItem, *pwVenueID))
- // {
- // ///---当前金币不够进去,下发救济领取通知
- // return OnTCPNetworkQueryRelief(pData, wDataSize, dwSocketID);
- // }
- //
- // ///---如果为0,系统推荐一个合适的场馆给他(用于“快速开始”功能)
- // if (0 == *pwVenueID)
- // {
- // tagVenueInfo venueInfo;
- // for (std::vector<tagVenueInfo>::iterator it = m_vecVenueInfo.begin(); it != m_vecVenueInfo.end(); it++)
- // {
- // if (((it)->sMinScore == 0 || ((it)->sMinScore != 0 && pIServerUserItem->GetUserScore() >= (it)->sMinScore))
- // && ((it)->sMaxScore == 0 || ((it)->sMaxScore != 0 && pIServerUserItem->GetUserScore() <= (it)->sMaxScore)))
- // {
- // venueInfo = *it;
- // break;
- // }
- // }
- //
- // if (venueInfo.wVenueID != 0)
- // {
- // WORD venueID = venueInfo.wVenueID; //场馆ID
- // *pwVenueID = venueID;
- // }
- // else
- // {
- // ///---检查携带金币是否符合最低场要求
- // if (m_vecVenueInfo.size() > 0 && m_vecVenueInfo[0].sMinScore != 0 && pIServerUserItem->GetUserScore() < m_vecVenueInfo[0].sMinScore)
- // {
- // CString strHint;
- // strHint.Format(L"您的金币不足,金币最低要求%lld,请先兑换金币!", m_vecVenueInfo[0].sMinScore);
- // SendRequestFailure(pIServerUserItem, strHint, 1);
- // return true;
- // }
- //
- // SendRequestFailure(pIServerUserItem, L"没有合适的服务器", 1);
- // return true;
- // }
- // }
- //
- // ASSERT(*pwVenueID > 0);
- //
- // if (*pwVenueID <= 0) ///---场馆ID
- // {
- // SendRequestFailure(pIServerUserItem, TEXT("金币场馆ID无效!"), 0);
- //
- // TCHAR szHint[256] = { 0 };
- // swprintf(szHint, TEXT("场馆ID非法, venueID=%d"), *pwVenueID);
- // CTraceService::TraceString(szHint, TraceLevel_Warning);
- // return true;
- // }
- //
- // ///---检查有无救济
- // if (CanGetRelief(pIServerUserItem, *pwVenueID))
- // {
- // ///---当前金币不够进去,下发救济领取通知
- // return OnTCPNetworkQueryRelief(pData, wDataSize, dwSocketID);
- // }
- //
- // ///---先检查携带金币,不够
- // //if (pIServerUserItem->GetUserScore() <= 0)
- // //{
- // // SendRequestFailure(pIServerUserItem, TEXT("抱歉,您没有金币,请先兑换金币!"), 0);
- // // return true;
- // //}
- //
- // tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
- // int iXinYong = pUserInfo->iXinYong; //用户信用等级
- //
- //
- // //查找符合场馆ID的房间
- // std::vector<CGameServerItem*> gameSvrItemVec;
- // POSITION Position = NULL;
- // CGameServerItem * pGameServerItem = NULL;
- // for (DWORD i = 0; i < m_ServerListManager.GetGameServerCount(); i++)
- // {
- // //获取数据
- // pGameServerItem = m_ServerListManager.EmunGameServerItem(Position);
- // if (pGameServerItem == NULL
- // || pGameServerItem->m_GameServer.wNodeID != *pwVenueID)
- // {
- // continue;
- // }
- // gameSvrItemVec.push_back(pGameServerItem);
- // }
- //
- // ///---过滤不符合条件的服务器
- // std::sort(gameSvrItemVec.begin(), gameSvrItemVec.end(), SortByServerLevelDescFunc()); ///-- 排序目的是优先过滤高级别的服务器(防攻击用)
- // std::vector<CGameServerItem*>::iterator it = gameSvrItemVec.begin();
- // while (it != gameSvrItemVec.end())
- // {
- // CGameServerItem* pGameServerItemTemp = *it;
- //
- // if (NULL == pGameServerItemTemp)
- // {
- // it = gameSvrItemVec.erase(it);
- // continue;
- // }
- //
- // //不提供服务
- // if (pGameServerItemTemp->m_GameServer.bService < 1)
- // {
- // it = gameSvrItemVec.erase(it);
- // continue;
- // }
- //
- // //人员已满
- // if (pGameServerItemTemp->m_GameServer.dwOnLineCount >= pGameServerItemTemp->m_GameServer.dwFullCount)
- // {
- // it = gameSvrItemVec.erase(it);
- // continue;
- // }
- //
- // //玩家级别
- // if (pGameServerItemTemp->m_GameServer.wServerLevel > iXinYong && gameSvrItemVec.size() > 1/*总得返回一个用吧*/)
- // {
- // it = gameSvrItemVec.erase(it);
- // continue;
- // }
- //
- // it++;
- // }
- //
- // if (gameSvrItemVec.size() == 0) ///---没有GameServer
- // {
- // BYTE cbDataBuffer[SOCKET_TCP_PACKET] = { 0 };
- // memset(cbDataBuffer, 0, sizeof(cbDataBuffer));
- //
- // WORD wErrorCode = 1;
- // memcpy(cbDataBuffer, &wErrorCode, sizeof(wErrorCode));
- // m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_VENUE, SUB_GR_VENUE_S_GAME_SERVER, &cbDataBuffer, sizeof(WORD) + sizeof(tagVenueServer));
- //
- // SendRequestFailure(pIServerUserItem, TEXT("没有可用的金币场服务器!"), 1);
- //
- // TCHAR szHint[256] = { 0 };
- // swprintf(szHint, TEXT("没有可用的金币场服务器,venueID=%d"), *pwVenueID);
- // CTraceService::TraceString(szHint, TraceLevel_Warning);
- // return TRUE;
- // }
- //
- // ///---按人数倒序排列,返回最多人数的服务器
- // std::sort(gameSvrItemVec.begin(), gameSvrItemVec.end(), SortByLineCountDescFunc());
- //
- // tagGameServer tmpGameSvr = gameSvrItemVec[0]->m_GameServer;
- // tagVenueServer tmpVenueSvr;
- // tmpVenueSvr.wKindID = tmpGameSvr.wKindID;
- // tmpVenueSvr.wVenueID = tmpGameSvr.wNodeID;
- // tmpVenueSvr.wServerID = tmpGameSvr.wServerID;
- // tmpVenueSvr.wServerKind = tmpGameSvr.wServerKind;
- // StringCbCat(tmpVenueSvr.szServerAddr, 32, tmpGameSvr.szServerAddr);
- // tmpVenueSvr.wServerPort = tmpGameSvr.wServerPort;
- //
- // tagVenueInfo venueInfo = getVenueInfo(tmpVenueSvr.wVenueID);
- // ASSERT(venueInfo.wVenueID != 0);
- // if (venueInfo.wVenueID > 0)
- // {
- // tmpVenueSvr.lCellScore = venueInfo.sBaseScore;
- // tmpVenueSvr.lMinScore = venueInfo.sMinScore;
- // tmpVenueSvr.lMaxScore = venueInfo.sMaxScore;
- //
- // ///---检查携带金币是否符合要求
- // if (venueInfo.sMinScore != 0 && pIServerUserItem->GetUserScore() < venueInfo.sMinScore)
- // {
- // CString strHint;
- // strHint.Format(L"您的金币不足,本场最低要求金币%lld,请先兑换金币!", venueInfo.sMinScore);
- // SendRequestFailure(pIServerUserItem, strHint, 1);
- // return true;
- // }
- // else if (venueInfo.sMaxScore != 0 && pIServerUserItem->GetUserScore() > venueInfo.sMaxScore)
- // {
- // SendRequestFailure(pIServerUserItem, TEXT("抱歉,您的金币不符合进入要求,请选择合适的金币场!"), 1);
- // return true;
- // }
- // }
- //
- // BYTE cbDataBuffer[SOCKET_TCP_PACKET] = { 0 };
- // memset(cbDataBuffer, 0, sizeof(cbDataBuffer));
- //
- // WORD wErrorCode = 0;
- // memcpy(cbDataBuffer, &wErrorCode, sizeof(wErrorCode));
- // memcpy(cbDataBuffer + sizeof(WORD), &tmpVenueSvr, sizeof(tmpVenueSvr));
- // m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_VENUE, SUB_GR_VENUE_S_GAME_SERVER, &cbDataBuffer, sizeof(WORD) + sizeof(tagVenueServer));
- //
- // return true;
- //}
- //
- /////---上行拉取胜局榜
- //bool CAttemperEngineSink::OnTCPNetworkTopWinList(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // CTraceService::TraceString(TEXT("CAttemperEngineSink::OnTCPNetworkTopWinList"), TraceLevel_Debug);
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // /*m_pIRecordDataBaseEngine*/m_pIKernelDataBaseEngine->PostDataBaseRequest(DBO_GR_TOP_WIN_LIST, dwSocketID, NULL, 0);
- // return true;
- //}
- //
- /////---用户领取破产补助
- //bool CAttemperEngineSink::OnTCPNetworkGetRelief(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // ///---记录领取客户端的相关信息
- // DBR_GR_GetRelief getRelief;
- // getRelief.dwUserID = pIServerUserItem->GetUserID();
- // getRelief.dwClientAddr = pIServerUserItem->GetClientAddr();
- // lstrcpyn(getRelief.szMachineID, pIServerUserItem->GetMachineID(), CountArray(getRelief.szMachineID));
- //
- // m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_GET_RELIEF, dwSocketID, &getRelief, sizeof(getRelief));
- // return true;
- //}
- //
- /////+++拉取胜局榜列表的返回
- //BOOL CAttemperEngineSink::OnDBTopWinList(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // std::vector<tagTopWinInfo> vecTopWinInfo;
- // //效验参数
- // ASSERT(wDataSize % sizeof(tagTopWinInfo) == 0);
- // if (wDataSize % sizeof(tagTopWinInfo) != 0)
- // {
- // return FALSE;
- // }
- //
- // //变量定义
- // WORD wItemCount = wDataSize / sizeof(tagTopWinInfo);
- // tagTopWinInfo * pTopWin = (tagTopWinInfo *)pData;
- //
- // //更新数据
- // for (WORD i = 0; i < wItemCount; i++)
- // {
- // tagTopWinInfo tmpTopWinInfo(*pTopWin);
- // //插入列表
- // vecTopWinInfo.push_back(tmpTopWinInfo);
- // pTopWin++;
- // }
- //
- // if (vecTopWinInfo.size() <= 0 || NULL == m_pITCPNetworkEngine)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwContextID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (NULL == pIServerUserItem)
- // {
- // TRACE(L"\nOnDBTopWinList,胜局榜用户为空\n");
- // return false;
- // }
- //
- // bool bExistTopWin = false; ///---是否存在胜局榜
- // WORD wSendSize = 0;
- // BYTE cbDataBuffer[SOCKET_TCP_PACKET] = { 0 };
- // memset(cbDataBuffer, 0, sizeof(cbDataBuffer));
- //
- // for (std::vector<tagTopWinInfo>::iterator it = vecTopWinInfo.begin(); it != vecTopWinInfo.end(); it++)
- // {
- // //发送数据
- // if ((wSendSize + sizeof(tagTopWinInfo)) > sizeof(cbDataBuffer))
- // {
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_TOP_WIN_LIST_ACK, cbDataBuffer, wSendSize);
- // wSendSize = 0;
- // }
- //
- // //获取数据
- //
- // //拷贝数据
- // CopyMemory(cbDataBuffer + wSendSize, &(*it), sizeof(tagTopWinInfo));
- // wSendSize += sizeof(tagTopWinInfo);
- // bExistTopWin = true;
- //
- // }
- //
- // //发送剩余
- // if (wSendSize > 0)
- // {
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_TOP_WIN_LIST_ACK, cbDataBuffer, wSendSize);
- // }
- //
- // ///---不存在,发空
- // if (!bExistTopWin)
- // {
- // ASSERT(false);
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_TOP_WIN_LIST_ACK);
- // }
- //
- // return true;
- //}
- //
- /////+++钻石兑换金币列表(即金币兑换商品列表)
- //BOOL CAttemperEngineSink::OnDBExchangeConfigList(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //效验参数
- // ASSERT(wDataSize % sizeof(tagExchangeConfig) == 0);
- // if (wDataSize % sizeof(tagExchangeConfig) != 0)
- // {
- // return FALSE;
- // }
- //
- // std::vector<tagExchangeConfig> vecExchangeConfig;
- //
- // //变量定义
- // WORD wItemCount = wDataSize / sizeof(tagExchangeConfig);
- // tagExchangeConfig * pExchangeConfig = (tagExchangeConfig *)pData;
- //
- // for (WORD i = 0; i < wItemCount; i++)
- // {
- // tagExchangeConfig exchageConfig(*pExchangeConfig);
- // //插入列表
- // vecExchangeConfig.push_back(exchageConfig);
- // pExchangeConfig++;
- // }
- //
- // //金币兑换商品列表为空
- // if (vecExchangeConfig.size() <= 0)
- // {
- // ASSERT(FALSE);
- // return false;
- // }
- //
- // //获取用户
- // /*WORD wBindIndex = LOWORD(dwContextID);
- // auto pIServerUserItem = GetBindUserItem(wBindIndex);*/
- //
- // //用户效验
- // //ASSERT(pIServerUserItem != NULL);
- // //if (pIServerUserItem == NULL)
- // //{
- // // return false;
- // //}
- //
- // bool bExist = false; ///---是否存在
- // WORD wSendSize = 0;
- // BYTE cbDataBuffer[SOCKET_TCP_PACKET] = { 0 };
- // memset(cbDataBuffer, 0, sizeof(cbDataBuffer));
- //
- // for (std::vector<tagExchangeConfig>::iterator it = vecExchangeConfig.begin(); it != vecExchangeConfig.end(); it++)
- // {
- // //发送数据
- // if ((wSendSize + sizeof(tagExchangeConfig)) > sizeof(cbDataBuffer))
- // {
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_EXCHANGE, SUB_GR_EXCHANGE_PARAM_INFO, cbDataBuffer, wSendSize);
- // wSendSize = 0;
- // }
- //
- // //拷贝数据
- // CopyMemory(cbDataBuffer + wSendSize, &(*it), sizeof(tagExchangeConfig));
- // wSendSize += sizeof(tagExchangeConfig);
- // bExist = true;
- //
- // }
- //
- // //发送剩余
- // if (wSendSize > 0)
- // {
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_EXCHANGE, SUB_GR_EXCHANGE_PARAM_INFO, cbDataBuffer, wSendSize);
- // }
- //
- // ///---不存在,发空
- // if (!bExist)
- // {
- // ASSERT(false);
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_EXCHANGE, SUB_GR_EXCHANGE_PARAM_INFO);
- // }
- //
- // return true;
- //}
- //
- /////+++查询破产信息结果
- //BOOL CAttemperEngineSink::OnDBReliefInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //获取用户
- // WORD wBindIndex = LOWORD(dwContextID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // //ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL)
- // {
- // //ASSERT(FALSE);
- // return false;
- // }
- //
- // //提取数据
- // tagReliefInfo * pReliefInfo = (tagReliefInfo *)pData;
- //
- // tagReliefInfo reliefInfo;
- // reliefInfo.wTotalCount = pReliefInfo->wTotalCount;
- // reliefInfo.wGetCount = pReliefInfo->wGetCount;
- // reliefInfo.dwReliefScore = pReliefInfo->dwReliefScore;
- //
- // if (pReliefInfo->wTotalCount > 0)
- // {
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_RELIEF_NOTIFY, &reliefInfo, sizeof(reliefInfo));
- // }
- //
- // ///---更新救济领取信息
- // pIServerUserItem->GetUserInfo()->dwUpdateReliefLeftCount = GetTickCount();
- // pIServerUserItem->GetUserInfo()->wReliefLeftCount = pReliefInfo->wTotalCount - pReliefInfo->wGetCount;
- //
- // return true;
- //}
- //
- /////+++下行领取破产结果
- //BOOL CAttemperEngineSink::OnDBGetRelief(DWORD dwContextID, VOID * pData, WORD wDataSize)
- //{
- // //获取用户
- // WORD wBindIndex = LOWORD(dwContextID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ///ASSERT(pIServerUserItem != NULL); ///---还没领取完,就断线了
- // if (pIServerUserItem == NULL)
- // {
- // return false;
- // }
- //
- // //提取数据
- // tagReliefScore * pReliefScore = (tagReliefScore *)pData;
- //
- // tagReliefScore reliefScore;
- // reliefScore.dwReliefScore = pReliefScore->dwReliefScore;
- // reliefScore.lCurrScore = pReliefScore->lCurrScore;
- //
- // ///更新用户最新携带
- // pIServerUserItem->GetUserInfo()->lScore = pReliefScore->lCurrScore;
- //
- // TRACE(L"\n领取破产补助成功 userid=%d reliefScore.dwReliefScore=%d reliefScore.lScore=%lld\n", pIServerUserItem->GetUserID(), reliefScore.dwReliefScore, reliefScore.lCurrScore);
- //
- // //发送数据[3:50]
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_GET_RELIEF_ACK, &reliefScore, sizeof(reliefScore));
- //
- // /////---广播积分变动协议
- // //{
- // // CMD_GR_UserScore UserScore;
- // // tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
- //
- // // //变量定义
- // // CMD_GR_MobileUserScore MobileUserScore;
- //
- // // MobileUserScore.dwUserID = pUserInfo->dwUserID;
- // // MobileUserScore.UserScore.lScore = pUserInfo->lScore;
- // // MobileUserScore.UserScore.lScore += pIServerUserItem->GetTrusteeScore();
- // // MobileUserScore.UserScore.lScore += pIServerUserItem->GetFrozenedScore();
- //
- // // //发送数据
- // // SendDataBatchToMobileUser(pIServerUserItem->GetTableID(), MDM_GR_USER, SUB_GR_USER_SCORE, &MobileUserScore, sizeof(MobileUserScore));
- // // TRACE(L"\n广播积分变动协议 userid=%d MobileUserScore.UserScore.lScore=%lld\n", pIServerUserItem->GetUserID(), MobileUserScore.UserScore.lScore);
- // //}
- //
- // //---本桌用户广播
- // WORD wTableID = pIServerUserItem->GetTableID();
- // auto it = m_TableFrameArray.find(wTableID);
- // if (it != m_TableFrameArray.end())
- // {
- // auto pITable = it->second;
- // if (pITable != NULL)
- // {
- // tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
- //
- // //变量定义
- // CMD_GR_MobileUserScore MobileUserScore;
- //
- // MobileUserScore.dwUserID = pUserInfo->dwUserID;
- // MobileUserScore.UserScore.lScore = pUserInfo->lScore;
- // MobileUserScore.UserScore.lScore += pIServerUserItem->GetTrusteeScore();
- // MobileUserScore.UserScore.lScore += pIServerUserItem->GetFrozenedScore();
- //
- // pITable->SendTableData(INVALID_CHAIR, SUB_GR_USER_SCORE, &MobileUserScore, sizeof(MobileUserScore), MDM_GR_USER);
- // TRACE(L"\n广播积分变动协议 userid=%d MobileUserScore.UserScore.lScore=%lld\n", pIServerUserItem->GetUserID(), MobileUserScore.UserScore.lScore);
- // }
- // }
- //
- //
- // ////{
- // //// CMD_GR_UserScore UserScore;
- // //// tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
- //
- // //// //变量定义
- // //// CMD_GR_MobileUserScore MobileUserScore;
- //
- // //// MobileUserScore.dwUserID = pUserInfo->dwUserID;
- // //// MobileUserScore.UserScore.lScore = pUserInfo->lScore;
- // //// MobileUserScore.UserScore.lScore += pIServerUserItem->GetTrusteeScore();
- // //// MobileUserScore.UserScore.lScore += pIServerUserItem->GetFrozenedScore();
- //
- // //// //发送数据
- // //// SendDataBatchToMobileUser(pIServerUserItem->GetTableID(), MDM_GR_USER, SUB_GR_USER_SCORE, &MobileUserScore, sizeof(MobileUserScore));
- // //// TRACE(L"\n广播积分变动协议 userid=%d MobileUserScore.UserScore.lScore=%lld\n", pIServerUserItem->GetUserID(), MobileUserScore.UserScore.lScore);
- // ////}
- //
- // return true;
- //}
-
- //列表
- bool CAttemperEngineSink::OnDBGetClubList(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_ClubList_Ack * pClubListAck = (CMD_GR_ClubList_Ack *)pData;
- if (pData == NULL) return false;
-
- for (int i = 0; i <20; i++)
- {
- pIServerUserItem->GetUserInfo()->dwClubID[i] = 0;
- }
- for (int i = 0; i < pClubListAck->wClubCount;i++)
- {
- pIServerUserItem->GetUserInfo()->dwClubID[i] = pClubListAck->csGameClubInfo[i].dwClubID;
- }
-
- Club::PB_CS_S_ClubList_Ack ClubList;
- ClubList.set_wnewscount(pClubListAck->wNewsCount);
- ClubList.set_wclubcount(pClubListAck->wClubCount);
- for (WORD i = 0; i < pClubListAck->wClubCount; i++)
- {
- Club::PB_CS_C_ClubInfo* ClubInfo = ClubList.add_csgameclubinfo();
- ClubInfo->set_dwclubid(pClubListAck->csGameClubInfo[i].dwClubID);
- std::string szClubName = CW2AEX<1024>(pClubListAck->csGameClubInfo[i].szClubName, CP_UTF8).m_psz;
- std::string szHostName = CW2AEX<1024>(pClubListAck->csGameClubInfo[i].szHostName, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(pClubListAck->csGameClubInfo[i].szHeadUrl, CP_UTF8).m_psz;
- ClubInfo->set_szclubname(szClubName);
- ClubInfo->set_cbisowner(pClubListAck->csGameClubInfo[i].cbIsOwner);
- ClubInfo->set_wtotalnum(pClubListAck->csGameClubInfo[i].wTotalNum);
- ClubInfo->set_wwaittablenum(pClubListAck->csGameClubInfo[i].wWaitTableNum);
- ClubInfo->set_wonlinenum(pClubListAck->csGameClubInfo[i].wOnLineNum);
- ClubInfo->set_wwaitusernum(pClubListAck->csGameClubInfo[i].wWaitUserNum);
- ClubInfo->set_dwownerid(pClubListAck->csGameClubInfo[i].dwOwnerID);
- ClubInfo->set_szhostname(szHostName);
- ClubInfo->set_szheadurl(szHeadUrl);
- ClubInfo->set_temp1(pClubListAck->csGameClubInfo[i].temp1);
- ClubInfo->set_temp2(pClubListAck->csGameClubInfo[i].temp2);
- ClubInfo->set_temp3(pClubListAck->csGameClubInfo[i].temp3);
- ClubInfo->set_temp4(pClubListAck->csGameClubInfo[i].temp4);
- ClubInfo->mutable_csgameconfig()->set_wsubgameid(pClubListAck->csGameClubInfo[i].csGameConfig.wSubGameID);
- ClubInfo->mutable_csgameconfig()->set_wplayrule(pClubListAck->csGameClubInfo[i].csGameConfig.wPlayRule);
- ClubInfo->mutable_csgameconfig()->set_wmaxfanrule(pClubListAck->csGameClubInfo[i].csGameConfig.wMaxFanRule);
- ClubInfo->mutable_csgameconfig()->set_wmaxscore(pClubListAck->csGameClubInfo[i].csGameConfig.wMaxScore);
- ClubInfo->mutable_csgameconfig()->set_wplaycountrule(pClubListAck->csGameClubInfo[i].csGameConfig.wPlayCountRule);
- ClubInfo->mutable_csgameconfig()->set_whadplaycount(pClubListAck->csGameClubInfo[i].csGameConfig.wHadPlayCount);
- ClubInfo->mutable_csgameconfig()->set_zmextrarule(pClubListAck->csGameClubInfo[i].csGameConfig.zmExtraRule);
- ClubInfo->mutable_csgameconfig()->set_dghrule(pClubListAck->csGameClubInfo[i].csGameConfig.dghRule);
- std::string sPrivateTableID = CW2AEX<1024>(pClubListAck->csGameClubInfo[i].csGameConfig.sPrivateTableID, CP_UTF8).m_psz;
- ClubInfo->mutable_csgameconfig()->set_sprivatetableid(sPrivateTableID);
- ClubInfo->mutable_csgameconfig()->set_bduolai(pClubListAck->csGameClubInfo[i].csGameConfig.bDuoLai);
- ClubInfo->mutable_csgameconfig()->set_wfengding(pClubListAck->csGameClubInfo[i].csGameConfig.wFengDing);
- ClubInfo->mutable_csgameconfig()->set_tmp1(pClubListAck->csGameClubInfo[i].csGameConfig.tmp1);
- ClubInfo->mutable_csgameconfig()->set_tmp2(pClubListAck->csGameClubInfo[i].csGameConfig.tmp2);
- ClubInfo->mutable_csgameconfig()->set_tmp3(pClubListAck->csGameClubInfo[i].csGameConfig.tmp3);
- ClubInfo->mutable_csgameconfig()->set_tmp4(pClubListAck->csGameClubInfo[i].csGameConfig.tmp4);
- ClubInfo->mutable_csgameconfig()->set_tmp5(pClubListAck->csGameClubInfo[i].csGameConfig.tmp5);
- }
- //发送数据
- std::string pbdata = ClubList.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBLIST_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //会员
- bool CAttemperEngineSink::OnDBGetClubUser(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_ClubUser_Ack * pClubUserAck = (CMD_GR_ClubUser_Ack *)pData;
- if(pClubUserAck == NULL) return false;
-
- for (int i = 0; i < pClubUserAck->wCount; i++)
- {
- //从其全局服务器上找
- if (i >= 20){ break; }
- auto iter = m_OnLineUserAll.find(pClubUserAck->csMemberInfo[i].dwUserID);
- if (iter != m_OnLineUserAll.end())
- {
- pClubUserAck->csMemberInfo[i].isOnline = 1;
- }
- }
- Club::PB_CS_S_ClubUser_Ack ClubRecord;
- ClubRecord.set_cbhost(pClubUserAck->cbHost);
- ClubRecord.set_dwclubid(pClubUserAck->dwClubID);
- ClubRecord.set_wcount(pClubUserAck->wCount);
- for (WORD i = 0; i < pClubUserAck->wCount; i++)
- {
- Club::PB_CS_S_MemberInfo* RecordInfo = ClubRecord.add_csmemberinfo();
- RecordInfo->set_bangmaid(pClubUserAck->csMemberInfo[i].BangMaID);
- RecordInfo->set_cbstaus(pClubUserAck->csMemberInfo[i].cbStaus);
- RecordInfo->set_ishost(pClubUserAck->csMemberInfo[i].isHost);
- RecordInfo->set_isonline(pClubUserAck->csMemberInfo[i].isOnline);
- RecordInfo->set_dwuserid(pClubUserAck->csMemberInfo[i].dwUserID);
- std::string szName = CW2AEX<1024>(pClubUserAck->csMemberInfo[i].szName, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(pClubUserAck->csMemberInfo[i].szHeadUrl, CP_UTF8).m_psz;
- RecordInfo->set_szname(szName);
- RecordInfo->set_szheadurl(szHeadUrl);
- }
- //发送数据
- std::string pbdata = ClubRecord.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBUSER_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
-
- //会员
- bool CAttemperEngineSink::OnDBGetClubUserEx(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_ClubUser_Ack_Ex * pClubUserAck = (CMD_GR_ClubUser_Ack_Ex *)pData;
- if (pClubUserAck == NULL) return false;
-
- for (int i = 0; i < pClubUserAck->wMemCount; i++)
- {
- //从其全局服务器上找
- if (i >= 1000){ break; }
- auto iter = m_OnLineUserAll.find(pClubUserAck->csMemberInfo[i].dwUserID);
- if (iter != m_OnLineUserAll.end())
- {
- pClubUserAck->csMemberInfo[i].isOnline = 1;
- }
- }
-
- //排序
- for (int i = 0; i < pClubUserAck->wMemCount; i++)
- {
- if (pClubUserAck->csMemberInfo[i].isHost > 0 || pClubUserAck->csMemberInfo[i].Agree == 0 ) continue;
- if (pClubUserAck->csMemberInfo[i].isOnline == 0 && pClubUserAck->csMemberInfo[i].dwUserID > 0)
- {
- for (int k = i + 1; k < pClubUserAck->wMemCount; k++)
- {
- if (pClubUserAck->csMemberInfo[k].isOnline == 1)
- {
- CMD_S_MemberInfoEx Member;
- ZeroMemory(&Member, sizeof(CMD_S_MemberInfoEx));
- CopyMemory(&Member, &(pClubUserAck->csMemberInfo[i]), sizeof(CMD_S_MemberInfoEx));
-
- ZeroMemory(&(pClubUserAck->csMemberInfo[i]), sizeof(CMD_S_MemberInfoEx));
- CopyMemory(&(pClubUserAck->csMemberInfo[i]), &(pClubUserAck->csMemberInfo[k]), sizeof(CMD_S_MemberInfoEx));
-
- ZeroMemory(&(pClubUserAck->csMemberInfo[k]), sizeof(CMD_S_MemberInfoEx));
- CopyMemory(&(pClubUserAck->csMemberInfo[k]), &Member, sizeof(CMD_S_MemberInfoEx));
- break;
- }
- }
- }
- }
-
- //投递请求
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET_USER_ONLINE, dwContextID, pClubUserAck, sizeof(CMD_GR_ClubUser_Ack_Ex));
- }
-
-
- //通知
- bool CAttemperEngineSink::OnDBGetClubMessage(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_ClubMessage_Ack * pClubMessageAck = (CMD_GR_ClubMessage_Ack *)pData;
- if (pClubMessageAck == NULL) return false;
-
- Club::PB_CS_S_ClubMessage_Ack ClubMessage;
- ClubMessage.set_wcount(pClubMessageAck->wCount);
- for (WORD i = 0; i < pClubMessageAck->wCount; i++)
- {
- Club::pb_MessageInfo* MessageInfo = ClubMessage.add_messageinfo();
- MessageInfo->set_dtype(pClubMessageAck->CMD_S_MessageInfo[i].dType);
- std::string szContent = CW2AEX<1024>(pClubMessageAck->CMD_S_MessageInfo[i].szContent, CP_UTF8).m_psz;
- MessageInfo->set_szcontent(szContent);
- MessageInfo->set_dtactiontime(pClubMessageAck->CMD_S_MessageInfo[i].dtActionTime);
- }
- //发送数据
- std::string pbdata = ClubMessage.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBMESSAGE_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //记录
- bool CAttemperEngineSink::OnDBGetClubRecord(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_ClubRecord_Ack * pClubRecordAck = (CMD_GR_ClubRecord_Ack *)pData;
- if (pClubRecordAck == NULL) return false;
-
- //发送数据
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBRECORD_ACK, pClubRecordAck, wDataSize);
- return true;
- }
-
- //记录
- bool CAttemperEngineSink::OnDBGetClubRecordEx(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_ClubRecord_Ack_EX * pClubRecordAck = (CMD_GR_ClubRecord_Ack_EX *)pData;
- if (pClubRecordAck == NULL) return false;
-
- Club::PB_CS_S_ClubRecord_Ack_EX ClubRecord;
- ClubRecord.set_wcount(pClubRecordAck->wCount);
- ClubRecord.set_dwtablecount(pClubRecordAck->dwTableCount);
- ClubRecord.set_dwzunshi(pClubRecordAck->dwZunShi);
- ClubRecord.set_dwclubid(pClubRecordAck->dwClubID);
- for (WORD i = 0; i < pClubRecordAck->wCount; i++)
- {
- Club::PB_CS_S_RecordInfoEX* RecordInfo = ClubRecord.add_csrecordinfo();
- for (WORD j = 0; j < 4; j++)
- {
- RecordInfo->add_score(pClubRecordAck->csRecordInfo[i].Score[j]);
- RecordInfo->add_tmp(pClubRecordAck->csRecordInfo[i].Tmp[j]);
- }
- RecordInfo->mutable_record()->set_dwtableid(pClubRecordAck->csRecordInfo[i].Record.dwTableID);
- RecordInfo->mutable_record()->set_cbjushu(pClubRecordAck->csRecordInfo[i].Record.cbJuShu);
- RecordInfo->mutable_record()->set_cbpayway(pClubRecordAck->csRecordInfo[i].Record.cbPayWay);
- RecordInfo->mutable_record()->set_dwtableownerid(pClubRecordAck->csRecordInfo[i].Record.dwTableOwnerID);
- RecordInfo->mutable_record()->set_dtcreatetime(pClubRecordAck->csRecordInfo[i].Record.dtCreateTime);
- for (WORD k = 0; k < 4; k++)
- {
- RecordInfo->mutable_record()->add_playerid(pClubRecordAck->csRecordInfo[i].Record.PlayerID[k]);
- }
- for (WORD l = 0; l < 4; l++)
- {
- Club::pb_PlayerName* PlayerName = RecordInfo->mutable_record()->add_playername1();
- std::string PlayerName2 = CW2AEX<1024>(pClubRecordAck->csRecordInfo[i].Record.PlayerName[l], CP_UTF8).m_psz;
- PlayerName->set_playername2(PlayerName2);
- }
- }
- //发送数据
- std::string pbdata = ClubRecord.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBRECORD_ACK_EX, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //俱乐部局数排名
- bool CAttemperEngineSink::OnDBGetClubPlaygames_Ack(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
- tagClubPlaygames2* pClubRecordAck = (tagClubPlaygames2*)pData;
- if (pClubRecordAck == NULL)
- {
- return false;
- }
-
- Club::PB_CS_S_tagClubPlaygames ClubRecord;
- ClubRecord.set_wdatecount(pClubRecordAck->wDateCount);
- ClubRecord.set_temp(pClubRecordAck->temp);
- for (WORD i = 0; i < 10; i++)
- {
- if (pClubRecordAck->Playgames[i].dwUserID == 0)continue;
- Club::PB_CS_tagClubPlaygames* pPlaygame = ClubRecord.add_playgames();
- pPlaygame->set_dwuserid(pClubRecordAck->Playgames[i].dwUserID);
- pPlaygame->set_mcount(pClubRecordAck->Playgames[i].mCount);
- std::string szUserName = CW2AEX<1024>(pClubRecordAck->Playgames[i].szUserName, CP_UTF8).m_psz;
- std::string szHeadImg = CW2AEX<1024>(pClubRecordAck->Playgames[i].szHeadImg, CP_UTF8).m_psz;
- pPlaygame->set_szusername(szUserName);
- pPlaygame->set_szheadimg(szHeadImg);
- }
- //发送数据
- std::string pbdata = ClubRecord.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_CLUB_GET_COUNT_PLAYGAEMS_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
- //俱乐部积分排名
- bool CAttemperEngineSink::OnDBGetClubIntegral_Ack(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
- tagClubIntegral2* pClubRecordAck = (tagClubIntegral2*)pData;
- if (pClubRecordAck == NULL)
- {
- return false;
- }
-
- Club::PB_CS_S_tagClubIntegral Integral;
- Integral.set_wdatecount(pClubRecordAck->wDateCount);
- Integral.set_temp(pClubRecordAck->temp);
- for (WORD i = 0; i < 10; i++)
- {
- if (pClubRecordAck->Integral[i].dwUserID == 0)continue;
- Club::PB_CS_tagClubIntegral* pIntegral = Integral.add_integral();
- pIntegral->set_dwuserid(pClubRecordAck->Integral[i].dwUserID);
- pIntegral->set_mcount(pClubRecordAck->Integral[i].mCount);
- pIntegral->set_mcount(pClubRecordAck->Integral[i].mJiFen);
- std::string szUserName = CW2AEX<1024>(pClubRecordAck->Integral[i].szUserName, CP_UTF8).m_psz;
- std::string szHeadImg = CW2AEX<1024>(pClubRecordAck->Integral[i].szHeadImg, CP_UTF8).m_psz;
- pIntegral->set_szusername(szUserName);
- pIntegral->set_szheadimg(szHeadImg);
- }
- //发送数据
- std::string pbdata = Integral.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_CLUB_GET_COUNT_INTEGRAL_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- //创建
- bool CAttemperEngineSink::OnDBCreateClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_Club_Action_Ack4 * pActionAck1 = (DBR_GR_Club_Action_Ack4 *)pData;
- if (pActionAck1 == NULL) return false;
-
- if (pActionAck1->Result == 1)
- {
- for (int i = 0; i < 20; i++)
- {
- if (pIServerUserItem->GetUserInfo()->dwClubID[i] == 0)
- {
- pIServerUserItem->GetUserInfo()->dwClubID[i] = pActionAck1->ClubInfo.dwClubID;
- break;
- }
- }
- }
-
- //自动建房
- if (pActionAck1->ClubInfo.temp1 == 2)
- {
-
- this->OnAutoCreateRoomToDB(pActionAck1->ClubInfo.dwClubID, pIServerUserItem->GetUserID(), 0);
- }
-
- CMD_GR_Club_Action_Ack1 ActionAck1;
- ZeroMemory(&ActionAck1, sizeof(CMD_GR_Club_Action_Ack1));
-
- ActionAck1.Result = pActionAck1->Result;
- CopyMemory(ActionAck1.Message, pActionAck1->Message, sizeof(ActionAck1.Message));
-
- Club::PB_CS_S_Club_Action_Ack1 ClubAction;
- ClubAction.set_result(ActionAck1.Result);
- std::string Message = CW2AEX<1024>(ActionAck1.Message, CP_UTF8).m_psz;
- ClubAction.set_message(Message);
- //发送数据
- std::string pbdata = ClubAction.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_CREATE_CLUB_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
- //俱乐部额外玩法修改
- bool CAttemperEngineSink::OnDBUpdateAddClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_Club_Action_Ack1Add * pActionAck = (CMD_GR_Club_Action_Ack1Add *)pData;
- if (pActionAck == NULL) return false;
-
- Club::PB_CS_S_Club_Action_Ack1Add ClubAction;
- ClubAction.set_result(pActionAck->Result);
- std::string Message = CW2AEX<1024>(pActionAck->Message, CP_UTF8).m_psz;
- ClubAction.set_message(Message);
- ClubAction.mutable_autoaddinfo()->set_dwclubid(pActionAck->AutoAddInfo.dwClubID);
- ClubAction.mutable_autoaddinfo()->set_cbwanfaid(pActionAck->AutoAddInfo.cbWanfaId);
- ClubAction.mutable_autoaddinfo()->set_cbstatus(pActionAck->AutoAddInfo.cbStatus);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wsubgameid(pActionAck->AutoAddInfo.gameconfig.wSubGameID);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wplayrule(pActionAck->AutoAddInfo.gameconfig.wPlayRule);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wmaxfanrule(pActionAck->AutoAddInfo.gameconfig.wMaxFanRule);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wmaxscore(pActionAck->AutoAddInfo.gameconfig.wMaxScore);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wplaycountrule(pActionAck->AutoAddInfo.gameconfig.wPlayCountRule);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_whadplaycount(pActionAck->AutoAddInfo.gameconfig.wHadPlayCount);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_zmextrarule(pActionAck->AutoAddInfo.gameconfig.zmExtraRule);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_dghrule(pActionAck->AutoAddInfo.gameconfig.dghRule);
- std::string sPrivateTableID = CW2AEX<1024>(pActionAck->AutoAddInfo.gameconfig.sPrivateTableID, CP_UTF8).m_psz;
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_sprivatetableid(sPrivateTableID);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_bduolai(pActionAck->AutoAddInfo.gameconfig.bDuoLai);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wfengding(pActionAck->AutoAddInfo.gameconfig.wFengDing);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp1(pActionAck->AutoAddInfo.gameconfig.tmp1);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp2(pActionAck->AutoAddInfo.gameconfig.tmp2);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp3(pActionAck->AutoAddInfo.gameconfig.tmp3);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp4(pActionAck->AutoAddInfo.gameconfig.tmp4);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp5(pActionAck->AutoAddInfo.gameconfig.tmp5);
- //发送数据
- std::string pbdata = ClubAction.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_MORE_WANFA_ACK, (void*)pbdata.c_str(), pbdata.length());
- if (1 == pActionAck->AutoAddInfo.cbStatus && pActionAck->Result == 1)
- {//自动建房
-
- this->OnAutoCreateRoomToDB(pActionAck->AutoAddInfo.dwClubID, pIServerUserItem->GetUserID(), pActionAck->AutoAddInfo.cbWanfaId);
- }
- return true;
-
- }
- //修改
- bool CAttemperEngineSink::OnDBUpdateClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_Club_Action_Ack2Ex * pActionAck2 = (CMD_GR_Club_Action_Ack2Ex *)pData;
- if (pActionAck2 == NULL) return false;
-
- //构造返回参数
- CMD_GR_Club_Action_Ack2 ActionAck2;
- ZeroMemory(&ActionAck2, sizeof(CMD_GR_Club_Action_Ack2));
- CopyMemory(&ActionAck2, &(pActionAck2->Ack2), sizeof(CMD_GR_Club_Action_Ack2));
-
- //如果开房设置作了修改
- if (pActionAck2->TableChoiceChange == 1)
- {
- //自动建房
- if (pActionAck2->Ack2.ClubInfo.temp1 == 2)
- {
-
- this->OnAutoCreateRoomToDB(pActionAck2->Ack2.ClubInfo.dwClubID, pIServerUserItem->GetUserID(), 0);
-
- //更改已创好房的属性
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Temp = it->second;
- if (Temp.roomType == 1 && Temp.tmp6[0] == pActionAck2->Ack2.ClubInfo.dwClubID && Temp.tmp5 == 0)
- {
- Temp.dwInsert_UpData_Del = 1;
- Temp.tmp5 = 1;
- UpdataBodyOwnRoomToServer(&Temp, sizeof(Temp));
- }
- it++;
- }
- }
- else
- {
- //更改已创好房的属性
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Temp = it->second;
- if (Temp.roomType == 1 && Temp.tmp6[0] == pActionAck2->Ack2.ClubInfo.dwClubID && Temp.tmp5 == 1)
- {
- Temp.dwInsert_UpData_Del = 1;
- Temp.tmp5 = 0;
- UpdataBodyOwnRoomToServer(&Temp, sizeof(Temp));
- }
- it++;
- }
- }
- }
- Club::PB_CS_S_Club_Action_Ack2 ClubList;
- ClubList.set_result(ActionAck2.Result);
- std::string Message = CW2AEX<1024>(ActionAck2.Message, CP_UTF8).m_psz;
- std::string szClubName = CW2AEX<1024>(ActionAck2.ClubInfo.szClubName, CP_UTF8).m_psz;
- std::string szHostName = CW2AEX<1024>(ActionAck2.ClubInfo.szHostName, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(ActionAck2.ClubInfo.szHeadUrl, CP_UTF8).m_psz;
- ClubList.set_message(Message);
- ClubList.mutable_clubinfo()->set_dwclubid(ActionAck2.ClubInfo.dwClubID);
- ClubList.mutable_clubinfo()->set_szclubname(szClubName);
- ClubList.mutable_clubinfo()->set_cbisowner(ActionAck2.ClubInfo.cbIsOwner);
- ClubList.mutable_clubinfo()->set_wtotalnum(ActionAck2.ClubInfo.wTotalNum);
- ClubList.mutable_clubinfo()->set_wwaittablenum(ActionAck2.ClubInfo.wWaitTableNum);
- ClubList.mutable_clubinfo()->set_wonlinenum(ActionAck2.ClubInfo.wOnLineNum);
- ClubList.mutable_clubinfo()->set_wwaitusernum(ActionAck2.ClubInfo.wWaitUserNum);
- ClubList.mutable_clubinfo()->set_dwownerid(ActionAck2.ClubInfo.dwOwnerID);
- ClubList.mutable_clubinfo()->set_szhostname(szHostName);
- ClubList.mutable_clubinfo()->set_szheadurl(szHeadUrl);
- ClubList.mutable_clubinfo()->set_temp1(ActionAck2.ClubInfo.temp1);
- ClubList.mutable_clubinfo()->set_temp2(ActionAck2.ClubInfo.temp2);
- ClubList.mutable_clubinfo()->set_temp3(ActionAck2.ClubInfo.temp3);
- ClubList.mutable_clubinfo()->set_temp4(ActionAck2.ClubInfo.temp4);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wsubgameid(ActionAck2.ClubInfo.csGameConfig.wSubGameID);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wplayrule(ActionAck2.ClubInfo.csGameConfig.wPlayRule);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wmaxfanrule(ActionAck2.ClubInfo.csGameConfig.wMaxFanRule);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wmaxscore(ActionAck2.ClubInfo.csGameConfig.wMaxScore);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wplaycountrule(ActionAck2.ClubInfo.csGameConfig.wPlayCountRule);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_whadplaycount(ActionAck2.ClubInfo.csGameConfig.wHadPlayCount);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_zmextrarule(ActionAck2.ClubInfo.csGameConfig.zmExtraRule);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_dghrule(ActionAck2.ClubInfo.csGameConfig.dghRule);
- std::string sPrivateTableID = CW2AEX<1024>(ActionAck2.ClubInfo.csGameConfig.sPrivateTableID, CP_UTF8).m_psz;
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_sprivatetableid(sPrivateTableID);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_bduolai(ActionAck2.ClubInfo.csGameConfig.bDuoLai);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wfengding(ActionAck2.ClubInfo.csGameConfig.wFengDing);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp1(ActionAck2.ClubInfo.csGameConfig.tmp1);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp2(ActionAck2.ClubInfo.csGameConfig.tmp2);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp3(ActionAck2.ClubInfo.csGameConfig.tmp3);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp4(ActionAck2.ClubInfo.csGameConfig.tmp4);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp5(ActionAck2.ClubInfo.csGameConfig.tmp5);
- //发送数据
- std::string pbdata = ClubList.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_UPDATE_CLUB_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //删除
- bool CAttemperEngineSink::OnDBDeleteClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_Club_Action_Ack1 * pActionAck1 = (DBR_GR_Club_Action_Ack1 *)pData;
- if (pActionAck1 == NULL) return false;
-
- //遍历房间修改已经创房的属性
-
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Temp = it->second;
- if (Temp.roomType == 1 && Temp.tmp6[0] == pActionAck1->dwClubID)
- {
- Temp.roomType = 0;
- Temp.tmp6[0] = 0;
- Temp.dwInsert_UpData_Del = 1;
- UpdataBodyOwnRoomToServer(&Temp, sizeof(Temp));
- }
- it++;
- }
- }
-
-
-
- //返回数据
- CMD_GR_Club_Action_Ack1 ActionAck1;
- ZeroMemory(&ActionAck1, sizeof(ActionAck1));
-
- ActionAck1.Result = pActionAck1->Result;
- CopyMemory(ActionAck1.Message, pActionAck1->Message, sizeof(ActionAck1.Message));
- Club::PB_CS_S_Club_Action_Ack1 ClubAction;
- ClubAction.set_result(ActionAck1.Result);
- std::string Message = CW2AEX<1024>(ActionAck1.Message, CP_UTF8).m_psz;
- ClubAction.set_message(Message);
- //发送数据
- std::string pbdata = ClubAction.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_DELETE_CLUB_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //查看
- bool CAttemperEngineSink::OnDBGetClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_Club_Action_Ack2 * pActionAck2 = (CMD_GR_Club_Action_Ack2 *)pData;
- if (pActionAck2 == NULL) return false;
-
- Club::PB_CS_S_Club_Action_Ack2 ClubList;
- ClubList.set_result(pActionAck2->Result);
- std::string Message = CW2AEX<1024>(pActionAck2->Message, CP_UTF8).m_psz;
- std::string szClubName = CW2AEX<1024>(pActionAck2->ClubInfo.szClubName, CP_UTF8).m_psz;
- std::string szHostName = CW2AEX<1024>(pActionAck2->ClubInfo.szHostName, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(pActionAck2->ClubInfo.szHeadUrl, CP_UTF8).m_psz;
- ClubList.set_message(Message);
- ClubList.mutable_clubinfo()->set_dwclubid(pActionAck2->ClubInfo.dwClubID);
- ClubList.mutable_clubinfo()->set_szclubname(szClubName);
- ClubList.mutable_clubinfo()->set_cbisowner(pActionAck2->ClubInfo.cbIsOwner);
- ClubList.mutable_clubinfo()->set_wtotalnum(pActionAck2->ClubInfo.wTotalNum);
- ClubList.mutable_clubinfo()->set_wwaittablenum(pActionAck2->ClubInfo.wWaitTableNum);
- ClubList.mutable_clubinfo()->set_wonlinenum(pActionAck2->ClubInfo.wOnLineNum);
- ClubList.mutable_clubinfo()->set_wwaitusernum(pActionAck2->ClubInfo.wWaitUserNum);
- ClubList.mutable_clubinfo()->set_dwownerid(pActionAck2->ClubInfo.dwOwnerID);
- ClubList.mutable_clubinfo()->set_szhostname(szHostName);
- ClubList.mutable_clubinfo()->set_szheadurl(szHeadUrl);
- ClubList.mutable_clubinfo()->set_temp1(pActionAck2->ClubInfo.temp1);
- ClubList.mutable_clubinfo()->set_temp2(pActionAck2->ClubInfo.temp2);
- ClubList.mutable_clubinfo()->set_temp3(pActionAck2->ClubInfo.temp3);
- ClubList.mutable_clubinfo()->set_temp4(pActionAck2->ClubInfo.temp4);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wsubgameid(pActionAck2->ClubInfo.csGameConfig.wSubGameID);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wplayrule(pActionAck2->ClubInfo.csGameConfig.wPlayRule);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wmaxfanrule(pActionAck2->ClubInfo.csGameConfig.wMaxFanRule);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wmaxscore(pActionAck2->ClubInfo.csGameConfig.wMaxScore);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wplaycountrule(pActionAck2->ClubInfo.csGameConfig.wPlayCountRule);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_whadplaycount(pActionAck2->ClubInfo.csGameConfig.wHadPlayCount);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_zmextrarule(pActionAck2->ClubInfo.csGameConfig.zmExtraRule);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_dghrule(pActionAck2->ClubInfo.csGameConfig.dghRule);
- std::string sPrivateTableID = CW2AEX<1024>(pActionAck2->ClubInfo.csGameConfig.sPrivateTableID, CP_UTF8).m_psz;
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_sprivatetableid(sPrivateTableID);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_bduolai(pActionAck2->ClubInfo.csGameConfig.bDuoLai);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_wfengding(pActionAck2->ClubInfo.csGameConfig.wFengDing);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp1(pActionAck2->ClubInfo.csGameConfig.tmp1);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp2(pActionAck2->ClubInfo.csGameConfig.tmp2);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp3(pActionAck2->ClubInfo.csGameConfig.tmp3);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp4(pActionAck2->ClubInfo.csGameConfig.tmp4);
- ClubList.mutable_clubinfo()->mutable_csgameconfig()->set_tmp5(pActionAck2->ClubInfo.csGameConfig.tmp5);
- //发送数据
- std::string pbdata = ClubList.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_CLUB_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //查看 额外玩法
- bool CAttemperEngineSink::OnDBGetAddClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_Club_Action_Ack1Add * pActionAck2 = (CMD_GR_Club_Action_Ack1Add *)pData;
- if (pActionAck2 == NULL) return false;
-
- Club::PB_CS_S_Club_Action_Ack1Add ClubAction;
- ClubAction.set_result(pActionAck2->Result);
- std::string Message = CW2AEX<1024>(pActionAck2->Message, CP_UTF8).m_psz;
- ClubAction.set_message(Message);
- ClubAction.mutable_autoaddinfo()->set_dwclubid(pActionAck2->AutoAddInfo.dwClubID);
- ClubAction.mutable_autoaddinfo()->set_cbwanfaid(pActionAck2->AutoAddInfo.cbWanfaId);
- ClubAction.mutable_autoaddinfo()->set_cbstatus(pActionAck2->AutoAddInfo.cbStatus);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wsubgameid(pActionAck2->AutoAddInfo.gameconfig.wSubGameID);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wplayrule(pActionAck2->AutoAddInfo.gameconfig.wPlayRule);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wmaxfanrule(pActionAck2->AutoAddInfo.gameconfig.wMaxFanRule);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wmaxscore(pActionAck2->AutoAddInfo.gameconfig.wMaxScore);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wplaycountrule(pActionAck2->AutoAddInfo.gameconfig.wPlayCountRule);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_whadplaycount(pActionAck2->AutoAddInfo.gameconfig.wHadPlayCount);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_zmextrarule(pActionAck2->AutoAddInfo.gameconfig.zmExtraRule);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_dghrule(pActionAck2->AutoAddInfo.gameconfig.dghRule);
- std::string sPrivateTableID = CW2AEX<1024>(pActionAck2->AutoAddInfo.gameconfig.sPrivateTableID, CP_UTF8).m_psz;
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_sprivatetableid(sPrivateTableID);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_bduolai(pActionAck2->AutoAddInfo.gameconfig.bDuoLai);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_wfengding(pActionAck2->AutoAddInfo.gameconfig.wFengDing);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp1(pActionAck2->AutoAddInfo.gameconfig.tmp1);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp2(pActionAck2->AutoAddInfo.gameconfig.tmp2);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp3(pActionAck2->AutoAddInfo.gameconfig.tmp3);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp4(pActionAck2->AutoAddInfo.gameconfig.tmp4);
- ClubAction.mutable_autoaddinfo()->mutable_gameconfig()->set_tmp5(pActionAck2->AutoAddInfo.gameconfig.tmp5);
- //发送数据
- std::string pbdata = ClubAction.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_MORE_WANFA_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //加入
- bool CAttemperEngineSink::OnDBJoinClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_Club_Action_Ack1 * pActionAck1 = (CMD_GR_Club_Action_Ack1 *)pData;
- if (pActionAck1 == NULL) return false;
-
- Club::PB_CS_S_Club_Action_Ack1 ClubAction;
- ClubAction.set_result(pActionAck1->Result);
- std::string Message = CW2AEX<1024>(pActionAck1->Message, CP_UTF8).m_psz;
- ClubAction.set_message(Message);
- //发送数据
- std::string pbdata = ClubAction.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_JOIN_CLUB_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //退出
- bool CAttemperEngineSink::OnDBQuitClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_Club_Action_Ack1 * pActionAck1 = (DBR_GR_Club_Action_Ack1 *)pData;
- if (pActionAck1 == NULL) return false;
-
- if (pActionAck1->Result == 1)
- {
- for (int i = 0; i < 20; i++)
- {
- if (pIServerUserItem->GetUserInfo()->dwClubID[i] == pActionAck1->dwClubID)
- {
- pIServerUserItem->GetUserInfo()->dwClubID[i] = 0;
- break;
- }
- }
- }
-
- CMD_GR_Club_Action_Ack1 ActionAck1;
- ZeroMemory(&ActionAck1, sizeof(ActionAck1));
- ActionAck1.Result = pActionAck1->Result;
- CopyMemory(ActionAck1.Message, pActionAck1->Message, sizeof(ActionAck1.Message));
-
- Club::PB_CS_S_Club_Action_Ack1 ClubAction;
- ClubAction.set_result(ActionAck1.Result);
- std::string Message = CW2AEX<1024>(pActionAck1->Message, CP_UTF8).m_psz;
- ClubAction.set_message(Message);
- //发送数据
- std::string pbdata = ClubAction.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_QUIT_CLUB_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //同意加入
- bool CAttemperEngineSink::OnDBAgreeClub(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_Club_Action_Ack3 * pActionAck3 = (DBR_GR_Club_Action_Ack3 *)pData;
- if (pActionAck3 == NULL) return false;
-
- if ((pActionAck3->Agree == 1 || pActionAck3->Agree == 5 || pActionAck3->Agree == 11) && pActionAck3->Result == 1)
- {
- //在线用户
- WORD wUserIndex = 0;
- while (true)
- {
- IServerUserItem * pIServerUserItemSend = m_ServerUserManager.EnumUserItem(wUserIndex++);
- if (pIServerUserItemSend == NULL) break;
- if (pIServerUserItemSend->GetUserID() == pActionAck3->dwUserID)
- {
- for (int i = 0; i < 20; i++)
- {
- if (pIServerUserItemSend->GetUserInfo()->dwClubID[i] == 0)
- {
-
- pIServerUserItemSend->GetUserInfo()->dwClubID[i] = pActionAck3->dwClubID; break;
-
- }
- }
- break;
- }
- }
- }
-
- if ((pActionAck3->Agree == 2 || pActionAck3->Agree == 4) && pActionAck3->Result == 1)
- {
- //在线用户
- WORD wUserIndex = 0;
- while (true)
- {
- IServerUserItem * pIServerUserItemSend = m_ServerUserManager.EnumUserItem(wUserIndex++);
- if (pIServerUserItemSend == NULL) break;
- if (pIServerUserItemSend->GetUserID() == pActionAck3->dwUserID)
- {
- for (int i = 0; i < 20; i++)
- {
- if (pIServerUserItemSend->GetUserInfo()->dwClubID[i] == pActionAck3->dwClubID)
- {
- pIServerUserItemSend->GetUserInfo()->dwClubID[i] =0; break;
- }
- }
- break;
- }
- }
- }
-
- CMD_GR_Club_Action_Ack3 ActionAck3;
- ZeroMemory(&ActionAck3, sizeof(ActionAck3));
-
- ActionAck3.Result = pActionAck3->Result;
- ActionAck3.dwClubID = pActionAck3->dwClubID;
- ActionAck3.cbAgree = pActionAck3->Agree;
- CopyMemory(ActionAck3.Message, pActionAck3->Message, sizeof(pActionAck3->Message));
- if (ActionAck3.Result == 1)
- {
- _sntprintf(ActionAck3.Message, CountArray(ActionAck3.Message), TEXT("%d"), pActionAck3->dwUserID);
- }
-
- Club::PB_CS_S_Club_Action_Ack3 ClubAction;
- ClubAction.set_wclubid(ActionAck3.dwClubID);
- ClubAction.set_result(ActionAck3.Result);
- std::string Message = CW2AEX<1024>(ActionAck3.Message, CP_UTF8).m_psz;
- ClubAction.set_message(Message);
- ClubAction.set_cbagree(ActionAck3.cbAgree);
- //发送数据
- std::string pbdata = ClubAction.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_ISAGREE_CLUB_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
-
- }
-
- //自动创房
- bool CAttemperEngineSink::OnDBAutoCreateTable(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- CMD_GR_Club_Action_Ack2Ex2 * pActionAck2 = (CMD_GR_Club_Action_Ack2Ex2 *)pData;
- if (pActionAck2 == NULL) return false;
-
- if (pActionAck2->Ack2.ClubInfo.temp1 == 2)
- {
- //校验P
- //本节点是否能创建房间
- if (!m_BCreate)
- {
- tagGameServer * pCGameServerItem = m_ServerListManager.SearchUseServer(8, m_pGameServiceOption->wServerID);
- //推荐可以创建桌子的服务器
-
- if (pCGameServerItem == NULL)
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("自动创房失败:没有可用的服务器,俱乐部 [ ClubID=%ld ]"), pActionAck2->Ack2.ClubInfo.dwClubID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
- return true;
- }
-
- //向协调申请换服务器开房
- CMD_GR_ClubAction2_XT ClubAction;
- ZeroMemory(&ClubAction, sizeof(ClubAction));
- ClubAction.dwClubID = pActionAck2->Ack2.ClubInfo.dwClubID;
- //把服务器编号赋值给 DBR_GR_ClubAction2的第一个字段
- ClubAction.dwServerID = pCGameServerItem->wServerID;
- ClubAction.wWanFa = pActionAck2->Ack2.ClubInfo.temp4;
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_ChangServer, &ClubAction, sizeof(ClubAction));
-
- return true;
- }
-
- //花牌判定
- BOOL bCreateHuaPai = (14 == pActionAck2->Ack2.ClubInfo.csGameConfig.wSubGameID) || (15 == pActionAck2->Ack2.ClubInfo.csGameConfig.wSubGameID) || (16 == pActionAck2->Ack2.ClubInfo.csGameConfig.wSubGameID);
-
- if (!m_BCreate_Hua && bCreateHuaPai)
- {
- tagGameServer * pCGameServerItem = m_ServerListManager.SearchUseServer(8, m_pGameServiceOption->wServerID);
- //推荐可以创建桌子的服务器
-
- if (pCGameServerItem == NULL)
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("自动创房失败:花牌没有可用的服务器,俱乐部 [ clubID=%ld ]"), pActionAck2->Ack2.ClubInfo.dwClubID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
- return true;
- }
-
-
- //向协调申请换服务器开房
- CMD_GR_ClubAction2_XT ClubAction;
- ZeroMemory(&ClubAction, sizeof(ClubAction));
- ClubAction.dwClubID = pActionAck2->Ack2.ClubInfo.dwClubID;
- //把服务器编号赋值给 DBR_GR_ClubAction2的第一个字段
- ClubAction.dwServerID = pCGameServerItem->wServerID;
- ClubAction.wWanFa = pActionAck2->Ack2.ClubInfo.temp4;
-
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_ChangServer, &ClubAction, sizeof(ClubAction));
- return true;
- }
-
- //当前服务器桌子上限判断
- DWORD wMaxTable = m_pGameServiceOption->wTableCount;
- DWORD dwOnlineTableCount = m_PriTableID_2_TableID.size();
- if (dwOnlineTableCount >= (wMaxTable - 1))
- {
- tagGameServer * pCGameServerItem = m_ServerListManager.SearchUseServer(8, m_pGameServiceOption->wServerID);
- //推荐可以创建桌子的服务器
-
- if (pCGameServerItem == NULL)
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("自动创房失败:本服务器桌子到达上限没有可用的服务器,俱乐部 [ clubID=%ld ]"), pActionAck2->Ack2.ClubInfo.dwClubID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
- return true;
- }
-
- //向协调申请换服务器开房
- CMD_GR_ClubAction2_XT ClubAction;
- ZeroMemory(&ClubAction, sizeof(ClubAction));
- ClubAction.dwClubID = pActionAck2->Ack2.ClubInfo.dwClubID;
- //把服务器编号赋值给 DBR_GR_ClubAction2的第一个字段
- ClubAction.dwServerID = pCGameServerItem->wServerID;
- ClubAction.wWanFa = pActionAck2->Ack2.ClubInfo.temp4;
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_ChangServer, &ClubAction, sizeof(ClubAction));
- return true;
- }
-
- //EE
- void * pBuffer = NULL;
-
- try
- {
- pBuffer = malloc(sizeof(CMD_GR_UserSitDownEx) + sizeof(tagTableConfig));
- ZeroMemory(pBuffer, sizeof(CMD_GR_UserSitDownEx) + sizeof(tagTableConfig));
- CMD_GR_UserSitDownEx * pEx = (CMD_GR_UserSitDownEx *)pBuffer;
-
- pEx->dwUserID = pActionAck2->dwUserID;
- pEx->cbAuto = 1;//表示自动创房
- pEx->hostInfo.dwOwnerID = pActionAck2->Ack2.ClubInfo.dwOwnerID;
- CopyMemory(pEx->hostInfo.szHeadUrl, pActionAck2->Ack2.ClubInfo.szHeadUrl, sizeof(pActionAck2->Ack2.ClubInfo.szHeadUrl));
- CopyMemory(pEx->hostInfo.szHostName, pActionAck2->Ack2.ClubInfo.szHostName, sizeof(pActionAck2->Ack2.ClubInfo.szHostName));
- memcpy(pEx->data.TableConfig, &(pActionAck2->Ack2.ClubInfo.csGameConfig), sizeof(tagTableConfig));
- pEx->data.cbCreateTable = 1;//1表示创建新房间
- pEx->data.tableType = 1; //??
- pEx->data.clubID = pActionAck2->Ack2.ClubInfo.dwClubID;
- pEx->cbWanFa = pActionAck2->Ack2.ClubInfo.temp4;//用来表示俱乐部的自动开房多玩法的0,1,2
- //获取私有房间随机号码
- ASSERT(m_pITCPSocketService != NULL);
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_GET_ROOMID, pBuffer, sizeof(CMD_GR_UserSitDownEx) + sizeof(tagTableConfig));
-
- if (pBuffer) free(pBuffer);
- pBuffer = NULL;
-
- }
- catch (...)
- {
- if (pBuffer) free(pBuffer);
- }
- }
- return true;
- }
-
-
- //公告
- bool CAttemperEngineSink::OnDBGetClubNotice(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- DBR_GR_ClubNotice_ACK* pClubNotice = (DBR_GR_ClubNotice_ACK *)pData;
-
- if (pClubNotice == NULL) return false;
-
- //返回数据
- CMD_GR_ClubNoticeACK NoticeAck;
- ZeroMemory(&NoticeAck, sizeof(NoticeAck));
-
- NoticeAck.cbResult = pClubNotice->Result;
- NoticeAck.cbType = pClubNotice->cbType;
- NoticeAck.dwClubID = pClubNotice->dwClubID;
- NoticeAck.dwTemp = pClubNotice->dwTemp;
- CopyMemory(NoticeAck.Message, pClubNotice->Message, sizeof(NoticeAck.Message));
-
- Club::PB_CS_S_ClubNoticeACK ClubNotice;
- ClubNotice.set_dwclubid(NoticeAck.dwClubID);
- ClubNotice.set_cbtype(NoticeAck.cbType);
- ClubNotice.set_dwtemp(NoticeAck.dwTemp);
- ClubNotice.set_cbresult(NoticeAck.cbResult);
- std::string Message = CW2AEX<1024>(NoticeAck.Message, CP_UTF8).m_psz;
- ClubNotice.set_message(Message);
- //发送数据
- std::string pbdata = ClubNotice.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_NOTICE_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //在线信息
- //bool CAttemperEngineSink::OnDBGetClubOnLine(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //
- // //获取用户
- // WORD wBindIndex = LOWORD(dwContextID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL)
- // {
- // return false;
- // }
- //
- // DBR_GR_ClubOnLine * pClubOnLineAck = (DBR_GR_ClubOnLine *)pData;
- // if(pClubOnLineAck == NULL) return false;
- //
- // //返回数据
- // CMD_GR_ClubOnLine_Ack ClubOnLine;
- // ZeroMemory(&ClubOnLine, sizeof(ClubOnLine));
- //
- // ClubOnLine.wTotalUserCount = pClubOnLineAck->wUserCount;
- // if (ClubOnLine.wTotalUserCount > 1000){ ClubOnLine.wTotalUserCount = 1000; }
- // ClubOnLine.wNewUserCount = pClubOnLineAck->wNewUserCount;
- // ClubOnLine.dwClubID = pClubOnLineAck->dwClubID;
- // ClubOnLine.wUserMessageCount = pClubOnLineAck->wMessageCount;
- //
- //
- //
- // //在线用户
- // WORD userCount = 0;
- //
- // //从全局服务器上找
- // for (int i = 0; i < ClubOnLine.wTotalUserCount; i++)
- // {
- // auto iter = m_OnLineUserAll.find(pClubOnLineAck->dwUserID[i]);
- // if (iter != m_OnLineUserAll.end())
- // {
- // userCount++;
- // }
- // }
- // ClubOnLine.wOnLineUserNum = userCount;
- //
- //
- // //房间信息
- // DWORD tableCount = 0;
- // //int startIndex = 0;
- // CMD_S_Table_Info tableInfo[200] = { 0 };
- //
- // int AutoTableFreeCountAdd[3] = { 0 };//LYH 2018-11-2 表示多玩法的不同玩法桌子空闲个数
- //
- // //从全局服务器上查找
- // int AutoTableCount = 0;
- // CWHDataLocker DataLocker(m_CriticalSection);
- // JN_GR_RoomListInfo RoomInfo;
- // JN_GR_RoomListBig Temp;
- // std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it2 = m_PrivateRoomAll.begin();
- // while (it2 != m_PrivateRoomAll.end())
- // {
- // ZeroMemory(&Temp, sizeof(JN_GR_RoomListBig));
- // Temp = it2->second;
- // if (Temp.roomType == 1 && Temp.tmp6[0] == pClubOnLineAck->dwClubID)
- // {
- // if (Temp.roomStatus == 0 && Temp.currentjushu == 0)
- // {
- // for (BYTE i = 0; i < 3; i++)
- // {
- // if (Temp.tmp4 == i && pClubOnLineAck->IsWanFa[i] == 1)
- // {
- // AutoTableFreeCountAdd[i]++;
- // break;
- // }
- // }
- // }
- // //如果是自动开的房且没有开始(有待优化)(服务器重启自动开房判定)
- // AutoTableCount++;
- // ZeroMemory(&RoomInfo, sizeof(JN_GR_RoomListInfo));
- //
- // RoomInfo.dwDiFen = Temp.dwDiFen;
- // RoomInfo.dwJuShu = Temp.dwJuShu;
- // RoomInfo.bRoomCreatePay = Temp.bRoomCreatePay;
- // RoomInfo.dwRoomNumber = Temp.dwRoomNumber;
- // RoomInfo.dwServerID = Temp.dwServerID;
- // RoomInfo.bFanGua = Temp.bFanGua;
- // RoomInfo.bWanFa = Temp.bWanFa;
- //
- // RoomInfo.bDuoLai = Temp.bDuoLai; //多癞子可平胡,0可以 1不可以
- // RoomInfo.wFengDing = Temp.wFengDing; //封顶值
- // RoomInfo.tmp1 = Temp.tmp1; //备用字段
- // RoomInfo.tmp2 = Temp.tmp2; //备用字段
- //
- // // to do 判断用户版本号
- // TCHAR szMachineID[LEN_MACHINE_ID] = { 0 };
- // memcpy(szMachineID, pIServerUserItem->GetMachineID(), sizeof(szMachineID));
- // del_char(szMachineID, L'.');
- // __int64 iMachineID = StrToNmuber(szMachineID);
- //
- // //--最低要求的版本号
- // TCHAR szMinClientVer[LEN_MACHINE_ID] = { 0 };
- // memcpy(szMinClientVer, m_pInitParameter->m_szMinClientVer, sizeof(szMinClientVer));
- // del_char(szMinClientVer, L'.');
- // __int64 iMinClientVer = StrToNmuber(szMinClientVer);
- //
- // if (iMachineID < iMinClientVer && ((RoomInfo.bWanFa == 14 || RoomInfo.tmp1 == 2)))
- // {
- // it2++;
- // TCHAR szString[512] = { 0 };
- // _sntprintf(szString, CountArray(szString), TEXT("版本异常:用户ID不匹配[ RoomInfo.bDuoLai=%ld,RoomInfo.bWanFa=%ld,RoomInfo.wFengDing = %ld ]"), RoomInfo.bDuoLai, RoomInfo.bWanFa, RoomInfo.wFengDing);
- // CTraceService::TraceString(szString, TraceLevel_Warning);
- // continue;
- // }
- //
- // StringCchCopy(RoomInfo.szName, _countof(RoomInfo.szName), Temp.szName);
- // //修改直接获取房间ip信息2018-07-30
- // StringCchCopy(RoomInfo.szIp, _countof(RoomInfo.szIp), Temp.szIp);
- // //CGameServerItem * pCGameServerItem = m_ServerListManager.SearchGameServer(Temp.dwServerID);
- // //if (pCGameServerItem)
- // //{
- // /*if (pIServerUserItem->GetUserInfo()->iXinYong == 1 &&
- // pCGameServerItem->m_GameServer.wServerLevel > 2)
- // {
- // continue;
- // CMD_GR_UserSitDownAck req;
- // req.cbRet = 1;
- //
- // req.szText;
- // StringCchCopy(req.szText, _countof(req.szText), _T("此房间不可用,请自行建房."));
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, &req, sizeof(TCHAR) * 32 + 1);
- // return true;
- // }*/
- //
- // //计算距离排名
- // //iPaiMing = 0; iCountMax = 1;
- // //GetPaiMing(pIServerUserItem->GetUserID(), pIServerUserItem->GetUserInfo()->llJuLi, iPaiMing, iCountMax);
- // //ip = pCGameServerItem->GetRandom(pIServerUserItem->GetUserID(), iPaiMing, iCountMax);
- // //if (ip.c_str() != Temp.szIp)
- // //{
- // // CString str;
- // // str.Format(_T("获取的ip不等于内存szIp。ip=%s Temp.szIp=%s", ip, Temp.szIp));
- // // CTraceService::TraceString(str, TraceLevel_Warning);
- // //}
- // //StringCchCopy(RoomInfo.szIp, _countof(RoomInfo.szIp), ip.c_str());
- // //}
- //
- //
- //
- // if (Temp.szIp == L"")
- // {
- // it2++;
- // TCHAR szString[512] = { 0 };
- // _sntprintf(szString, CountArray(szString), TEXT("获取ip异常"));
- // CTraceService::TraceString(szString, TraceLevel_Warning);
- // continue;
- // /*CMD_GR_UserSitDownAck req;
- // req.cbRet = 1;
- //
- // req.szText;
- // StringCchCopy(req.szText, _countof(req.szText), _T("此房间,无可用服务。请尝试进入其他房间!"));
- // SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, &req, sizeof(TCHAR) * 32 + 1);
- // return true;*/
- // }
- //
- // RoomInfo.wPort = Temp.wPort;
- // //m_Data.dAddRoomChange++;
- //
- // //if (pCGameServerItem != NULL)
- // //{
- // // if (IsJC(9999))
- // // {
- // // CString csTestB;
- // // csTestB.Format(_T("昵称:%s -> 加入房间服务地址-> %s:%d 通道->%s,距离 -> %lld,排名 -> %d,最大人数 -> %d")
- // // , pIServerUserItem->GetNickName(), pCGameServerItem->m_GameServer.szServerAddr, pCGameServerItem->m_GameServer.wServerPort
- // // , RoomInfo.szIp, pIServerUserItem->GetUserInfo()->llJuLi, iPaiMing, iCountMax);
- // // CTraceService::TraceString(csTestB, TraceLevel_Normal);
- // // }
- // //}
- // //else
- // //{
- // // CString csTestB;
- // // csTestB.Format(_T("未找到游戏节点 %d"), Temp.dwServerID);
- //
- // // CTraceService::TraceString(csTestB, TraceLevel_Normal);
- // //}
- //
- // tableInfo[tableCount].dwUserID = Temp.dwUserID;
- // tableInfo[tableCount].cbNum = Temp.dwReadyBody;
- // CopyMemory(tableInfo[tableCount].szHeadUrl, Temp.szHeadUrl, sizeof(Temp.szHeadUrl));
- // CopyMemory(&(tableInfo[tableCount].room), &RoomInfo, sizeof(RoomInfo));
- // tableCount++;
- // //if (tableCount >= 10){ break; } lyh 2018 - 9 - 13
- // if (tableCount >= 200){break;}
- // }
- // it2++;
- // }
- //
- // ////对tableinfo进行排序
- // if ( tableCount >= 2 )
- // {
- // for (int i = 0; i < tableCount - 1; i++)
- // {
- //
- // for (int j = 0; j < tableCount - 1 - i; j++)
- // {
- // if (tableInfo[j].cbNum > tableInfo[j + 1].cbNum)
- // {
- // CMD_S_Table_Info tableInfoTemp;
- // ZeroMemory(&tableInfoTemp, sizeof(CMD_S_Table_Info));
- // CopyMemory(&tableInfoTemp, &tableInfo[j], sizeof(CMD_S_Table_Info));
- //
- // ZeroMemory(&tableInfo[j], sizeof(CMD_S_Table_Info));
- // CopyMemory(&tableInfo[j], &tableInfo[j + 1], sizeof(CMD_S_Table_Info));
- //
- // ZeroMemory(&tableInfo[j + 1], sizeof(CMD_S_Table_Info));
- // CopyMemory(&tableInfo[j + 1], &tableInfoTemp, sizeof(CMD_S_Table_Info));
- // }
- // }
- // }
- // }
- //
- //
- // int k = 0;
- // for (int i = pClubOnLineAck->wStartIndex; i < tableCount; i++)
- // {
- // CopyMemory(&ClubOnLine.csTableInfo[k++], &tableInfo[i], sizeof(CMD_S_Table_Info));
- // if (k == pClubOnLineAck->wCount || k>= 20) break;
- // }
- //
- // ClubOnLine.wTableInfoCount = k;
- // ClubOnLine.wTableNum = tableCount;
- // //真实数据包长
- // int pageLen = (sizeof(CMD_S_Table_Info)*k) + (sizeof(WORD) * 6) + sizeof(DWORD);
- // //发送数据
- // m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBONLINE_ACK, &ClubOnLine, pageLen);// sizeof(ClubOnLine)
- //
- // //自动开房校验:1.宕机没房间的时候第一个玩家获取在线信息时自动创房 2.平时出现没有自动创房时,群主获取在线信息时自动创房
- // if (AutoTableCount == 0 && pClubOnLineAck->TableChoice == 2)
- // {
- // for (BYTE i = 0; i < 3; i++)
- // {
- // if (AutoTableFreeCountAdd[i] == 0 && pClubOnLineAck->IsWanFa[i] == 1)
- // {
- // this->OnAutoCreateRoomToDB(pClubOnLineAck->dwClubID, pIServerUserItem->GetUserID(), i);
- // }
- // }
- // }
- //
- // return true;
- //}
-
- //在线信息
- bool CAttemperEngineSink::OnDBGetClubOnLineEx(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_ClubOnLine * pClubOnLineAck = (DBR_GR_ClubOnLine *)pData;
- if (pClubOnLineAck == NULL) return false;
-
- //在线用户
- WORD userCount = 0;
- for (int i = 0; i < pClubOnLineAck->wUserCount; i++)
- {
- auto iter = m_OnLineUserAll.find(pClubOnLineAck->dwUserID[i]);
- if (iter != m_OnLineUserAll.end())
- {
- userCount++;
- }
- }
-
-
- CMD_GR_TableOtherInfo_Notify TableOtherInfo;
- ZeroMemory(&TableOtherInfo, sizeof(TableOtherInfo));
-
- TableOtherInfo.ClubID = pClubOnLineAck->dwClubID;
- TableOtherInfo.totalUserNum = pClubOnLineAck->wUserCount;
- TableOtherInfo.onlineUserNum = userCount;
- TableOtherInfo.newMsgNum = pClubOnLineAck->wMessageCount;
- TableOtherInfo.newUserNum = pClubOnLineAck->wNewUserCount;
- TableOtherInfo.Type = 0x7F;//127
- if (TableOtherInfo.newMsgNum == 0) TableOtherInfo.Type -= 8;
- if (TableOtherInfo.newUserNum == 0) TableOtherInfo.Type -= 16;
- int AutoWaitTableCountAdd[3] = { 0 }; // [CountArray(pClubOnLineAck->cbSubGameID)] = { 0 };//LYH 11-2 龙11.10修改
-
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it2 = m_PrivateRoomAll.begin();
- while (it2 != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig Rooms = it2->second;
- if (Rooms.roomType == 1 && Rooms.tmp6[0] == pClubOnLineAck->dwClubID)
- {
- TableOtherInfo.totalTableNum++;
- if (Rooms.roomStatus == 0 && Rooms.currentjushu == 0)
- {
- TableOtherInfo.waitTableNum++;
- for (BYTE i = 0; i < 3; i++)
- {
- if (Rooms.tmp4 == i && pClubOnLineAck->IsWanFa[i] == 1)
- {
- AutoWaitTableCountAdd[i]++;
- break;
- }
- }
- }
- if (Rooms.roomStatus == 1 || Rooms.currentjushu > 0) TableOtherInfo.playTableNum++;
- }
- it2++;
- }
- }
- Club::PB_CS_S_TableOtherInfo_Notify Notify;
- Notify.set_clubid(TableOtherInfo.ClubID);
- Notify.set_newmsgnum(TableOtherInfo.newMsgNum);
- Notify.set_newusernum(TableOtherInfo.newUserNum);
- Notify.set_onlineusernum(TableOtherInfo.onlineUserNum);
- Notify.set_playtablenum(TableOtherInfo.playTableNum);
- Notify.set_totaltablenum(TableOtherInfo.totalTableNum);
- Notify.set_totalusernum(TableOtherInfo.totalUserNum);
- Notify.set_type(TableOtherInfo.Type);
- Notify.set_waittablenum(TableOtherInfo.waitTableNum);
- //发送数据
- std::string pbdata = Notify.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_CLUBCHANGE_NOTIFY_ACK, (void*)pbdata.c_str(), pbdata.length());
-
-
- //自动创房触发
- if (pClubOnLineAck->TableChoice == 2)
- {
- for (BYTE i = 0; i < 3; i++)
- {
- if (pClubOnLineAck->IsWanFa[i] == 1 && AutoWaitTableCountAdd[i] == 0)
- {
- //TCHAR szString[512] = { 0 };
- //_sntprintf(szString, CountArray(szString), TEXT("打印玩法创建情况pClubOnLineAck->IsWanFa[%d]= %d, AutoWaitTableCountAdd[i]= %d"), i, pClubOnLineAck->IsWanFa[i], AutoWaitTableCountAdd[i]);
- //CTraceService::TraceString(szString, TraceLevel_Warning);
- this->OnAutoCreateRoomToDB(pClubOnLineAck->dwClubID, pIServerUserItem->GetUserID(), i);
- }
- }
- }
- return true;
- }
-
- bool CAttemperEngineSink::OnDBNotifyClubUser(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
-
- OutputDebugStringA("OnDBNotifyClubUser");
- DBR_GR_UserData * pUserData = (DBR_GR_UserData *)pData;
- //返回数据
- CMD_GR_Club_Notify_ACK Notify;
- ZeroMemory(&Notify, sizeof(Notify));
-
- //赋值
- Notify.newsFalg = pUserData->newsFlag;
- Notify.dwClubID = pUserData->dwClubID;
- Notify.dwUserCount = pUserData->newUserCount;
- CopyMemory(Notify.Message, pUserData->Message, sizeof(pUserData->Message));
-
- //从全局服务器上找
- for (int i = 0; i < pUserData->wUserCount; i++)
- {
- auto iter = m_OnLineUserAll.find(pUserData->dwUserID[i]);
- if (iter != m_OnLineUserAll.end())
- {
- CMD_GR_Club_NotifyEX_ACK NotifyEx;
- ZeroMemory(&NotifyEx, sizeof(CMD_GR_Club_NotifyEX_ACK));
-
- NotifyEx.dwUserId = pUserData->dwUserID[i];
- CopyMemory(&NotifyEx.Notify, &Notify, sizeof(Notify));
- if (m_pITCPSocketService)
- {
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_C_USER_SendMessage, &NotifyEx, sizeof(CMD_GR_Club_NotifyEX_ACK));
- }
- }
- }
-
- return true;
- }
-
- //特殊会员
- bool CAttemperEngineSink::OnDBGetClubBlackUser(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_ClubUser2_Ack * pClubUserAck = (CMD_GR_ClubUser2_Ack *)pData;
- if (pClubUserAck == NULL) return false;
-
- for (int i = 0; i < pClubUserAck->wCount; i++)
- {
- //从其全局服务器上找
- if (i >= 20){ break; }
- auto iter = m_OnLineUserAll.find(pClubUserAck->csMemberInfo[i].dwUserID);
- if (iter != m_OnLineUserAll.end())
- {
- pClubUserAck->csMemberInfo[i].isOnline = 1;
- }
- }
-
- Club::PB_CS_S_ClubUser2_Ack ClubRecord;
- ClubRecord.set_cbkind(pClubUserAck->cbKind);
- ClubRecord.set_tmp(pClubUserAck->tmp);
- ClubRecord.set_cbhost(pClubUserAck->cbHost);
- ClubRecord.set_dwclubid(pClubUserAck->dwClubID);
- ClubRecord.set_wcount(pClubUserAck->wCount);
- for (WORD i = 0; i < pClubUserAck->wCount; i++)
- {
- Club::PB_CS_S_MemberInfo* RecordInfo = ClubRecord.add_csmemberinfo();
- RecordInfo->set_bangmaid(pClubUserAck->csMemberInfo[i].BangMaID);
- RecordInfo->set_cbstaus(pClubUserAck->csMemberInfo[i].cbStaus);
- RecordInfo->set_ishost(pClubUserAck->csMemberInfo[i].isHost);
- RecordInfo->set_isonline(pClubUserAck->csMemberInfo[i].isOnline);
- RecordInfo->set_dwuserid(pClubUserAck->csMemberInfo[i].dwUserID);
- std::string szName = CW2AEX<1024>(pClubUserAck->csMemberInfo[i].szName, CP_UTF8).m_psz;
- std::string szHeadUrl = CW2AEX<1024>(pClubUserAck->csMemberInfo[i].szHeadUrl, CP_UTF8).m_psz;
- RecordInfo->set_szname(szName);
- RecordInfo->set_szheadurl(szHeadUrl);
- }
- //发送数据
- std::string pbdata = ClubRecord.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_CLUBBLACKUSER_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //协议
- bool CAttemperEngineSink::OnDBGetClubProtocol(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_ClubProtocolAgree * pClubProtocolAck = (DBR_GR_ClubProtocolAgree *)pData;
- if (pClubProtocolAck == NULL) return false;
-
- //返回数据
- CMD_GR_ClubProtocolAgree ClubProtocol;
- ZeroMemory(&ClubProtocol, sizeof(ClubProtocol));
-
- ClubProtocol.dwClubID = pClubProtocolAck->dwClubID;
- ClubProtocol.cbAgree = pClubProtocolAck->cbAgree;
- ClubProtocol.dwTemp = pClubProtocolAck->dwTemp;
-
- Club::PB_CS_S_ClubProtocolAgree ProtocolAgree;
- ProtocolAgree.set_dwclubid(ClubProtocol.dwClubID);
- ProtocolAgree.set_cbagree(ClubProtocol.cbAgree);
- ProtocolAgree.set_dwtemp(ClubProtocol.dwTemp);
- //发送数据
- std::string pbdata = ProtocolAgree.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_PROTOLCOL_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //群主解散俱乐部房间
- bool CAttemperEngineSink::OnDBGetClubDissolveRoom(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_ClubDissolveRoom* pClubDissolveRoom = (DBR_GR_ClubDissolveRoom*)pData;
- if (pClubDissolveRoom == NULL) return false;
-
- if (pClubDissolveRoom->cbIsAdmin == 0)
- {
- //GetTCPNetworkEngine()->OnTBDataEvent(DBO_GR_GAME_JSROOM, 0, &pClubDissolveRoom->dwRoomID, sizeof(DWORD));
- //通知协调全局解散此房间
- DWORD dwRoomID = pClubDissolveRoom->dwRoomID;
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_DISSOLVEROOM, &dwRoomID, sizeof(DWORD));
- }
- else if (pClubDissolveRoom->cbIsAdmin == 1)
- {
- SendRequestFailure(pIServerUserItem, TEXT("您没有权限,不能强制解散!"), 0);
- }
- else
- {
- SendRequestFailure(pIServerUserItem, TEXT("今日超过次数!"), 0);
- }
- return true;
- }
-
- //同意协议
- bool CAttemperEngineSink::OnDBAgreeClubProtocol(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_Club_Action_Ack1 * pClubProtocolAck = (DBR_GR_Club_Action_Ack1 *)pData;
- if (pClubProtocolAck == NULL) return false;
-
- Club::PB_CS_S_ClubActionAck1 ProtocolAgree;
- ProtocolAgree.set_dwclubid(pClubProtocolAck->dwClubID);
- ProtocolAgree.set_result(pClubProtocolAck->Result);
- std::string Message = CW2AEX<1024>(pClubProtocolAck->Message, CP_UTF8).m_psz;
- ProtocolAgree.set_message(Message);
- //发送数据
- std::string pbdata = ProtocolAgree.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_USER_GET_PROTOLCOLAGREE_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- //群主信息(自动开房和群主支付创房)
- bool CAttemperEngineSink::OnDBGetClubHostInfo(DWORD dwContextID, VOID * pData, WORD wDataSize){
-
- DBR_GR_UserSitDownEx3 * pClubHostInfoAck = (DBR_GR_UserSitDownEx3 *)pData;
- if (pClubHostInfoAck == NULL) return false;
-
- IServerUserItem * pIServerUserItem = NULL;
-
- if (pClubHostInfoAck->UserSitDownData.cbAuto == 0 && dwContextID != 0)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL )
- {
- return false;
- }
- }
- if (pClubHostInfoAck->UserSitDownData.data.cbCreateTable == 1)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- pIServerUserItem = GetBindUserItem(wBindIndex);
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- if (pClubHostInfoAck->UserSitDownData.cbAuto == 0)
- {
- StringCchCopy(req.szText, _countof(req.szText), _T("俱乐部已经打样,不能创建房间"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- }
- return true;
- }
- tagGameConfig* pConfigTemp = (tagGameConfig*)pClubHostInfoAck->UserSitDownData.data.TableConfig;
- if (1 == pClubHostInfoAck->UserSitDownData.cbAuto || pConfigTemp->wMaxFanRule >= 10)//不是群主创房且不是自动创房 不进行下去,直接返回
- {
- if (pClubHostInfoAck->currCurrency < pClubHostInfoAck->UserSitDownData.ReduceBeans)
- {
- if (pClubHostInfoAck->UserSitDownData.cbAuto == 0)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("群主钻石不足,不能创建房间!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- }
- else
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("自动创房失败:群主钻石不够,俱乐部[ ClubID=%ld ]"), pClubHostInfoAck->UserSitDownData.data.clubID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
-
- //广播给其他用户(目前广播给群主)
- CMD_GR_UserData UserData;
- ZeroMemory(&UserData, sizeof(UserData));
- UserData.dwClubID = pClubHostInfoAck->UserSitDownData.data.clubID;
- UserData.newsFlag = 4;
- //UserData.dwUserId = pClubHostInfoAck->UserSitDownData.dwUesrID;
- CString s = L"自动创房失败:群主钻石不够";
- _tcscpy(UserData.Message, s);
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_NotifyUser, 0, &(UserData), sizeof(CMD_GR_UserData));
- }
- return true;
- }
- }
-
- //俱乐部房间
- if (pClubHostInfoAck->UserSitDownData.data.tableType == 1)
- {
- int count = 0;
- //从全局服务器上找
- int flag = 1;
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it1 = m_PrivateRoomAll.begin();
- while (it1 != m_PrivateRoomAll.end() && flag)
- {
- JN_GR_RoomListBig rooms = it1->second;
- if (rooms.roomType == 1 && rooms.tmp6[0] == pClubHostInfoAck->UserSitDownData.data.clubID)
- {
- tagGameConfig* pConfigTemp = (tagGameConfig*)pClubHostInfoAck->UserSitDownData.data.TableConfig;
- if (rooms.roomStatus == 0 && pConfigTemp->wSubGameID == rooms.bWanFa && pConfigTemp->wFengDing == rooms.wFengDing && rooms.tmp4 == pClubHostInfoAck->UserSitDownData.cbWanFa)//按照玩法来筛选空闲
- {
- if (rooms.tmp5 == 1 && rooms.currentjushu == 0)//当这个俱乐部为自动有自动建房的房间,且为空闲的,就不往下走了 //添加校验(自动开房)
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("自动创房失败:%d 已经存在一个房间了.房间号:%d,人数:%d,状态:%d 玩法几:%d"), pClubHostInfoAck->UserSitDownData.data.clubID, rooms.dwRoomNumber, rooms.dwReadyBody, rooms.roomStatus, rooms.tmp4);
- CTraceService::TraceString(szString, TraceLevel_Warning);
- return true;
- }
- count++;
- if (count == 10)
- {
- flag = 0;
- break;
- }
- }
- }
- it1++;
- }
-
- if (count >= 10)
- {
- if (pClubHostInfoAck->UserSitDownData.cbAuto == 0)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("牌友圈还有10桌未开始,请稍后再试!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- }
- return true;
- }
- }
-
- std::shared_ptr<CTableFrame> pTableFrame;
- tagGameConfig* pConfig = (tagGameConfig*)pClubHostInfoAck->UserSitDownData.data.TableConfig;
- pTableFrame = CreatePrivateTable(pClubHostInfoAck->UserSitDownData.RoomID, pConfig->wSubGameID);
- if (nullptr == pTableFrame)
- {
- if (pClubHostInfoAck->UserSitDownData.cbAuto == 0)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("当前游戏房间已经人满为患了,请稍后再试!"));
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- }
- else
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("自动创房失败:服务器房间已满,俱乐部 [ ClubID=%ld ]"), pClubHostInfoAck->UserSitDownData.data.clubID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
-
- }
-
- return true;
- }
- TCHAR szTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTemp, 32);
-
- std::wstring str;
- str = szTemp;
- m_PriTableID_2_TableID[str] = pTableFrame->GetTableID();
- pConfig->wHadPlayCount = pTableFrame->GetTableID();
- pConfig->zmExtraRule = 1;
- StringCchCat(pConfig->sPrivateTableID, 7, str.c_str());
-
- pTableFrame->OnEventSetGameConfig((void*)pClubHostInfoAck->UserSitDownData.data.TableConfig, wDataSize - sizeof(CMD_GR_UserSitDown), str);
- int TargetID = 0;
- TCHAR TargetHeadUrl[LEN_HEAD_URL];
- TCHAR TargetName[32];
- ZeroMemory(TargetName, sizeof(TargetName));
- ZeroMemory(TargetHeadUrl, sizeof(TargetHeadUrl));
- if (pClubHostInfoAck->UserSitDownData.cbAuto == 0)
- {
- TargetID = pIServerUserItem->GetUserID();
- CopyMemory(TargetHeadUrl, pIServerUserItem->GetUserInfo()->szHeadUrl, sizeof(TargetHeadUrl));
- CopyMemory(TargetName, pIServerUserItem->GetUserInfo()->szNickName, sizeof(TargetName));
- }
- else
- {
- //校验群主房间是否已满(全局校验)
- int i = 0;
- for (i = 0; i <5; i++)
- {
- int count = 0;
- int TestID = pClubHostInfoAck->AdmInfo[i].dwOwnerID;
- if (TestID == 0)
- {
- TCHAR szString[512] = { 0 };
- _sntprintf(szString, CountArray(szString), TEXT("自动创房失败:没有找到管理员,房间已满30个,俱乐部 [ ClubID=%ld ]"), pClubHostInfoAck->UserSitDownData.data.clubID);
- CTraceService::TraceString(szString, TraceLevel_Normal);
- return true;
- }
-
- //全局校验
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it = m_PrivateRoomAll.begin();
- while (it != m_PrivateRoomAll.end())
- {
- JN_GR_RoomListBig rooms = it->second;
- if (rooms.dwUserID == TestID)
- {
- count++;
- }
- it++;
- }
-
- if (count >= 30)
- {
- continue;
- }
- else
- {
- break;
- }
- }
-
- TargetID = pClubHostInfoAck->AdmInfo[i].dwOwnerID;
- CopyMemory(TargetHeadUrl, pClubHostInfoAck->AdmInfo[i].szHeadUrl, sizeof(TargetHeadUrl));
- CopyMemory(TargetName, pClubHostInfoAck->AdmInfo[i].szHostName, sizeof(TargetName));
-
- }
-
- pTableFrame->SetPrivateTableOwnerID(TargetID);
- pTableFrame->SetGameConfig(*pConfig, pClubHostInfoAck->UserSitDownData.data.WXianZhi);
-
- //俱乐部房间和好友房间的区分
- pTableFrame->SetTableKind(pClubHostInfoAck->UserSitDownData.data.tableType);
- pTableFrame->SetTableClub(pClubHostInfoAck->UserSitDownData.data.clubID);
- pTableFrame->SetTableAuto(pClubHostInfoAck->UserSitDownData.cbAuto);
-
- JN_GR_RoomListGroup sPrivateTableID;
- ZeroMemory(&sPrivateTableID, sizeof(JN_GR_RoomListGroup));
- //查看自己创建的房间
-
- auto iter = m_UserID_2_PriTableIDGROUP.find(TargetID);
- if (iter != m_UserID_2_PriTableIDGROUP.end())
- {
- sPrivateTableID = iter->second;
-
- if (sPrivateTableID.Num > 29)
- {
- if (pClubHostInfoAck->UserSitDownData.cbAuto== 0)
- {
- CMD_GR_UserSitDownAck req;
- req.cbRet = 1;
- StringCchCopy(req.szText, _countof(req.szText), _T("当前状态不允许创建!"));
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- SitDownAck.set_cbret(req.cbRet);
- std::string szText = CW2AEX<1024>(req.szText, CP_UTF8).m_psz;
- SitDownAck.set_sztext(szText);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
- }
- return true;
- }
- }
- else
- {
- std::pair<DWORD, JN_GR_RoomListGroup> temp(TargetID, sPrivateTableID);
- m_UserID_2_PriTableIDGROUP.insert(temp);
- }
-
- sPrivateTableID.jgrDate[sPrivateTableID.Num].roomType = pClubHostInfoAck->UserSitDownData.data.tableType;
- memset(sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp6, 0, 3*sizeof(int));
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp6[0] = pClubHostInfoAck->UserSitDownData.data.clubID;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp5 = pClubHostInfoAck->UserSitDownData.cbAuto;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp4 = pClubHostInfoAck->UserSitDownData.cbWanFa; //新加一个用来表示同一个俱乐部不同玩法
- //头像
- StringCchCopy(sPrivateTableID.jgrDate[sPrivateTableID.Num].szHeadUrl, _countof(sPrivateTableID.jgrDate[sPrivateTableID.Num].szHeadUrl),TargetHeadUrl);
-
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwUserID = TargetID;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwServerID = m_pGameServiceOption->wServerID;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwRoomNumber = _ttol(str.c_str());
- if (pTableFrame->GetStartMode() == START_MODE_ALL_READY)
- {
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwBody = 2;
- }
- else
- {
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwBody = pTableFrame->GetChairCount();
- }
-
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwDiFen = pConfig->wPlayRule;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwJuShu = pConfig->wPlayCountRule;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwReadyBody = 0;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].bWanFa = pConfig->wSubGameID;
-
- sPrivateTableID.jgrDate[sPrivateTableID.Num].bDuoLai = pConfig->bDuoLai; //多癞子可平胡,0可以 1不可以
- sPrivateTableID.jgrDate[sPrivateTableID.Num].wFengDing = pConfig->wFengDing; //封顶值
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp1 = pConfig->tmp1; //备用字段(纠正)
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp2 = pConfig->tmp2; //备用字段
- sPrivateTableID.jgrDate[sPrivateTableID.Num].tmp3 = pConfig->tmp3;
-
- StringCchCopy(sPrivateTableID.jgrDate[sPrivateTableID.Num].szName, _countof(sPrivateTableID.jgrDate[sPrivateTableID.Num].szName), TargetName);
- sPrivateTableID.jgrDate[sPrivateTableID.Num].bFanGua = pConfig->wMaxScore;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].bRoomCreatePay = pConfig->wMaxFanRule;
- sPrivateTableID.jgrDate[sPrivateTableID.Num].dwInsert_UpData_Del = 0;
-
- CGameServerItem * pCGameServerItem = m_ServerListManager.SearchGameServer(m_pGameServiceOption->wServerID);
- if (pCGameServerItem)
- {
- //非自动创房通过玩家设置IP
- if (pClubHostInfoAck->UserSitDownData.cbAuto == 0)
- {
- int iPaiMing = 0; int iCountMax = 1;
- GetPaiMing(pIServerUserItem->GetUserID(), pIServerUserItem->GetUserInfo()->llJuLi, iPaiMing, iCountMax);
-
- std::wstring ip = pCGameServerItem->GetRandom(pIServerUserItem->GetUserID(), iPaiMing, iCountMax);
-
-
- StringCchCopy(sPrivateTableID.jgrDate[sPrivateTableID.Num].szIp, _countof(sPrivateTableID.jgrDate[sPrivateTableID.Num].szIp), ip.c_str());
- }
- else
- {
- //设置本地址IP
- StringCchCopy(sPrivateTableID.jgrDate[sPrivateTableID.Num].szIp, _countof(sPrivateTableID.jgrDate[sPrivateTableID.Num].szIp), pCGameServerItem->m_GameServer.szServerAddr);
- }
- sPrivateTableID.jgrDate[sPrivateTableID.Num].wPort = pCGameServerItem->m_GameServer.wServerPort;
- }
- //同步到中心服务器
- JN_GR_RoomListBig UserChat = sPrivateTableID.jgrDate[sPrivateTableID.Num];
-
- UpdataBodyOwnRoomToServer(&UserChat, sizeof(UserChat));
-
- sPrivateTableID.Num++;
-
- m_UserID_2_PriTableIDGROUP[TargetID] = sPrivateTableID;
-
- ///[+++支付修正下,根据玩法人数扣(修改3人玩法的BUG)2018-1-11
- WORD wChairCount = pTableFrame->GetChairCount();
-
- WORD wReduceBeans = 0;
- if (pConfig->wMaxFanRule == 0 || pConfig->wMaxFanRule >= 10)
- {
- wReduceBeans = pClubHostInfoAck->UserSitDownData.ReduceBeans / wChairCount * wChairCount;
-
- //强制转换对于特定2人
- if (pTableFrame->GetStartMode() == START_MODE_ALL_READY)
- {
- wReduceBeans = 2 * (pConfig->wPlayCountRule / 8);
- }
-
- }
- else
- {
- wReduceBeans = pClubHostInfoAck->UserSitDownData.ReduceBeans;
- }
-
- if (1 == pClubHostInfoAck->UserSitDownData.cbAuto || pConfigTemp->wMaxFanRule >= 10)//不是群主创房且不是自动创房 不进行下去,直接返回
- {
- //UserInfo->dwBean = UserInfo->dwBean - wReduceBeans;
- //锁定元宝
- pTableFrame->LockBeans(pClubHostInfoAck->UserSitDownData.hostInfo.dwOwnerID, wReduceBeans);
- }
- else if (pIServerUserItem)
- {
- pIServerUserItem->GetUserInfo()->dwBean = pIServerUserItem->GetUserInfo()->dwBean - wReduceBeans;
- //锁定元宝
- pTableFrame->LockBeans(pIServerUserItem->GetUserID(), wReduceBeans);
- }
-
-
-
- //加入旁观
- if (pClubHostInfoAck->UserSitDownData .cbAuto == 0 && pTableFrame->PerformLookonAction(pIServerUserItem))
- {
- //房间创建30中后没人玩就解散(方便后台切换服务器)
- pTableFrame->OnTCPNetworkSubUserCreateRoom(pIServerUserItem);
- m_Data.dCreateTable++;
-
- //进入房间旁观
- CMD_GR_UserSitDownAckEx req;
-
- TCHAR szTempTemp[32] = { 0 };
- if (pTableFrame) pTableFrame->GetPrivateTableID(szTempTemp, 32);
-
- lstrcpy(req.szPrivateTableID, szTempTemp);
- req.cbRet = 0;
- req.dijin = pConfig->wPlayRule;
- req.paytype = pConfig->wMaxFanRule;
- req.desktype = pTableFrame->GetTableKind();// pConfig->wSubGameID;
- req.playtype = pConfig->wSubGameID;
- req.totalplay = pConfig->wPlayCountRule;
- req.bDuoLai = pConfig->bDuoLai;
- req.wFengDing = pConfig->wFengDing;
- req.ipLimit = pConfig->wMaxScore;
- req.playnum = pConfig->tmp1;
- req.tmp3 = pConfig->tmp2;
-
- req.isowner = 1;
- req.roomId = pTableFrame->GetTableID();
-
- UserInfo::PB_CS_S_UserSitDownAck SitDownAck;
- std::string szPrivateTableID = CW2AEX<1024>(req.szPrivateTableID, CP_UTF8).m_psz;
- SitDownAck.set_szprivatetableid(szPrivateTableID);
- SitDownAck.set_cbret(req.cbRet);
- SitDownAck.set_dijin(req.dijin);
- SitDownAck.set_paytype(req.paytype);
- SitDownAck.set_desktype(req.desktype);
- SitDownAck.set_playtype(req.playtype);
- SitDownAck.set_totalplay(req.totalplay);
- SitDownAck.set_bduolai(req.bDuoLai);
- SitDownAck.set_wfengding(req.wFengDing);
- SitDownAck.set_iplimit(req.ipLimit);
- SitDownAck.set_playnum(req.playnum);
- SitDownAck.set_tmp3(req.tmp3);
- SitDownAck.set_isowner(req.isowner);
- SitDownAck.set_roomid(req.roomId);
- //发送数据
- std::string pbdata = SitDownAck.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_ADDCREATE_TABLE_ID, (void*)pbdata.c_str(), pbdata.length());
-
- //用户状态
- pIServerUserItem->SetClientReady(true);
- pIServerUserItem->SetUserStatus(US_LOOKON, pTableFrame->GetTableID(), INVALID_CHAIR);
- }
-
-
- //俱乐部创建房间广播
- if (pClubHostInfoAck->UserSitDownData.data.tableType == 1 && pClubHostInfoAck->UserSitDownData.data.clubID != 0)
- {
- CMD_GR_UserData UserData;
- ZeroMemory(&UserData, sizeof(UserData));
- UserData.dwClubID = pClubHostInfoAck->UserSitDownData.data.clubID;
- UserData.newsFlag = 2;
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_NotifyUser, 0, &(UserData), sizeof(CMD_GR_UserData));
- }
- return true;
- }
-
-
- //俱乐部打样应答
- bool CAttemperEngineSink::OnDBGetClubSample(DWORD dwContextID, VOID * pData, WORD wDataSize){
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- CMD_GR_Club_Make_A_Sample * pSample = (CMD_GR_Club_Make_A_Sample *)pData;
- if (pSample == NULL) return false;
-
- Club::PB_CS_Club_Make_A_Sample MakeSample;
- MakeSample.set_dwclubid(pSample->dwClubID);
- MakeSample.set_issample(pSample->IsSample);
- //发送数据
- std::string pbdata = MakeSample.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_CLUB, SUB_GR_CLUB_GET_MAKEA_SAMPLE_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- if (pSample->IsSample == 1 && pSample->dwClubID)
- {
- std::vector<JN_GR_RoomListBig> ve;
- JN_GR_RoomListBig Rooms;
- ve.clear();
- //全局查找
- {
- CWHDataLocker DataLocker(m_CriticalSection);
- std::unordered_map<DWORD, JN_GR_RoomListBig>::iterator it2 = m_PrivateRoomAll.begin();
- while (it2 != m_PrivateRoomAll.end())
- {
- ZeroMemory(&Rooms, sizeof(JN_GR_RoomListBig));
- Rooms = it2->second;
- if (Rooms.roomType == 1 && Rooms.tmp6[0] == pSample->dwClubID)
- {
- ve.push_back(Rooms);
- }
- it2++;
- }
- }
- std::sort(ve.begin(), ve.end(), LessSort);//升序
- std::vector<JN_GR_RoomListBig>::iterator iter;
- //等待中
- for (iter = ve.begin(); iter != ve.end(); iter++)
- {
- if (iter->roomStatus == 0)
- {
- DWORD dwRoomID = iter->dwRoomNumber;
- m_pITCPSocketService->SendData(MDM_CS_USER_COLLECT, SUB_CS_DISSOLVEROOM, &dwRoomID, sizeof(DWORD));
- }
- }
- }
- return true;
-
- }
-
- ///+++是否为金币场服务器
- //bool CAttemperEngineSink::isVenueServer()
- //{
- // if (m_pGameServiceOption != NULL && GAME_GENRE_SCORE == m_pGameServiceOption->wServerType)
- // {
- // return true;
- // }
- // return false;
- //}
- //统计该场的总人数
- //DWORD CAttemperEngineSink::SumOnlineCount(WORD wVenueID)
- //{
- // //--不是金币场的服务器,就不用汇总了
- // if (wVenueID <= 0)
- // {
- // return 0;
- // }
- //
- // DWORD dwSum = 0;
- // //枚举数据
- // POSITION Position = NULL;
- // for (DWORD i = 0; i < m_ServerListManager.GetGameServerCount(); i++)
- // {
- // //获取数据
- // CGameServerItem * pGameServerItem = m_ServerListManager.EmunGameServerItem(Position);
- // if (pGameServerItem != NULL && pGameServerItem->m_GameServer.wNodeID == wVenueID)
- // {
- // dwSum += pGameServerItem->m_GameServer.dwOnLineCount;
- // }
- // }
- //
- // for (std::vector<tagVenueInfo>::iterator it = m_vecVenueInfo.begin(); it != m_vecVenueInfo.end(); it++)
- // {
- // tagVenueInfo& venue = *it;
- // if (venue.wVenueID == wVenueID)
- // {
- //#ifdef DEBUG
- // //CString strOnline;
- // //strOnline.Format(L"场馆人数wVenueID=%d dwSum =%d", wVenueID, dwSum);
- // //CTraceService::TraceString(strOnline, TraceLevel_Normal);
- //#endif // DEBUG
- //
- // venue.dwOnlineCount = dwSum;
- // break;;
- // }
- // }
- // return dwSum;
- //}
- //
- /////能否领取救济
- //bool CAttemperEngineSink::CanGetRelief(IServerUserItem* pIServerUserItem, WORD venueID)
- //{
- // if (pIServerUserItem != NULL && m_vecVenueInfo.size() > 0)
- // {
- // ///---救济领取信息(10秒内有效)
- // tagUserInfo* pUser = pIServerUserItem->GetUserInfo();
- // if (pUser != NULL)
- // {
- // if ((GetTickCount() - pUser->dwUpdateReliefLeftCount < 10 * 1000)
- // && pUser->wReliefLeftCount <= 0)
- // {
- // return false;
- // }
- // }
- //
- // const tagVenueInfo & venue = m_vecVenueInfo[0];
- // if ((0 == venueID || venue.wVenueID == venueID) && pIServerUserItem->GetUserScore() < venue.sMinScore)
- // {
- // return true;
- // }
- // }
- // return false;
- //}
- //
- //---拉取好友房服务器
- //bool CAttemperEngineSink::OnTCPNetworkPrivateGameSvr(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- //{
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //
- // //用户效验
- // ASSERT(pIServerUserItem != NULL);
- // if (pIServerUserItem == NULL)
- // {
- // return false;
- // }
- //
- // tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
- //
- // int iXinYong = pUserInfo->iXinYong; //用户信用等级
- //
- // //过滤不符合条件的服务器
- // std::vector<CGameServerItem*> gameSvrItemVec;
- //
- // POSITION Position = NULL;
- // CGameServerItem * pGameServerItem = NULL;
- // for (DWORD i = 0; i < m_ServerListManager.GetGameServerCount(); i++)
- // {
- // pGameServerItem = m_ServerListManager.EmunGameServerItem(Position);
- //
- // ///去掉金币服务器
- // if (pGameServerItem == NULL || pGameServerItem->m_GameServer.wNodeID > 0)
- // {
- // continue;
- // }
- //
- // //不提供服务
- // if (pGameServerItem->m_GameServer.bService < 1)
- // {
- // continue;
- // }
- //
- // //人员已满
- // if (pGameServerItem->m_GameServer.dwOnLineCount >= pGameServerItem->m_GameServer.dwFullCount)
- // {
- // continue;
- // }
- //
- // //玩家级别
- // if (pGameServerItem->m_GameServer.wServerLevel > iXinYong && gameSvrItemVec.size() > 1/*总得返回一个用吧*/)
- // {
- // continue;
- // }
- //
- // gameSvrItemVec.push_back(pGameServerItem);
- // }
- //
- // //找人数少的服务器
- // std::sort(gameSvrItemVec.begin(), gameSvrItemVec.end(), SortByLineCountFunc());
- // tagPrivateGameServer privateGameSvr;
- // //发送数据
- // std::string pbdata = "";
- // if (gameSvrItemVec.size() > 0)
- // {
- // //优先从人数少的随机选
- // int randIndex = gameSvrItemVec.size() >= 4 ? rand() % (gameSvrItemVec.size() / 2) : rand() % gameSvrItemVec.size();
- //
- // CGameServerItem* pGameSvr = gameSvrItemVec[randIndex];
- //
- // privateGameSvr.wKindID = pGameSvr->m_GameServer.wKindID; //名称索引
- // privateGameSvr.wNodeID = pGameSvr->m_GameServer.wNodeID; //节点索引
- // privateGameSvr.wSortID = pGameSvr->m_GameServer.wSortID; //排序索引
- // privateGameSvr.wServerID = pGameSvr->m_GameServer.wServerID; //房间索引
- // privateGameSvr.wServerKind = pGameSvr->m_GameServer.wServerKind; //房间类型
- // privateGameSvr.wServerType = pGameSvr->m_GameServer.wServerType; //房间类型
- // privateGameSvr.wServerPort = pGameSvr->m_GameServer.wServerPort; //房间端口
- // lstrcpyn(privateGameSvr.szServerAddr, pGameSvr->m_GameServer.szServerAddr, CountArray(privateGameSvr.szServerAddr));
- // //StringCbCat(privateGameSvr.szServerAddr, 32, pGameSvr->m_GameServer.szServerAddr); //房间地址
- // CString strHint;
- // strHint.Format(L"%d, %d, %d, %d, %d, %d, %d, %s",
- // privateGameSvr.wKindID,
- // privateGameSvr.wNodeID,
- // privateGameSvr.wSortID,
- // privateGameSvr.wServerID,
- // privateGameSvr.wServerKind,
- // privateGameSvr.wServerType,
- // privateGameSvr.wServerPort,
- // privateGameSvr.szServerAddr);
- // TRACE(L"svr=%s", strHint);
- //
- // UserInfo::PB_CS_S_tagPrivateGameServer GameServer;
- // GameServer.set_wkindid(pGameSvr->m_GameServer.wKindID);
- // GameServer.set_wnodeid(pGameSvr->m_GameServer.wNodeID);
- // GameServer.set_wsortid(pGameSvr->m_GameServer.wSortID);
- // GameServer.set_wserverid(pGameSvr->m_GameServer.wServerID);
- // GameServer.set_wserverkind(pGameSvr->m_GameServer.wServerKind);
- // GameServer.set_wservertype(pGameSvr->m_GameServer.wServerType);
- // GameServer.set_wserverport(pGameSvr->m_GameServer.wServerPort);
- // std::string szServerAddr = CW2AEX<1024>(pGameSvr->m_GameServer.szServerAddr, CP_UTF8).m_psz;
- // GameServer.set_szserveraddr(szServerAddr);
- // pbdata = GameServer.SerializePartialAsString();
- // }
- //
- // m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_USER, SUB_GR_USER_PRIVATE_GAME_SVR_ACK, (void*)pbdata.c_str(), pbdata.length());
- //
- //
- // return true;
- //
- //}
-
-
- //玩家自主解绑代理
- bool CAttemperEngineSink::OnTCPNetworkSubUserUntieAgent(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
-
- m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_GET_ZUANSHI_INFO, dwSocketID, &dUserID, sizeof(DWORD));
- return true;
- }
-
- ///用户获得代理解绑相关信息
- BOOL CAttemperEngineSink::OnDBUserUntieAgent(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(DBR_GR_GetUntieAgentInfo));
- if (wDataSize != sizeof(DBR_GR_GetUntieAgentInfo))
- {
- return FALSE;
- }
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DBR_GR_GetUntieAgentInfo * pGetUntieAgentInfo = (DBR_GR_GetUntieAgentInfo *)pData;
-
- GETDUILIEBASE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIEBASE));
- StringCchCat(Temp.szUnionID, 32, pIServerUserItem->GetUserInfo()->szUnionID);
- Temp.dUserID = pIServerUserItem->GetUserInfo()->dwUserID;
- _sntprintf(Temp.bb.szName, 32, TEXT("%d"), pIServerUserItem->GetUserInfo()->dDaiLi);
- _sntprintf(Temp.bb.szImgHead, 256, TEXT("%d"), pGetUntieAgentInfo->cbCost);
-
- //StringCchCat(Temp.szUnionID, 32, L"10043");
- //Temp.dUserID = 101088;
-
- Temp.CommendID = 10; //玩家自主解绑代理(只作透传)
- Temp.dwSocketID = dwContextID;
-
- CHttpClient::AddLog(dwContextID, Temp);
- return true;
- }
-
- //用户获得代理解绑相关信息
- bool CAttemperEngineSink::OnTCPNetworkSubUserAgentInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //ASSERT(wDataSize == sizeof(BYTE));
- //if (wDataSize != sizeof(BYTE))
- //{
- // return false;
- //}
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
-
- m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_GET_UNTIE_AGENT_INFO, dwSocketID, &dUserID, sizeof(DWORD));
- return true;
- }
-
- ///用户获得代理解绑相关信息
- BOOL CAttemperEngineSink::OnDBUserAgentInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(DBR_GR_GetUntieAgentInfo));
- if (wDataSize != sizeof(DBR_GR_GetUntieAgentInfo))
- {
- return FALSE;
- }
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_GetUntieAgentInfo * pGetUntieAgentInfo = (DBR_GR_GetUntieAgentInfo *)pData;
- pGetUntieAgentInfo->dwDaiLiID = pIServerUserItem->GetUserInfo()->dDaiLi;
-
- UserInfo::PB_CS_S_GetUntieAgentInfo AgentInfo;
- AgentInfo.set_cbcost(pGetUntieAgentInfo->cbCost);
- AgentInfo.set_cbdays(pGetUntieAgentInfo->cbDays);
- AgentInfo.set_dwcurrency(pGetUntieAgentInfo->dwCurrency);
- AgentInfo.set_dwdailiid(pGetUntieAgentInfo->dwDaiLiID);
-
- //发送数据
- std::string pbdata = AgentInfo.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_GET_UNTIE_AGENT_INFO_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
-
-
- ///---福利领取信息
- bool CAttemperEngineSink::OnTCPNetworkWelfareInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CString strHint;
- strHint.Format(L"Fun=%hs", __FUNCTION__);
- CTraceService::TraceString(strHint, TraceLevel_Debug);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DWORD dUserID = pIServerUserItem->GetUserID();
-
- //投递请求
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GP_WELFARE_INFO, dwSocketID, &dUserID, sizeof(dUserID));
-
- return true;
- }
-
- //查询福利信息应答
- BOOL CAttemperEngineSink::OnDBWelfareInfoResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(tagWelfareInfo) * 3);
- if (wDataSize != sizeof(tagWelfareInfo) * 3)
- {
- return FALSE;
- }
-
- tagWelfareInfo * pWelfareInfo = (tagWelfareInfo*)pData;
-
- tagWelfareInfo welfareInfArr[3];
- memcpy(welfareInfArr, pWelfareInfo, sizeof(tagWelfareInfo) * 3);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- UserInfo::PB_CS_S_tagWelfareInfo WelfareInfo;
- for (WORD i = 0; i < 3; i++)
- {
- UserInfo::pb_tagWelfareInfo *tagWelfareInfo = WelfareInfo.add_welfareinfo();
- tagWelfareInfo->set_btwelfaretype(welfareInfArr[i].btWelfareType);
- tagWelfareInfo->set_bttakednum(welfareInfArr[i].btTakedNum);
- tagWelfareInfo->set_bttotalnum(welfareInfArr[i].btTotalNum);
- tagWelfareInfo->set_btvalidflag(welfareInfArr[i].btValidFlag);
- }
- //发送数据
- std::string pbdata = WelfareInfo.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GP_WELFARE_INFO_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
-
- ///+++大转盘命令
- bool CAttemperEngineSink::OnTCPNetworkMainRoulette(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- switch (wSubCmdID)
- {
- case SUB_GF_ROULETEE_CONFIG: ///奖品配置+"我"的配置信息
- {
- return OnTCPNetworkMyRouletteConfig(pData, wDataSize, dwSocketID);
- }
- case SUB_GF_ROULETEE_LOTTERY: ///转盘抽奖
- {
- return OnTCPNetworkRouletteLottery(pData, wDataSize, dwSocketID);
- }
- case SUB_GF_LOTTERY_INFO: ///查询抽奖信息
- {
- return OnTCPNetworkLotteryInfo(pData, wDataSize, dwSocketID);
- }
- case SUB_GF_LOTTERY_HIS: ///查询抽奖历史记录
- {
- return OnTCPNetworkLotteryHis(pData, wDataSize, dwSocketID);
- }
- case SUB_GF_LOTTERY_AWARD: //手动领奖
- {
- return OnTCPNetworkLotteryAward(pData, wDataSize, dwSocketID);
- }
- case SUB_GF_LOTTERY_ADDRESS: //注册收件信息
- {
- return OnTCPNetworkLotteryAddress(pData, wDataSize, dwSocketID);
- }
- default: break;
- }
-
- return false;
- }
-
-
-
- ///拉取转盘奖品配置(返回我的转盘相关信息)
- bool CAttemperEngineSink::OnTCPNetworkMyRouletteConfig(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CString strHint;
- strHint.Format(L"Fun=%hs", __FUNCTION__);
- CTraceService::TraceString(strHint, TraceLevel_Debug);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- ASSERT(FALSE);
- return false;
- }
-
- DWORD dUserID = pIServerUserItem->GetUserID();
-
- m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_MY_ROULETTE_INFO, dwSocketID, &dUserID, sizeof(dUserID));
-
- return true;
- }
-
-
- ///+++DB返回转盘奖品配置结果
- BOOL CAttemperEngineSink::OnDBRouletteConfig(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize % sizeof(tagRouletteConfig) == 0);
- if (wDataSize % sizeof(tagRouletteConfig) != 0)
- {
- return FALSE;
- }
-
- ///---清除以前的数据
- if (wDataSize > 0)
- {
- m_vecRouletteConfig.clear();
- }
-
-
- //变量定义
- WORD wItemCount = wDataSize / sizeof(tagRouletteConfig);
- tagRouletteConfig * pRouletteConfig = (tagRouletteConfig *)pData;
-
- for (WORD i = 0; i < wItemCount; i++)
- {
- tagRouletteConfig rouletteConfig(*pRouletteConfig);
- //插入列表
- m_vecRouletteConfig.push_back(rouletteConfig);
- pRouletteConfig++;
- }
-
- ///--第二步、执行抽奖
- WORD wLotteryType = 0;
- _DoRouletteLottery(&wLotteryType, sizeof(wLotteryType), dwContextID);
- return true;
- }
-
-
- ///++中奖历史
- BOOL CAttemperEngineSink::OnDBLotteryHis(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize % sizeof(tagLotteryHis) == 0);
- if (wDataSize % sizeof(tagLotteryHis) != 0)
- {
- return FALSE;
- }
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
- tagLotteryHisACK * pLotteryHis = (tagLotteryHisACK*)pData;
-
- TurntableLogon::PB_CS_S_tagLotteryHisACK LotteryHis;
- for (int i = 0; i < 30; i++)
- {
- if (pLotteryHis->LotteryHis[i].dwUserID == 0)continue;
- TurntableLogon::PB_CS_S_tagLotteryHis *tagLottery = LotteryHis.add_lotteryhis();
- tagLottery->set_dwuserid(pLotteryHis->LotteryHis[i].dwUserID);
- std::string szUserName = CW2AEX<1024>(pLotteryHis->LotteryHis[i].szUserName, CP_UTF8).m_psz;
- std::string szLotteryName = CW2AEX<1024>(pLotteryHis->LotteryHis[i].szLotteryName, CP_UTF8).m_psz;
- std::string szInputeDate = CW2AEX<1024>(pLotteryHis->LotteryHis[i].szInputeDate, CP_UTF8).m_psz;
- std::string szGetLotteryDate = CW2AEX<1024>(pLotteryHis->LotteryHis[i].szGetLotteryDate, CP_UTF8).m_psz;
- tagLottery->set_szusername(szUserName);
- tagLottery->set_wlotterytype(pLotteryHis->LotteryHis[i].wLotteryType);
- tagLottery->set_wrouletteid(pLotteryHis->LotteryHis[i].wRouletteID);
- tagLottery->set_szlotteryname(szLotteryName);
- tagLottery->set_szgetlotterydate(szInputeDate);
- tagLottery->set_szgetlotterydate(szGetLotteryDate);
- tagLottery->set_btgetlotteryflag(pLotteryHis->LotteryHis[i].btGetLotteryFlag);
- }
- //发送数据
- std::string pbdata = LotteryHis.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GF_ROULETEE, SUB_GF_LOTTERY_HIS_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- BOOL CAttemperEngineSink::OnDBLotteryHisEx(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize % sizeof(tagLotteryHisEx) == 0);
- if (wDataSize % sizeof(tagLotteryHisEx) != 0)
- {
- return FALSE;
- }
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
- tagLotteryHisExACK* pLotteryHis = (tagLotteryHisExACK*)pData;
-
- TurntableLogon::PB_CS_S_tagLotteryHisExACK LotteryHis;
- for (int i = 0; i < 6; i++)
- {
- if (pLotteryHis->LotteryHis[i].dwRecordID == 0)continue;
- TurntableLogon::PB_CS_S_tagLotteryHisEx* tagLottery = LotteryHis.add_lotteryhisex();
- tagLottery->set_dwrecordid(pLotteryHis->LotteryHis[i].dwRecordID);
- tagLottery->set_wrouletteid(pLotteryHis->LotteryHis[i].wRouletteID);
- std::string szLotteryName = CW2AEX<1024>(pLotteryHis->LotteryHis[i].szLotteryName, CP_UTF8).m_psz;
- std::string szInputeDate = CW2AEX<1024>(pLotteryHis->LotteryHis[i].szInputeDate, CP_UTF8).m_psz;
- tagLottery->set_szlotteryname(szLotteryName);
- tagLottery->set_szinputedate(szInputeDate);
- tagLottery->set_btgetlotteryflag(pLotteryHis->LotteryHis[i].btGetLotteryFlag);
- }
- //发送数据
- std::string pbdata = LotteryHis.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GF_ROULETEE, SUB_GF_LOTTERY_HIS_ACKEX, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
- ///+++DB返回转盘奖品配置结果
- BOOL CAttemperEngineSink::OnDBMyRouletteInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(tagRouletteConfig2));
- if (wDataSize != sizeof(tagRouletteConfig2))
- {
- return FALSE;
- }
-
- //--查看用
- tagRouletteConfig2 rouletteConfig2;
- memcpy(&rouletteConfig2, pData, wDataSize);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
- TurntableLogon::PB_CS_S_tagRouletteConfig2 RouletteConfig;
- RouletteConfig.set_wresult(rouletteConfig2.wResult);
- std::string szDesc = CW2AEX<1024>(rouletteConfig2.szDesc, CP_UTF8).m_psz;
- std::string szICON = CW2AEX<1024>(rouletteConfig2.szICON, CP_UTF8).m_psz;
- std::string szLotteryRule = CW2AEX<1024>(rouletteConfig2.szLotteryRule, CP_UTF8).m_psz;
- RouletteConfig.set_szdesc(szDesc);
- RouletteConfig.set_wid(rouletteConfig2.wID);
- RouletteConfig.set_szicon(szICON);
- RouletteConfig.set_whadlotterycount(rouletteConfig2.wHadLotteryCount);
- RouletteConfig.set_wlotterycountpara(rouletteConfig2.wLotteryCountPara);
- RouletteConfig.set_wlotterylimit(rouletteConfig2.wLotteryLimit);
- RouletteConfig.set_winningvalue(rouletteConfig2.wInningValue);
- RouletteConfig.set_wrechargevalue(rouletteConfig2.wRechargeValue);
- for (WORD i = 0; i < 3; i++)
- {
- RouletteConfig.add_winninginfo(rouletteConfig2.wInningInfo[i]);
- }
- RouletteConfig.set_cbrechargeinfo(rouletteConfig2.cbRechargeInfo);
- RouletteConfig.set_szlotteryrule(szLotteryRule);
- //发送数据
- std::string pbdata = RouletteConfig.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GF_ROULETEE, SUB_GF_ROULETEE_CONFIG_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
-
- ///+++转盘抽奖
- bool CAttemperEngineSink::OnTCPNetworkRouletteLottery(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- ///---第一步 拉取轮盘奖品的配置
- m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_GET_ROULETTE_CONFIG, dwSocketID, pData, wDataSize);
- return true;
-
- }
-
- /// 转盘抽奖
- bool CAttemperEngineSink::_DoRouletteLottery(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- ASSERT(wDataSize == sizeof(WORD));
- if (wDataSize != sizeof(WORD))
- {
- return false;
- }
-
- WORD wLotteryType = *((WORD *)pData);
- ASSERT(0 == wLotteryType || 1 == wLotteryType);
-
- //判断有没有配置奖品
- ASSERT(m_vecRouletteConfig.size() > 0);
- if (m_vecRouletteConfig.size() <= 0)
- {
- CTraceService::TraceString(L"转盘奖品配置为空(表Roulette)", TraceLevel_Warning);
- return true;
- }
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- //概率总和
- DWORD dwOddSum = 0;
- std::vector<tagRouletteConfig>::iterator it;
- for (it = m_vecRouletteConfig.begin(); it != m_vecRouletteConfig.end(); it++)
- {
- tagRouletteConfig roulette = *it;
-
- ///---过滤掉个数为0的奖品
- if (roulette.iQuantity <= 0)
- {
- continue;
- }
-
- dwOddSum += roulette.wOdds;
- }
-
- srand(GetTickCount());
- DWORD dwRand = rand() % dwOddSum + 1;
-
- for (it = m_vecRouletteConfig.begin(); it != m_vecRouletteConfig.end(); it++)
- {
- tagRouletteConfig roulette = *it;
-
- ///---过滤掉个数为0的奖品
- if (roulette.iQuantity <= 0)
- {
- continue;
- }
-
- if (dwRand <= roulette.wOdds)
- {
- break;
- }
- else
- {
- dwRand -= roulette.wOdds;
- }
- }
-
- ASSERT(it != m_vecRouletteConfig.end());
- if (it != m_vecRouletteConfig.end())
- {
- CString strLottery;
- strLottery.Format(L"UserID=%d 中奖结果:%s", pIServerUserItem->GetUserID(), (*it).szName);
- CTraceService::TraceString(strLottery, TraceLevel_Normal);
- }
-
- ///---记录中奖信息
- DBR_GR_RouletteLottery rouletteLottery;
- rouletteLottery.dwUserID = pIServerUserItem->GetUserID();
- rouletteLottery.wLotteryType = wLotteryType; ///---抽奖类型 0:轮盘抽奖 1:玩牌抽奖 2017-12-29
- rouletteLottery.dwClientAddr = pIServerUserItem->GetClientAddr();
- lstrcpyn(rouletteLottery.szMachineID, pIServerUserItem->GetMachineID(), CountArray(rouletteLottery.szMachineID));
-
- rouletteLottery.wRouletteLotteryID = (*it).wID;
- lstrcpyn(rouletteLottery.szLotteryName, (*it).szName, CountArray(rouletteLottery.szLotteryName));
-
- m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_ROULETTE_LOTTERY, dwSocketID, &rouletteLottery, sizeof(rouletteLottery));
-
- return true;
- }
-
-
- ///+++轮盘抽奖
- BOOL CAttemperEngineSink::OnDBRouletteLottery(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(tagLotteryResultEx));
- if (wDataSize != sizeof(tagLotteryResultEx))
- {
- return FALSE;
- }
-
- tagLotteryResultEx * pLotteryResult = (tagLotteryResultEx*)pData;
-
- {
- CString strLottery;
- strLottery.Format(L"lScore=%lld, dwBean=%d", pLotteryResult->LotteryResult.lScore, pLotteryResult->LotteryResult.dwBean);
- CTraceService::TraceString(strLottery, TraceLevel_Normal);
- }
-
- if (pLotteryResult->LotteryResult.wResult == 0)
- {
- if (pLotteryResult->wAwardType <= 2)
- {
- _sntprintf(pLotteryResult->LotteryResult.szResultDesc, CountArray(pLotteryResult->LotteryResult.szResultDesc), TEXT("恭喜您获得%s"), pLotteryResult->LotteryResult.szDesc);
- }
- else if (pLotteryResult->wAwardType == 4)
- {
- if (pLotteryResult->szPhoneNum[0] == _T('\0'))
- _sntprintf(pLotteryResult->LotteryResult.szResultDesc, CountArray(pLotteryResult->LotteryResult.szResultDesc), TEXT("恭喜您获得%s\n[ff0000]请去\"我的奖品\"完善收件信息!"), pLotteryResult->LotteryResult.szDesc);
- else
- _sntprintf(pLotteryResult->LotteryResult.szResultDesc, CountArray(pLotteryResult->LotteryResult.szResultDesc), TEXT("恭喜您获得%s"), pLotteryResult->LotteryResult.szDesc);
- }
- else if (pLotteryResult->wAwardType == 3 || pLotteryResult->wAwardType == 6 || pLotteryResult->wAwardType == 7)
- {
- if (pLotteryResult->szPhoneNum[0] == _T('\0'))
- _sntprintf(pLotteryResult->LotteryResult.szResultDesc, CountArray(pLotteryResult->LotteryResult.szResultDesc), TEXT("恭喜您获得%s\n[ff0000]您尚未绑定手机号,请去\"我的奖品\"手动领取"), pLotteryResult->LotteryResult.szDesc);
- else
- _sntprintf(pLotteryResult->LotteryResult.szResultDesc, CountArray(pLotteryResult->LotteryResult.szResultDesc), TEXT("恭喜您获得%s"), pLotteryResult->LotteryResult.szDesc);
- }
- else if (pLotteryResult->wAwardType == 8)
- {
- _sntprintf(pLotteryResult->LotteryResult.szResultDesc, CountArray(pLotteryResult->LotteryResult.szResultDesc), TEXT("%s"), pLotteryResult->LotteryResult.szDesc);
- }
- }
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- //--抽奖成功,更新下 // 2018-3-29
- pIServerUserItem->GetUserInfo()->lScore = pLotteryResult->LotteryResult.lScore;
- pIServerUserItem->GetUserInfo()->dwBean = pLotteryResult->LotteryResult.dwBean;
-
- TurntableLogon::PB_CS_S_tagLotteryResult Result;
- Result.set_wresult(pLotteryResult->LotteryResult.wResult);
- std::string szDesc = CW2AEX<1024>(pLotteryResult->LotteryResult.szDesc, CP_UTF8).m_psz;
- std::string szResultDesc = CW2AEX<1024>(pLotteryResult->LotteryResult.szResultDesc, CP_UTF8).m_psz;
- Result.set_szdesc(szDesc);
- Result.set_wlotterytype(pLotteryResult->LotteryResult.wLotteryType);
- Result.set_wroulettelotterid(pLotteryResult->LotteryResult.wRouletteLotterID);
- Result.set_whadlotterycount(pLotteryResult->LotteryResult.wHadLotteryCount);
- Result.set_wlotterycountpara(pLotteryResult->LotteryResult.wLotteryCountPara);
- Result.set_lscore(pLotteryResult->LotteryResult.lScore);
- Result.set_dwbean(pLotteryResult->LotteryResult.dwBean);
- Result.set_szresultdesc(szResultDesc);
- //发送数据
- std::string pbdata = Result.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GF_ROULETEE, SUB_GF_ROULETEE_LOTTERY_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- //抽奖记录传到web端 过滤掉金币钻石、谢谢惠顾
- if (pLotteryResult->wAwardType > 2 && pLotteryResult->wAwardType < 8 )
- {
- GETDUILIEBASE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIEBASE));
- Temp.dUserID = pIServerUserItem->GetUserInfo()->dwUserID;
- _sntprintf(Temp.bb.szName, 32, TEXT("%d"), pLotteryResult->LotteryResult.wRouletteLotterID);
- StringCchCat(Temp.bb.szImgHead, 12, pLotteryResult->szPhoneNum);
- _sntprintf(Temp.szUnionID, 32, TEXT("%d"), pLotteryResult->wAwardType);
- sprintf(Temp.szBuffer, "%d", pLotteryResult->dwRecordID);
-
- Temp.CommendID = 11; //抽奖记录
- Temp.dwSocketID = dwContextID;
-
- CHttpClient::AddLog(dwContextID, Temp);
- }
-
- return true;
- }
-
- ///查询抽奖信息
- bool CAttemperEngineSink::OnTCPNetworkLotteryInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- ASSERT(wDataSize == sizeof(WORD));
-
- if (wDataSize != sizeof(WORD))
- {
- return false;
- }
-
- WORD wLotteryType = *((WORD *)pData);
- ASSERT(0 == wLotteryType || 1 == wLotteryType);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- ///---记录中奖信息
- DBR_GR_LotteryInfo rouletteLotteryInfo;
- rouletteLotteryInfo.dwUserID = pIServerUserItem->GetUserID();
- rouletteLotteryInfo.wLotteryType = wLotteryType; ///---抽奖类型 0:轮盘抽奖 1:玩牌抽奖 2017-12-29
-
- m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_LOTTERY_INFO, dwSocketID, &rouletteLotteryInfo, sizeof(rouletteLotteryInfo));
-
- return true;
- }
-
-
- ///---查询签到奖品 ( 已经预加载 CT_LOAD_SERVICE_CONFIG )
- bool CAttemperEngineSink::OnTCPNetworkCheckinReward(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //变量定义
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnTCPNetworkCheckinReward"), TraceLevel_Debug);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- UserInfo::PB_CS_S_tagCheckinReward CheckinReward;
- for (WORD i = 0; i < LEN_WEEK; i++)
- {
- CheckinReward.add_lrewardgold(m_checkinReward[i].lRewardGold);
- CheckinReward.add_irewardcurrency(m_checkinReward[i].iRewardCurrency);
- }
- //发送数据
- std::string pbdata = CheckinReward.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwSocketID, MDM_GR_USER, SUB_GP_CHECKIN_REWARD2_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
-
- ///---查询签到信息
- bool CAttemperEngineSink::OnTCPNetworkCheckinQuery(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnTCPNetworkCheckinQuery"), TraceLevel_Debug);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DWORD dUserID = pIServerUserItem->GetUserID();
-
- //投递请求
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GP_CHECKIN_QUERY_INFO, dwSocketID, &dUserID, sizeof(dUserID));
-
- return true;
- }
-
- //查询玩家签到信息
- bool CAttemperEngineSink::OnDBUserCheckInInfo(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //变量定义
- tagCheckInInfo * pCheckInInfo = (tagCheckInInfo *)pData;
-
- //变量定义
- tagCheckInInfo CheckInInfo;
- ZeroMemory(&CheckInInfo, sizeof(CheckInInfo));
-
- //构造变量
- CheckInInfo.bSuccessed = pCheckInInfo->bSuccessed; //成功标识
- CheckInInfo.bTodayChecked = pCheckInInfo->bTodayChecked;
- CheckInInfo.wSeriesDate = pCheckInInfo->wSeriesDate;
- lstrcpyn(CheckInInfo.szNotifyContent, pCheckInInfo->szNotifyContent, CountArray(CheckInInfo.szNotifyContent));
-
-
-
- UserCheckinInfo userCheckinInfo;
-
- userCheckinInfo.btTodayChecked = CheckInInfo.bTodayChecked ? 1 : 0;
- userCheckinInfo.wSeriesDay = CheckInInfo.wSeriesDate;
- memcpy(&userCheckinInfo.checkinReward, m_checkinReward, sizeof(userCheckinInfo.checkinReward));
-
- UserInfo::PB_CS_S_UserCheckinInfo CheckinInfo;
- CheckinInfo.set_bttodaychecked(userCheckinInfo.btTodayChecked);
- CheckinInfo.set_wseriesday(userCheckinInfo.wSeriesDay);
- for (WORD i = 0; i < LEN_WEEK; i++)
- {
- UserInfo::pb_tagCheckinReward* CheckinReward = CheckinInfo.add_checkinreward();
- CheckinReward->set_lrewardgold(userCheckinInfo.checkinReward[i].lRewardGold);
- CheckinReward->set_irewardcurrency(userCheckinInfo.checkinReward[i].iRewardCurrency);
- }
- //发送数据
- std::string pbdata = CheckinInfo.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GP_CHECKIN_INFO2_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
-
- ///---执行签到
- bool CAttemperEngineSink::OnTCPNetworkCheckinDone(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- CTraceService::TraceString(TEXT("CAttemperEngineSink::OnTCPNetworkCheckinQuery"), TraceLevel_Debug);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- tagCheckInDone checkinDown;
- checkinDown.dwUserID = pIServerUserItem->GetUserID();
- checkinDown.dwClientAddr = pIServerUserItem->GetClientAddr();
- lstrcpyn(checkinDown.szMachineID, pIServerUserItem->GetMachineID(), CountArray(checkinDown.szMachineID));
-
- //投递请求
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GP_CHECKIN_DONE, dwSocketID, &checkinDown, sizeof(checkinDown));
-
- return true;
- }
-
- //签到结果
- bool CAttemperEngineSink::OnDBUserCheckInResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- //变量定义
- tagCheckInResult * pCheckInResult = (tagCheckInResult *)pData;
-
- //变量定义
- tagCheckInResult checkinResult;
- ZeroMemory(&checkinResult, sizeof(checkinResult));
-
- //构造变量
- ///===checkinResult.bSuccessed = pCheckInResult->bSuccessed;
- checkinResult.btSuccessed = pCheckInResult->btSuccessed;
- checkinResult.lScore = pCheckInResult->lScore;
- checkinResult.dwBean = pCheckInResult->dwBean;
- lstrcpyn(checkinResult.szNotifyContent, pCheckInResult->szNotifyContent, CountArray(checkinResult.szNotifyContent));
-
- //--签到成功,更新下 // 2018-3-29
- if (checkinResult.btSuccessed)
- {
- pIServerUserItem->GetUserInfo()->lScore = checkinResult.lScore;
- pIServerUserItem->GetUserInfo()->dwBean = checkinResult.dwBean;
- }
-
- UserInfo::PB_CS_S_tagCheckInResult InResult;
- InResult.set_btsuccessed(checkinResult.btSuccessed);
- InResult.set_lscore(checkinResult.lScore);
- InResult.set_dwbean(checkinResult.dwBean);
- std::string szNotifyContent = CW2AEX<1024>(checkinResult.szNotifyContent, CP_UTF8).m_psz;
- InResult.set_sznotifycontent(szNotifyContent);
- //发送数据
- std::string pbdata = InResult.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GP_CHECKIN_DONE2_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
-
-
- //签到的奖励
- bool CAttemperEngineSink::OnDBCheckInReward(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //参数校验
- ASSERT(wDataSize == sizeof(tagCheckinReward)*LEN_WEEK);
- if (wDataSize != sizeof(tagCheckinReward)*LEN_WEEK)
- {
- return false;
- }
-
- //提取数据
- tagCheckinReward * pCheckinReward = (tagCheckinReward *)pData;
-
- //保存到成员变量
- CopyMemory(m_checkinReward, pCheckinReward, sizeof(tagCheckinReward)*LEN_WEEK);
- return true;
- }
-
-
- ///+++轮盘抽奖
- bool CAttemperEngineSink::OnDBQueryLotteryInfoResult(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(tagLotteryInfo));
- if (wDataSize != sizeof(tagLotteryInfo))
- {
- return false;
- }
-
- tagLotteryInfo * pLotteryInfo = (tagLotteryInfo*)pData;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
- TurntableLogon::PB_CS_S_tagLotteryInfo LotteryInfo;
- LotteryInfo.set_wresult(pLotteryInfo->wResult);
- LotteryInfo.set_wlotterytype(pLotteryInfo->wLotteryType);
- LotteryInfo.set_whadlotterycount(pLotteryInfo->wHadLotteryCount);
- LotteryInfo.set_wlotterycountpara(pLotteryInfo->wLotteryCountPara);
- LotteryInfo.set_wcurrentdrawcount(pLotteryInfo->wCurrentDrawCount);
- LotteryInfo.set_wdrawlotterycountpara(pLotteryInfo->wDrawLotteryCountPara);
- std::string szDesc = CW2AEX<1024>(pLotteryInfo->szDesc, CP_UTF8).m_psz;
- LotteryInfo.set_szdesc(szDesc);
- //发送数据
- std::string pbdata = LotteryInfo.SerializePartialAsString();
-
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GF_ROULETEE, SUB_GF_LOTTERY_INFO_ACK, (void*)pbdata.c_str(), pbdata.length());
-
- return true;
- }
-
- ///查询抽奖历史记录 BYTE btQueryFlag; //++查询标志 0:只查自己的;1:查最近中奖记录
- bool CAttemperEngineSink::OnTCPNetworkLotteryHis(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- TurntableLogon::PB_CS_C_workLotteryHis LotteryHis;
- LotteryHis.ParseFromArray(pData, wDataSize);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- ///---记录中奖信息
- DBR_GR_LotteryHis lotteryHis;
- lotteryHis.dwUserID = pIServerUserItem->GetUserID();
- lotteryHis.btQueryFlag = LotteryHis.btqueryflag(); //查询标志 0:只查自己的;1:查最近中奖记录
- // to do 判断用户版本号
- TCHAR szMachineID[LEN_MACHINE_ID] = { 0 };
- memcpy(szMachineID, pIServerUserItem->GetMachineID(), sizeof(szMachineID));
- del_char(szMachineID, L'.');
- __int64 iMachineID = StrToNmuber(szMachineID);
-
- /*if (iMachineID < 112)
- {
- m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_LOTTERY_HIS, dwSocketID, &lotteryHis, sizeof(lotteryHis));
- }
- else
- {*/
- m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GP_LOTTERY_HIS_EX, dwSocketID, &lotteryHis, sizeof(lotteryHis));
- /*}*/
-
- return true;
- }
-
- //扫码绑定执行代码加钻和代理id
- bool CAttemperEngineSink::OnSetAddBingIDAndCurrency(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_GR_GetDaiLiSaoMaResult)
- || wDataSize == sizeof(CMD_GR_GetDaiLiSaoMaResult));
-
- //效验参数
- if (wDataSize != sizeof(CMD_GR_GetDaiLiSaoMaResult)
- && wDataSize != sizeof(CMD_GR_GetDaiLiSaoMaResult)) return false;
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
-
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBO_GR_TASK_SAOMA, dwSocketID, pData, wDataSize);
-
- return true;
- }
-
- //扫码绑定给前端推送钻石数量
- bool CAttemperEngineSink::OnDBUserZuanShi(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(CMD_GR_UserBean)
- || wDataSize == sizeof(CMD_GR_UserBean));
-
- //效验参数
- if (wDataSize != sizeof(CMD_GR_UserBean)
- && wDataSize != sizeof(CMD_GR_UserBean)) return false;
-
- //dwContextID
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL) return false;
- CMD_GR_UserBean* gg = (CMD_GR_UserBean*)pData;
- UserInfo::PB_CS_S_UserBean Bean;
- Bean.set_dwcurrbeans(gg->dwCurrBeans);
- //发送数据
- std::string pbdata = Bean.SerializePartialAsString();
- m_pITCPNetworkEngine->SendData(dwContextID, MDM_GR_USER, SUB_GR_USER_BEAN, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- //回调抽奖记录入库,更新领取标志
- bool CAttemperEngineSink::OnTCPNetworkSubUserLotteryResultCallBack(WORD wLotteryID, DWORD dwSocketID)
- {
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DBR_GR_LotteryFlag struLotteryFlag;
- struLotteryFlag.wLotteryID = wLotteryID;
- struLotteryFlag.dwUserID = pIServerUserItem->GetUserID();
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GP_LOTTERY_FLAG, dwSocketID, &struLotteryFlag, sizeof(DBR_GR_LotteryFlag));
- }
-
- ///手动领奖
- bool CAttemperEngineSink::OnTCPNetworkLotteryAward(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- TurntableLogon::PB_CS_C_workLotteryAward LotteryAward;
- LotteryAward.ParseFromArray(pData, wDataSize);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
-
- DBR_GR_LotteryAward struLotteryAward;
- struLotteryAward.dwRecordID = LotteryAward.precord();
- struLotteryAward.dwUserID = pIServerUserItem->GetUserID();
-
- //投递请求
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GP_LOTTERY_AWARD, dwSocketID, &struLotteryAward, sizeof(struLotteryAward));
-
- return true;
- }
- //注册收件信息
- bool CAttemperEngineSink::OnTCPNetworkLotteryAddress(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- TurntableLogon::PB_CS_LotteryAddr LotteryAddr;
- LotteryAddr.ParseFromArray(pData, wDataSize);
- CString szaddress = (CA2CTEX<2048>(LotteryAddr.szaddress().c_str(), CP_UTF8)).m_szBuffer;
- CString szaddressname = (CA2CTEX<2048>(LotteryAddr.szaddressname().c_str(), CP_UTF8)).m_szBuffer;
- CString szaddrphonenum = (CA2CTEX<2048>(LotteryAddr.szaddrphonenum().c_str(), CP_UTF8)).m_szBuffer;
-
- //处理消息
- CMD_GR_LotteryAddr pLotteryAddr;
- ZeroMemory(&pLotteryAddr, sizeof(pLotteryAddr));
- _sntprintf(pLotteryAddr.szAddress, CountArray(pLotteryAddr.szAddress), TEXT("%s"), szaddress);
- _sntprintf(pLotteryAddr.szAddressName, CountArray(pLotteryAddr.szAddressName), TEXT("%s"), szaddressname);
- _sntprintf(pLotteryAddr.szAddrPhoneNum, CountArray(pLotteryAddr.szAddrPhoneNum), TEXT("%s"), szaddrphonenum);
- //_stprintf_s(pLotteryAddr.szAddress, 11, _T("%S"), LotteryAddr.szaddress().c_str());
- //_stprintf_s(pLotteryAddr.szAddressName, 11, _T("%S"), LotteryAddr.szaddressname().c_str());
- //_stprintf_s(pLotteryAddr.szAddrPhoneNum, 11, _T("%S"), LotteryAddr.szaddrphonenum().c_str());
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- //用户效验
- ASSERT(pIServerUserItem != NULL);
- if (pIServerUserItem == NULL)
- {
- return false;
- }
- DBR_GR_LotteryAddr struLotteryAddr;
- struLotteryAddr.dwUserID = pIServerUserItem->GetUserID();
- memcpy(struLotteryAddr.szAddress, pLotteryAddr.szAddress, sizeof(struLotteryAddr.szAddress));
- memcpy(struLotteryAddr.szAddressName, pLotteryAddr.szAddressName, sizeof(struLotteryAddr.szAddressName));
- memcpy(struLotteryAddr.szAddrPhoneNum, pLotteryAddr.szAddrPhoneNum, sizeof(struLotteryAddr.szAddrPhoneNum));
-
- //投递请求
- m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GP_LOTTERY_ADDRESS, dwSocketID, &struLotteryAddr, sizeof(struLotteryAddr));
-
- return true;
- }
-
- //手动领奖
- BOOL CAttemperEngineSink::OnDBRouletteAward(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(wDataSize == sizeof(DBR_GR_LotteryAward));
- if (wDataSize != sizeof(DBR_GR_LotteryAward))
- {
- return FALSE;
- }
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
-
- DBR_GR_LotteryAward * pLotteryAward = (DBR_GR_LotteryAward*)pData;
-
- if (pLotteryAward->cbCheckResult != 0)
- {
- CMD_GR_RequestFailureAward RequestFailure;
- ZeroMemory(&RequestFailure, sizeof(RequestFailure));
-
- //设置变量
- RequestFailure.lErrorCode = 1; //表示失败
- switch (pLotteryAward->cbCheckResult)
- {
- case 1:
- {
- _sntprintf(RequestFailure.szDescribeString, CountArray(RequestFailure.szDescribeString), TEXT("奖品已领取!"));
- break;
- }
- case 2:
- {
- _sntprintf(RequestFailure.szDescribeString, CountArray(RequestFailure.szDescribeString), TEXT("奖品发放中,请稍候查收!"));
- break;
- }
- case 3:
- {
- _sntprintf(RequestFailure.szDescribeString, CountArray(RequestFailure.szDescribeString), TEXT("领取失败,必要信息不全!"));
- break;
- }
- default:
- {
- _sntprintf(RequestFailure.szDescribeString, CountArray(RequestFailure.szDescribeString), TEXT("奖品发放异常,请联系客服!"));
- break;
- }
- }
- ////发送数据
- //WORD wDataSize = CountStringBuffer(RequestFailure.szDescribeString);
- //WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
-
- if (pIServerUserItem != NULL)
- {
- TurntableLogon::PB_CS_C_workLotteryAward LotteryAward;
- LotteryAward.set_lerrorcode(RequestFailure.lErrorCode);
- std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
- LotteryAward.set_szdescribestring(szDescribeString);
- //发送数据
- std::string pbdata = LotteryAward.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GF_ROULETEE, SUB_GF_LOTTERY_AWARD, (void*)pbdata.c_str(), pbdata.length());
- }
- }
- else
- {
-
- //发放奖品
- GETDUILIEBASE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIEBASE));
- Temp.dUserID = pLotteryAward->dwUserID;
- StringCchCat(Temp.szUnionID, 12, pLotteryAward->szAddrPhoneNum);
- StringCchCat(Temp.bb.szName, 17, pLotteryAward->szAddressee);
- StringCchCat(Temp.bb.szImgHead, 129, pLotteryAward->szAddress);
- sprintf(Temp.szBuffer, "%d", pLotteryAward->dwRecordID);
-
- Temp.CommendID = 12; //抽奖记录
- Temp.dwSocketID = dwContextID;
-
- CHttpClient::AddLog(dwContextID, Temp);
-
- CMD_GR_RequestFailureAward RequestFailure;
- ZeroMemory(&RequestFailure, sizeof(RequestFailure));
-
- //设置变量
- RequestFailure.lErrorCode = 0; //表示成功
- CString str;
- str.Format(_T("%d"), pLotteryAward->dwRecordID);
- _sntprintf(RequestFailure.szDescribeString, CountArray(RequestFailure.szDescribeString), str);
- ////发送数据
- //WORD wDataSize = CountStringBuffer(RequestFailure.szDescribeString);
- //WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
- if (pIServerUserItem != NULL)
- {
- TurntableLogon::PB_CS_C_workLotteryAward LotteryAward;
- LotteryAward.set_lerrorcode(RequestFailure.lErrorCode);
- std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
- LotteryAward.set_szdescribestring(szDescribeString);
- //发送数据
- std::string pbdata = LotteryAward.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GF_ROULETEE, SUB_GF_LOTTERY_AWARD, (void*)pbdata.c_str(), pbdata.length());
- }
- }
- return true;
- }
-
- //分享战绩到闲聊
- bool CAttemperEngineSink::OnDBFenXiangReCord(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- DBR_GR_ClubRecordXianLiao * pClubRecord = (DBR_GR_ClubRecordXianLiao*)pData;
- GETDUILIEBASE Temp;
- ZeroMemory(&Temp, sizeof(GETDUILIEBASE));
- Temp.CommendID = 13; //调用.net闲聊分享战绩
- //Temp.dwSocketID = pClubRecord->dwTableID;//桌子号
- //Temp.dUserID = pClubRecord->dwClubID;//俱乐部id
- switch (pClubRecord->WanFa)
- {
- case 0:
- case 1:
- case 2:
- {
- TCHAR szBuffer[32] = _T("一脚癞油");
- _sntprintf(Temp.szUnionID, CountArray(Temp.szUnionID), TEXT("%s %d人玩法\n桌子号%d 底分%d"), szBuffer, pClubRecord->dwUserCount, pClubRecord->dwTableID,pClubRecord->DiFen);
- break;
- }
- case 3:
- case 4:
- case 5:
- {
- if (pClubRecord->dwUserCount == 3)
- {
- TCHAR szBuffer[32] = _T("戳虾子");
- _sntprintf(Temp.szUnionID, CountArray(Temp.szUnionID), TEXT("%s %d人玩法\n桌子号%d 底分%d"), szBuffer, pClubRecord->dwUserCount, pClubRecord->dwTableID, pClubRecord->DiFen);
- }
- else
- {
- TCHAR szBuffer[32] = _T("戳虾子-单挑");
- _sntprintf(Temp.szUnionID, CountArray(Temp.szUnionID), TEXT("%s %d人玩法\n桌子号%d 底分%d"), szBuffer, pClubRecord->dwUserCount, pClubRecord->dwTableID, pClubRecord->DiFen);
- }
-
- break;
- }
- case 10:
- case 11:
- case 12:
- {
- TCHAR szBuffer[32] = _T("血流成河");
- _sntprintf(Temp.szUnionID, CountArray(Temp.szUnionID), TEXT("%s %d人玩法\n桌子号%d 底分%d"), szBuffer, pClubRecord->dwUserCount, pClubRecord->dwTableID, pClubRecord->DiFen);
- break;
- }
- case 14:
- case 15:
- case 16:
- {
- TCHAR szBuffer[32] = _T("花牌");
- _sntprintf(Temp.szUnionID, CountArray(Temp.szUnionID), TEXT("%s %d人玩法\n桌子号%d 底分%d"), szBuffer, pClubRecord->dwUserCount, pClubRecord->dwTableID, pClubRecord->DiFen);
- break;
- }
- default:
- break;
- }
- //CMD_GR_Info bb; //人物信息
- //CDM_GR_XIANL_Info PlayerInfo[4] = { 0 };
- //for (BYTE i = 0; i < pClubRecord->dwUserCount; i++)
- //{
- // PlayerInfo[i].userID = pClubRecord->Player[i].userID;
- // CopyMemory(&PlayerInfo[i].szName, pClubRecord->Player[i].szName, sizeof(PlayerInfo[i].szName));
- // CopyMemory(&PlayerInfo[i].szImgHead, pClubRecord->Player[i].szImgHead, sizeof(PlayerInfo[i].szImgHead));
- // PlayerInfo[i].gScore = pClubRecord->Player[i].gScore;
- //}
- CopyMemory(Temp.szBuffer, pClubRecord, wDataSize);//战绩信息
- DWORD dwSocketID = INVALID_CHAIR;
- CHttpClient::AddLog(dwSocketID, Temp);
- return true;
- }
-
- //自动创建房间,发送请求到数据库进行创建
- bool CAttemperEngineSink::OnAutoCreateRoomToDB(DWORD dwClubID, DWORD dwUserID, WORD wWanFa)
- {
- DBR_GR_ClubAction2 ClubAction;
- ZeroMemory(&ClubAction, sizeof(ClubAction));
- ClubAction.dwClubID = dwClubID;
- ClubAction.dwUserID = dwUserID;
- ClubAction.wWanFa = wWanFa;
- //ClubAction.wFengDing = wFengDing;
- //自动创建1个房间
- return m_pIRecordDataBaseEngine->PostDataBaseRequest(DBR_GR_CLUB_GET, 0, &ClubAction, sizeof(DBR_GR_ClubAction2));
-
- }
-
-
- bool CAttemperEngineSink::OnWlShuffleGameHandle(VOID * pData, WORD wDataSize, DWORD dwSocketID)
- {
- //ASSERT(wDataSize == sizeof(BYTE));
- //if (wDataSize != sizeof(BYTE))
- //{
- // return false;
- //}
-
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- DWORD dUserID = pIServerUserItem->GetUserID();
-
- m_pIKernelDataBaseEngine->PostDataBaseRequest(SUB_GP_WENLIN_SHUFFLE, dwSocketID, &dUserID, sizeof(DWORD));
- return true;
- }
- //洗牌动画 获取砖石数据应答
- bool CAttemperEngineSink::OnWlShuffleGameHandleACK(DWORD dwContextID, VOID * pData, WORD wDataSize)
- {
- ASSERT(sizeof(USER_SHUFFLE_ZUANSHI) == wDataSize);
-
- //获取用户
- WORD wBindIndex = LOWORD(dwContextID);
- IServerUserItem * pIServerUserItem = GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
- if (pIServerUserItem->GetUserStatus() == US_PLAYING) return true;
- USER_SHUFFLE_ZUANSHI * pInfo = (USER_SHUFFLE_ZUANSHI*)pData;
- m_wShuffleZuan = pInfo->dwNeedZuanshi;//所需钻石
- //获取当前玩家钻石数
- pInfo->dwUserZuanShi = pIServerUserItem->GetUserInfo()->dwBean;
-
- UserInfo::PB_CS_S_USER_SHUFFLE_ZUANSHI Zuanshi;
- Zuanshi.set_dwuserzuanshi(pInfo->dwUserZuanShi);
- Zuanshi.set_dwneedzuanshi(pInfo->dwNeedZuanshi);
- //发送数据
- std::string pbdata = Zuanshi.SerializePartialAsString();
-
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GP_WENLIN_SHUFFLE_ACK, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
- //扣钻 更新钻石
- bool CAttemperEngineSink::OnWlShuffleGameDeductHandle(VOID * pData, WORD wDataSize)
- {
- ASSERT(sizeof(DBR_GR_WLDeductInfo) == wDataSize);
- DBR_GR_WLDeductInfo * pInfo = (DBR_GR_WLDeductInfo*)pData;
- IServerUserItem * pIServerUserItem = SearchUserItem(pInfo->dwUserID);
- if (NULL == pIServerUserItem) return false;
- if (pIServerUserItem->GetUserInfo()->dwBean >= pInfo->dwConsumeCurrency)
- {
- pIServerUserItem->GetUserInfo()->dwBean = pInfo->dwConsumeCurrency;
- }
- else
- {
- pIServerUserItem->GetUserInfo()->dwBean = 0;
- }
- //变量定义
- CMD_GR_UserBean UserBeans;
- ZeroMemory(&UserBeans, sizeof(UserBeans));
-
- //构造变量
- UserBeans.dwCurrBeans = pIServerUserItem->GetUserInfo()->dwBean;
-
- UserInfo::PB_CS_S_UserBean Bean;
- Bean.set_dwcurrbeans(UserBeans.dwCurrBeans);
- //发送数据
- std::string pbdata = Bean.SerializePartialAsString();
- SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_USER_BEAN, (void*)pbdata.c_str(), pbdata.length());
- return true;
- }
|