virtual int ProcessStart()
	{
		const buzz::XmlElement* Stanza = NextStanza();
		if (Stanza == NULL)
			return STATE_BLOCKED;

		if (SendStanza(Stanza) != buzz::XMPP_RETURN_OK)
			return STATE_ERROR;

		return STATE_START;
	}
	virtual int ProcessStart()
	{
		// see if there are any new stanzas to process
		const buzz::XmlElement* Stanza = NextStanza();
		if (Stanza == NULL)
		{
			return STATE_BLOCKED;
		}
		ProcessMessageStanza(Stanza);
		return STATE_START;
	}
	virtual int ProcessStart()
	{
		// see if there are any new stanzas to process
		const buzz::XmlElement* Stanza = NextStanza();
		if (Stanza == NULL)
		{
			return STATE_BLOCKED;
		}
		if (SendStanza(Stanza) != buzz::XMPP_RETURN_OK)
		{
			return STATE_ERROR;
		}
		return STATE_START;
	}
	virtual int ProcessStart()
	{
		// see if there are any new stanzas to process
		const buzz::XmlElement* Stanza = NextStanza();
		if (Stanza == NULL)
		{
			return STATE_BLOCKED;
		}
		
		buzz::Jid From(Stanza->Attr(buzz::QN_FROM));
		HandlePresence(From, Stanza);
		
		return STATE_START;
	}
Esempio n. 5
0
int XmppTaskIq::ProcessResponse() {

  const txmpp::XmlElement* stanza = NextStanza();
  if (stanza == NULL) {
    return STATE_BLOCKED;
  }

  std::string from = "Someone";

  if (stanza->HasAttr(txmpp::QN_FROM))
    from = stanza->Attr(txmpp::QN_FROM);

  std::cout << "Iq: " << from << std::endl;

  return STATE_RESPONSE;
}
Esempio n. 6
0
int XmppTaskMessage::ProcessResponse() {

  const txmpp::XmlElement* stanza = NextStanza();
  if (stanza == NULL) {
    return STATE_BLOCKED;
  }

  std::string from = "Someone";
  std::string text = "something too quiet to hear.";

  if (stanza->HasAttr(txmpp::QN_FROM))
    from = stanza->Attr(txmpp::QN_FROM);

  const txmpp::XmlElement *body_stanza = stanza->FirstNamed(txmpp::QN_BODY);
  if (body_stanza != NULL) {
    text = body_stanza->BodyText();
  }

  std::cout << "Message: " << from << " says " << text << std::endl;

  // Send response message
  if (from != "Someone") {

    std::stringstream response_text;
    response_text << "The thing you said was " << text.length()
                  << " characters long.";

    txmpp::scoped_ptr<txmpp::XmlElement> message(
        new txmpp::XmlElement(txmpp::QN_MESSAGE));
    message->SetAttr(txmpp::QN_TO, from);

    txmpp::XmlElement *body = new txmpp::XmlElement(txmpp::QN_BODY);
    body->SetBodyText(response_text.str());

    message->AddElement(body);

    SendStanza(message.get());
  }

  return STATE_RESPONSE;
}
int XmppMessageReciveTask::ProcessStart(void)
{
    static buzz::StaticQName QN_DELAY = { "urn:xmpp:delay", "delay" };

    // 获取下一个stanza
    const auto stanza = NextStanza();
    if (stanza == nullptr)
    {
        return STATE_BLOCKED;
    }

    // 获取消息体
    const auto body = stanza->FirstNamed(buzz::QN_BODY);
    if (body == nullptr)
    {
        return STATE_BLOCKED;
    }

    XmppMessageInfo message;

    // 消息id
    message.SetUid(Utf8ToWStr(stanza->Attr(buzz::QN_ID)));
    // 消息类型
    message.SetType(Utf8ToWStr(stanza->Attr(buzz::QN_TYPE)));

    // 获取发送人
    std::wstring from(Utf8ToWStr(stanza->Attr(buzz::QN_FROM)));
    message.SetFrom(from);
    message.SetFromResource(from);

    // 获取接收人
    message.SetTo(Utf8ToWStr(stanza->Attr(buzz::QN_TO)));
    message.SetToResource(Utf8ToWStr(stanza->Attr(buzz::QN_TO)));

    // 获取消息
    message.SetContent(conv.from_bytes(body->BodyText()));

    // 获取时间
    const auto delay = stanza->FirstNamed(QN_DELAY);
    if (delay != nullptr)
    {
        message.SetTime(Utf8ToWStr(delay->Attr(buzz::kQnStamp)));
    }

    // 是否离线消息
    message.SetIsOfflineMsg(delay != nullptr);

    // 获取主题
    const auto subject = stanza->FirstNamed(buzz::QN_SUBJECT);
    if (subject != nullptr)
    {
        message.SetSubject(Utf8ToWStr(subject->BodyText()));

        // 主题数据
        if (subject->HasAttr(buzz::QN_VALUE))
        {
            message.SetSubjectValue(Utf8ToWStr(subject->Attr(buzz::QN_VALUE)));
        }
    }

    // 获取扩展数据
    auto extention = stanza->FirstNamed(QN_EXTENTION);
    if (extention != nullptr)
    {
        std::map<std::wstring, std::wstring> mapValue;

        auto elChild = extention->FirstElement();
        while (elChild != nullptr)
        {
            auto name = elChild->Name().LocalPart();
            mapValue.emplace(Utf8ToWStr(name), Utf8ToWStr(elChild->BodyText().c_str()));

            elChild = elChild->NextElement();
        }

        message.SetExtention(mapValue);
    }

    MessageReceived(message);

    return STATE_START;
}