📄 sharedserverclient.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : GamePlyaer.cpp // Written By : reiot@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "SharedServerClient.h"#include "Assert.h"#include "PacketFactoryManager.h"#include "PacketValidator.h"#include "GuildManager.h"#include "Guild.h"#include <fstream>//////////////////////////////////////////////////////////////////////////////// 葛电 packet甸俊 措秦辑 profiling茄促. by sigi. 2002.5.6//// 窜, 捞吧 荤侩窍扁 困秦辑绰 // Profile.h俊 MAX_PROFILE_SAMPLES += 300阑 秦拎具 茄促.////////////////////////////////////////////////////////////////////////////////#define __PROFILE_PACKETS__//////////////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////////////SharedServerClient::SharedServerClient (Socket* pSocket) throw (Error): Player(pSocket){ __BEGIN_TRY m_Mutex.setName("SharedServerClient"); __END_CATCH}//////////////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////////////SharedServerClient::~SharedServerClient () throw (Error){ __BEGIN_TRY __END_CATCH}////////////////////////////////////////////////////////////////////////// parse packet and execute handler for the packet////////////////////////////////////////////////////////////////////////void SharedServerClient::processCommand () throw (IOException , Error){ __BEGIN_TRY // 庆歹甫 烙矫历厘且 滚欺 积己 char header[szPacketHeader]; PacketID_t packetID; PacketSize_t packetSize; Packet* pPacket = NULL; try { // 涝仿滚欺俊 甸绢乐绰 肯傈茄 菩哦甸阑 葛炼府 贸府茄促. while (true) { // 涝仿胶飘覆俊辑 菩哦庆歹农扁父怒 佬绢夯促. // 父距 瘤沥茄 农扁父怒 胶飘覆俊辑 佬阑 荐 绝促搁, // Insufficient 抗寇啊 惯积窍绊, 风橇甫 狐廉唱埃促. // NoSuch力芭. by sigi. 2002.5.4 if (!m_pInputStream->peek(&header[0] , szPacketHeader)) { break; } // 菩哦酒捞叼 棺 菩哦农扁甫 舅酒辰促. // 捞锭 菩哦农扁绰 庆歹甫 器窃茄促. memcpy(&packetID , &header[0] , szPacketID); memcpy(&packetSize , &header[szPacketID] , szPacketSize); // 菩哦 酒捞叼啊 捞惑窍搁 橇肺配妮 俊矾肺 埃林茄促. if (packetID >= (int)Packet::PACKET_MAX) { filelog("SharedServerClient.txt", "Packet ID exceed MAX, RECV [%d/%d]" ); throw InvalidProtocolException("too large packet id"); } try { // 菩哦 农扁啊 呈公 农搁 橇肺配妮 俊矾肺 埃林茄促. if (packetSize > g_pPacketFactoryManager->getPacketMaxSize(packetID)) { filelog("SharedServerClient.txt", "Too Larget Packet Size, RECV [%d],PacketSize[%d]" ); throw InvalidProtocolException("too large packet size"); } // 涝仿滚欺郴俊 菩哦农扁父怒狼 单捞鸥啊 甸绢乐绰瘤 犬牢茄促. if (m_pInputStream->length() < szPacketHeader + packetSize) break; // 咯扁鳖瘤 吭促搁 涝仿滚欺俊绰 肯傈茄 菩哦 窍唱 捞惑捞 甸绢乐促绰 舵捞促. // 菩哦蒲配府概聪历肺何磐 菩哦酒捞叼甫 荤侩秦辑 菩哦 胶飘钒贸甫 积己窍搁 等促. // 菩哦酒捞叼啊 肋给瞪 版快绰 菩哦蒲配府概聪历俊辑 贸府茄促. pPacket = g_pPacketFactoryManager->createPacket(packetID); // 捞力 捞 菩哦胶飘钒贸甫 檬扁拳茄促. // 菩哦窍困努贰胶俊 沥狼等 read()啊 virtual 皋目聪硫俊 狼秦辑 龋免登绢 // 磊悼利栏肺 檬扁拳等促. m_pInputStream->readPacket(pPacket); // 捞力 捞 菩哦胶飘钒贸甫 啊瘤绊 菩哦勤甸矾甫 荐青窍搁 等促. // 菩哦酒捞叼啊 肋给瞪 版快绰 菩哦勤甸矾概聪历俊辑 贸府茄促. #ifdef __PROFILE_PACKETS__ beginProfileEx( pPacket->getPacketName().c_str() ); pPacket->execute(this); endProfileEx( pPacket->getPacketName().c_str() ); #else pPacket->execute(this); #endif } catch (IgnorePacketException & igpe) { // 菩哦 农扁啊 呈公 农搁 橇肺配妮 俊矾肺 埃林茄促. if (packetSize > g_pPacketFactoryManager->getPacketMaxSize(packetID)) throw InvalidProtocolException("too large packet size"); // 涝仿滚欺郴俊 菩哦农扁父怒狼 单捞鸥啊 甸绢乐绰瘤 犬牢茄促. if (m_pInputStream->length() < szPacketHeader + packetSize) break; // 单捞鸥啊 葛滴 档馒沁栏搁, 弊 农扁父怒 公矫窍绊, // 促弗 菩哦阑 贸府窍档废 茄促.... m_pInputStream->skip(szPacketHeader + packetSize); // 公矫等 菩哦篮, expire 俊 康氢阑 林瘤 臼霸 等促. // 溜 蜡瓤茄 菩哦父捞 漏府瘤 臼霸 秦霖促. // 肚茄 洒胶配府俊档 甸绢啊瘤 臼绰促. } } } catch ( InsufficientDataException& ide ) { } __END_CATCH} ////////////////////////////////////////////////////////////////////////// flush output buffer to socket's send buffer//// flush且 悼救 促弗 静饭靛俊辑 免仿 滚欺俊 sendPacket阑 龋免秦辑绰 救等促.// (捞凡 版快绰 辑滚埃 烹脚栏肺 say啊 朝酒坷绰 巴观俊 绝促.)////////////////////////////////////////////////////////////////////////void SharedServerClient::processOutput () throw (IOException , Error){ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_Mutex) try { Player::processOutput(); } catch (InvalidProtocolException & It) { throw DisconnectException("Pipe 楷搬狼 颇鲍肺 立加阑 楼弗促"); } __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}////////////////////////////////////////////////////////////////////////// send packet to player's output buffer////////////////////////////////////////////////////////////////////////void SharedServerClient::sendPacket (Packet* pPacket) throw (ProtocolException , Error){ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_Mutex) try { Player::sendPacket(pPacket); } catch (InvalidProtocolException & It) { } __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////string SharedServerClient::toString () const throw (Error){ __BEGIN_TRY StringStream msg; ////////////////////////////////////////////////// // enter critical section ////////////////////////////////////////////////// __ENTER_CRITICAL_SECTION(m_Mutex) msg << "SharedServerClient(SocketID:" << m_pSocket->getSOCKET() << ",Host:" << m_pSocket->getHost() << ")" ; ////////////////////////////////////////////////// // leave critical section ////////////////////////////////////////////////// __LEAVE_CRITICAL_SECTION(m_Mutex) return msg.toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -