📄 serversession.cpp
字号:
#include "stdafx.h"
#include ".\ServerSession.h"
#include <Global.h>
#include "QueryPoolFactory.h"
#include "ServerSessionManager.h"
#include "DBProxyServer.h"
#include "DBUserManager.h"
#include <FileParser.h>
#include <Protocol_ServerCommon.h>
#include <PacketStruct_ServerCommon.h>
VOID CallBackMessage( char * szMessage );
VOID CallBackQueryResult( DWORD dwIndex, QueryResult * pData );
ServerSession::ServerSession()
: m_dwSessionIndex ( 0 ),
m_wConnectPort ( 0 ),
m_bIsConnector ( FALSE ),
m_bIsTriedToConnect ( FALSE ),
m_dwLastHeartbeatTick ( 0 ),
m_bIsConnected ( FALSE )
{
}
ServerSession::~ServerSession()
{
}
VOID ServerSession::init()
{
SolarDatabaseDesc db_desc;
//db_desc.DataBaseModuleType = DBCInterfaceType_OLEDB;
db_desc.DataBaseModuleType = DBCInterfaceType_ODBC;
db_desc.dwQueryPoolSize = 2000;
db_desc.wQueryProcessorNum = 1;
// 瞒饶 ODBC技泼俊辑 沥焊甫 佬绢啊扁 锭巩俊 鞘夸绝绰 沥焊烙!!
if( 0 != strcmp(g_DBProxyServer.GetFileParser()->GetServerEnv()->pszSQLServerIP, "") )
db_desc.pszDatabaseIP = g_DBProxyServer.GetFileParser()->GetServerEnv()->pszSQLServerIP;
else
db_desc.pszDatabaseIP = "10.11.3.6";
db_desc.pszDatabaseName = "SUNOnline";
db_desc.pszUserName = "SunDevAdmin";
db_desc.pszUserPassword = "Tjs123!@#";
db_desc.fnErrorMessage = CallBackMessage;
db_desc.fnQueryResult = CallBackQueryResult;
if( !m_DB.Initialize( db_desc ) )
{
ASSERT ( !"叼厚 檬扁拳 角菩" );
}
}
VOID ServerSession::DBQuery( Query * pQuery )
{
m_DB.DBQuery( pQuery );
}
VOID ServerSession::release()
{
m_DB.Release();
m_dwSessionIndex = 0;
m_wConnectPort = 0;
m_bIsTriedToConnect = FALSE;
m_dwLastHeartbeatTick = GetTickCount();
m_strConnectIP.clear();
_setIsConnector( FALSE );
}
VOID ServerSession::Update()
{
m_DB.Update();
if( IsConnected() && _isConnector() )
{
// heartbeat 焊郴扁
DWORD dwCurTick = GetTickCount();
if( dwCurTick - m_dwLastHeartbeatTick > _HEARTBEAT_DELAY_BETWEEN_SERVER )
{
m_dwLastHeartbeatTick = dwCurTick;
MSG_HEARTBEAT msg;
msg.m_byCategory = 0;
msg.m_byProtocol = SERVERCOMMON_HEARTBEAT;
Send( (BYTE*)&msg, sizeof(MSG_HEARTBEAT) );
}
}
}
VOID ServerSession::OnConnect( BOOL bSuccess, DWORD dwNetworkIndex )
{
if( bSuccess )
{
_setConnected( TRUE );
_setIsConnector( TRUE );
SetSessionIndex( dwNetworkIndex );
ServerSessionManager::Instance()->AddServer( this );
SendServerType();
DISPMSG( "[OnConnect] 辑滚 立加 己傍 (%s) \n", GetServerType2String(GetServerType()) );
}
else
{
m_bIsTriedToConnect = FALSE;
TryToConnect();
}
}
VOID ServerSession::OnAccept( DWORD dwNetworkIndex )
{
_setConnected( TRUE );
_setIsConnector( FALSE );
SetSessionIndex( dwNetworkIndex );
ServerSessionManager::Instance()->AddServer( this );
DISPMSG( "[OnAccept]辑滚 立加 己傍(%s) \n", GetServerType2String(GetServerType()) );
}
VOID ServerSession::OnDisconnect()
{
_setConnected( FALSE );
ServerSessionManager::Instance()->RemoveServer( GetSessionIndex() );
if( _isConnector() )
{
m_bIsTriedToConnect = FALSE;
TryToConnect();
}
DISPMSG( "[OnDisconnect]辑滚 楷搬 秦力 (%s) \n", GetServerType2String(GetServerType()) );
}
VOID ServerSession::SendServerType()
{
MSG_SERVER_TYPE msg;
msg.m_byCategory = 0;
msg.m_byProtocol = 0;
#ifdef _USING_ACCOUNT_DBPROXY_SERVER
msg.m_byServerType = ACCOUNT_DBPROXY;
#else
msg.m_byServerType = GAME_DBPROXY;
#endif
Send( (BYTE*)&msg, sizeof(MSG_SERVER_TYPE) );
}
VOID ServerSession::SetAddr( char *pszIP, WORD wPort )
{
m_strConnectIP = pszIP;
m_wConnectPort = wPort;
}
VOID ServerSession::TryToConnect()
{
if( m_strConnectIP.empty() )
{
DISPMSG( "[TryToConnect] can't try to connect because address is empty.\n" );
return;
}
if( m_bIsTriedToConnect )
return;
m_bIsTriedToConnect = TRUE;
g_DBProxyServer.ConnectToServer( this, (char*)m_strConnectIP.c_str(), m_wConnectPort );
}
BOOL ServerSession::SendPacket( MSG_BASE * pMsg, WORD wSize )
{
return NetworkObject::Send( (BYTE*)pMsg, wSize );
}
VOID CallBackMessage( char * szMessage )
{
SUNLOG( eCRITICAL_LOG, "[DBMessage]:%s", szMessage );
}
VOID CallBackQueryResult( DWORD dwIndex, QueryResult * pData )
{
BYTE byPacketCategory = (BYTE)LOWORD( dwIndex );
BYTE byPacketType = (BYTE)HIWORD( dwIndex );
((ServerSession *)pData->GetVoidObject())->DBResult( byPacketCategory, byPacketType, pData );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -