#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); }