Beispiel #1
0
// this에 연결된 모든 클라이언트 커넥션들의 패킷을 process()한다.
BOOL XESocketClientInServer::Process()
{
	XAUTO_LOCK;
	// 연결 끊김을 감지
	ProcessConnect();
	// 패킷처리
	XENetworkConnection::xtError err = XENetworkConnection::xERR_NOERROR;
	static XPacket p(true);		// heap영역을 쓰려고 이렇게 한듯?
	// 접속끊어졌어도 클라에선 남아있는 패킷 다 처리해야함. 
	if( PumpPacket( &p, &err ) ){
		// 암호화된 아카이브면 해독한다.
		if( GetbEncryption() )
			p.DoDecrypto( this );
		DWORD idPacket;
		p >> idPacket;
		ID idKey;	// 패킷 고유 키값
		p >> idKey;
		if( ProcessReservedPacket( idPacket, idKey, p ) == FALSE ) {
			p._SetidPacket( idPacket );
			if( ProcessPacket( idPacket, idKey, p ) == FALSE ) {		// virtual call
				// 패킷 처리에 실패함. 접속 끊어야 함.
				return FALSE;
			}
		}
		p.Clear();
	} else {
		if( err != XENetworkConnection::xERR_NOERROR ) {
///////////////////////////////////////////////////////////////
//
// CDatabaseJobQueueImpl::ProcessCommand
//
//
//
///////////////////////////////////////////////////////////////
void CDatabaseJobQueueImpl::ProcessCommand ( CDbJobData* pJobData )
{
    if ( pJobData->command.type == EJobCommand::CONNECT )
        ProcessConnect ( pJobData );
    else
    if ( pJobData->command.type == EJobCommand::DISCONNECT )
        ProcessDisconnect ( pJobData );
    else
    if ( pJobData->command.type == EJobCommand::QUERY )
        ProcessQuery ( pJobData );
    else
    if ( pJobData->command.type == EJobCommand::FLUSH )
        ProcessFlush ( pJobData );
    else
    if ( pJobData->command.type == EJobCommand::SETLOGLEVEL )
        ProcessSetLogLevel ( pJobData );
}