67 lines
1.5 KiB
C++
67 lines
1.5 KiB
C++
#include "StdAfx.h"
|
|
#include "ShopSession.h"
|
|
#include "SessionList.h"
|
|
|
|
CShopSession::CShopSession(void): WBANetwork::ServerSession(262144, 262144)
|
|
{
|
|
_instance(CSessionList);
|
|
}
|
|
|
|
CShopSession::~CShopSession(void)
|
|
{
|
|
_releaseinstance(CSessionList);
|
|
}
|
|
|
|
void CShopSession::OnAccept()
|
|
{
|
|
BILLING_LOG(WZPUBLIC::LEVEL_INFO, "接收客户端 (%d) (%s)", (int)this, GetIPAddress());
|
|
SetKeepAlive(1, 3 * 60 * 1000, 10 * 1000);
|
|
|
|
_instance(CSessionList)->Add((DWORD_PTR)this);
|
|
BILLING_LOG(WZPUBLIC::LEVEL_INFO, "当前会话 (%d)", _instance(CSessionList)->GetSize());
|
|
}
|
|
|
|
void CShopSession::OnClose(DWORD error)
|
|
{
|
|
BILLING_LOG(WZPUBLIC::LEVEL_INFO, "客户端连接关闭 (%d) (%s)", (int)this, GetIPAddress());
|
|
|
|
_instance(CSessionList)->Remove((DWORD_PTR)this);
|
|
BILLING_LOG(WZPUBLIC::LEVEL_INFO, "当前会话 (%d)", _instance(CSessionList)->GetSize());
|
|
}
|
|
|
|
void CShopSession::OnSend( int size )
|
|
{
|
|
BILLING_LOG(WZPUBLIC::LEVEL_INFO, "数据已发送 (%d)", size);
|
|
}
|
|
|
|
bool CShopSession::SendData(void* buffer, DWORD size)
|
|
{
|
|
WBANetwork::SEND_RET ret;
|
|
|
|
for(int i = 0 ; i < 100 ; i++)
|
|
{
|
|
SendPacket(buffer, size, ret);
|
|
if(WBANetwork::SUCESS == ret) return true;
|
|
else if(WBANetwork::FAILD_NULL == ret || WBANetwork::FAILD_CLOSED == ret)
|
|
{
|
|
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "发送失败 [连接关闭或未创建]");
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
Sleep(10);
|
|
Flush();
|
|
}
|
|
}
|
|
|
|
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "发送失败 [缓冲区溢出]");
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
void CShopSession::OnReceive( PBYTE buffer, int size )
|
|
{
|
|
_instance(CProtocolInvoker)->ProcessCommand((DWORD_PTR)this, buffer);
|
|
}
|