
#include "ONSFactory.h"
using namespace std;
using namespace ons;

//创建消费消息的实例
//pushConsumer拉取到消息后，会主动调用该实例的consumeMessage 函数
class ONSCLIENT_API MyMsgListener : public MessageOrderListener
{
public:
    MyMsgListener()
    {
    }
    virtual ~MyMsgListener()
    {
    }

    virtual OrderAction consume(Message &message, ConsumeOrderContext &context)
    {
            //根据业务需求，消费消息
        return Success; //CONSUME_SUCCESS;
    }
};


int main(int argc, char* argv[])
{
    //OrderConsumer创建和工作需要的参数，必须输入
    ONSFactoryProperty factoryInfo;
    factoryInfo.setFactoryProperty(ONSFactoryProperty::ConsumerId, "");//在ONS控制台申请的consumerId
    factoryInfo.setFactoryProperty(ONSFactoryProperty::PublishTopics,"" );// 在ONS 控制台申请的msg topic
    factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "");// ONS AccessKey
    factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey,  "");//ONS SecretKey

    // 创建orderConsumer
    OrderConsumer* orderConsumer = ONSFactory::getInstance()->createOrderConsumer(factoryInfo);
    MyMsgListener  msglistener;
    //指定orderConsumer 订阅的消息topic和消息tag
    orderConsumer->subscribe(factoryInfo.getPublishTopics(), "*",&msglistener );

    // 注册消息监听的处理实例，orderConsumer 拉取到消息后，会调用该类的consumeMessage 函数

    //启动orderConsumer
    orderConsumer->start();

    for(volatile int i = 0; i < 1000000000; ++i) {
        //wait
    }

    //销毁orderConsumer, 在应用退出前，必须销毁Consumer 对象，否则会导致内存泄露等问题
    orderConsumer->shutdown();

   return 0;
}
