void CG2Node::OnRead() { if( !Network.m_pSection.tryLock(50) ) { emit readyRead(); // it is a queued connection, lets requeue the missed signal return; } //qDebug() << "CG2Node::OnRead"; if( m_nState == nsHandshaking ) { if( peek(bytesAvailable()).indexOf("\r\n\r\n") != -1 ) { if( m_bInitiated ) { ParseOutgoingHandshake(); } else { ParseIncomingHandshake(); } } } else if ( m_nState == nsConnected ) { G2Packet* pPacket = 0; try { while( (pPacket = G2Packet::ReadBuffer(GetInputBuffer())) ) { m_tLastPacketIn = time(0); m_nPacketsIn++; OnPacket(pPacket); pPacket->Release(); } } catch(...) { if( pPacket ) { qDebug() << pPacket->ToHex() << "\n" << pPacket->ToASCII(); pPacket->Release(); } qDebug() << "Packet error - " << m_oAddress.toString().toAscii(); m_nState = nsClosing; emit NodeStateChanged(); deleteLater(); } } Network.m_pSection.unlock(); }
void CChatSessionG2::OnRead() { if( m_nState == csHandshaking ) { if(Peek(bytesAvailable()).indexOf("\r\n\r\n") != -1) { if(m_bInitiated) { ParseOutgoingHandshake(); } else { //ParseIncomingHandshake(); } } } else if( m_nState == csConnected || m_nState == csActive ) { G2Packet* pPacket = 0; try { while((pPacket = G2Packet::ReadBuffer(GetInputBuffer()))) { OnPacket(pPacket); pPacket->Release(); } } catch(...) { if(pPacket) { pPacket->Release(); } emit systemMessage("Received corrupted G2 packet, connection lost."); CNetworkConnection::Close(); } m_bReadyReadSent = false; } }