bool RemotePlugin::processMessage( const message & _m ) { lock(); message replyMessage( _m.id ); bool reply = false; switch( _m.id ) { case IdUndefined: return false; case IdInitDone: reply = true; break; case IdSampleRateInformation: reply = true; replyMessage.addInt( engine::getMixer()->processingSampleRate() ); break; case IdBufferSizeInformation: reply = true; replyMessage.addInt( engine::getMixer()->framesPerPeriod() ); break; case IdChangeInputCount: m_inputCount = _m.getInt( 0 ); resizeSharedProcessingMemory(); break; case IdChangeOutputCount: m_outputCount = _m.getInt( 0 ); resizeSharedProcessingMemory(); break; case IdDebugMessage: fprintf( stderr, "RemotePlugin::DebugMessage: %s", _m.getString( 0 ).c_str() ); break; case IdProcessingDone: case IdQuit: default: break; } if( reply ) { sendMessage( replyMessage ); } unlock(); return true; }
MessageHandlerAsyncResult Handler::doHandle(Message &message) { if (!m_enabled || message.property("service", false)) { return makeAsyncResult(Accept, QString()); } Contact *contact = qobject_cast<Contact*>(message.chatUnit()->buddy()); if (!contact || contact->isInList()) { return makeAsyncResult(Accept, QString()); } Info::Ptr info = contact->property(ANTISPAM_PROPERTY).value<Info::Ptr>(); if (info.isNull()) { info = Info::Ptr::create(); contact->setProperty(ANTISPAM_PROPERTY, qVariantFromValue(info)); } if (info->trusted) { return makeAsyncResult(Accept, QString()); } if (!message.isIncoming()) { if (!message.property("autoreply", false)) info->trusted = true; return makeAsyncResult(Accept, QString()); } //check message body foreach (const QString &answer, m_answers) { if (message.text().compare(answer, Qt::CaseInsensitive) == 0) { Message message(m_success); message.setChatUnit(contact); contact->sendMessage(message); info->trusted = true; return makeAsyncResult(Accept, QString()); } } if (info->lastQuestionTime.isValid() && qAbs(info->lastQuestionTime.secsTo(QDateTime::currentDateTime())) < 5 * 60) { return makeAsyncResult(Reject, QString()); } Message replyMessage(m_question); replyMessage.setChatUnit(contact); replyMessage.setProperty("autoreply", true); contact->sendMessage(replyMessage); info->lastQuestionTime = QDateTime::currentDateTime(); QString reason = tr("Message from %1 blocked on suspicion of spam."). arg(contact->title()); return makeAsyncResult(Error, reason); }
/** @brief 连接可读事件,返回-1,close()会被调用 @return -1:处理失败,会调用close(); 0:处理成功 */ int CwxEchoChannelEventHandler::onInput() { int ret = CwxAppHandler4Channel::recvPackage(getHandle(), m_uiRecvHeadLen, m_uiRecvDataLen, m_szHeadBuf, m_header, m_recvMsgData); if (1 != ret) return ret; replyMessage(); if (m_recvMsgData) CwxMsgBlockAlloc::free(m_recvMsgData); this->m_recvMsgData = NULL; this->m_uiRecvHeadLen = 0; this->m_uiRecvDataLen = 0; return 0; }