blob: 32a752feea1a6b0cda1533c0a1fcf236291a2255 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __ASYNCCALLBACKWRAP_H__
#define __ASYNCCALLBACKWRAP_H__
#include "AsyncArg.h"
#include "AsyncCallback.h"
#include "MQMessage.h"
#include "RemotingCommand.h"
#include "UtilAll.h"
namespace rocketmq {
class ResponseFuture;
class MQClientAPIImpl;
// class DefaultMQProducer;
//<!***************************************************************************
enum asyncCallBackType { asyncCallbackWrap = 0, sendCallbackWrap = 1, pullCallbackWrap = 2 };
struct AsyncCallbackWrap {
public:
AsyncCallbackWrap(AsyncCallback* pAsyncCallback, MQClientAPIImpl* pclientAPI);
virtual ~AsyncCallbackWrap();
virtual void operationComplete(ResponseFuture* pResponseFuture, bool bProducePullRequest) = 0;
virtual void onException() = 0;
virtual asyncCallBackType getCallbackType() = 0;
protected:
AsyncCallback* m_pAsyncCallBack;
MQClientAPIImpl* m_pClientAPI;
};
//<!************************************************************************
class SendCallbackWrap : public AsyncCallbackWrap {
public:
SendCallbackWrap(const string& brokerName,
const MQMessage& msg,
AsyncCallback* pAsyncCallback,
MQClientAPIImpl* pClientAPI);
virtual ~SendCallbackWrap(){};
virtual void operationComplete(ResponseFuture* pResponseFuture, bool bProducePullRequest);
virtual void onException();
virtual asyncCallBackType getCallbackType() { return sendCallbackWrap; }
private:
MQMessage m_msg;
string m_brokerName;
};
//<!***************************************************************************
class PullCallbackWrap : public AsyncCallbackWrap {
public:
PullCallbackWrap(AsyncCallback* pAsyncCallback, MQClientAPIImpl* pClientAPI, void* pArg);
virtual ~PullCallbackWrap();
virtual void operationComplete(ResponseFuture* pResponseFuture, bool bProducePullRequest);
virtual void onException();
virtual asyncCallBackType getCallbackType() { return pullCallbackWrap; }
private:
AsyncArg m_pArg;
};
//<!***************************************************************************
} // namespace rocketmq
#endif // __ASYNCCALLBACKWRAP_H__