/**
*
*/
package com.photoshare.pipeline;
import com.photoshare.common.AbstractRequestListener;
import com.photoshare.common.RequestParam;
import com.photoshare.exception.NetworkError;
import com.photoshare.exception.NetworkException;
import com.photoshare.msg.MessageList;
import com.photoshare.msg.RequestMsg;
import com.photoshare.utils.Utils;
import com.photoshare.utils.async.AsyncUtils;
/**
* @author Aron
*
*/
public class PipelineMsgHandler {
public PipelineMsgHandler() {
register();
}
private AsyncUtils async = AsyncUtils.getInstance();
private OutboundPipeline pipeline = OutboundPipeline.getInstance();
private MessageList messageList = MessageList.getInstance();
public static final int MAX_TRIAL = 3;
private OutboundPipeline.Listener msgListener = new OutboundPipeline.Listener() {
public void onFreshMsgBoard(RequestMsg<? extends RequestParam> request,
AbstractRequestListener<String> listener) {
asyncPublishRequest(request, listener);
}
};
private void asyncPublishRequest(
final RequestMsg<? extends RequestParam> request,
final AbstractRequestListener<String> listener) {
Utils.logger("asyncPublishRequest");
async = AsyncUtils.getInstance();
if (request == null)
return;
final AbstractRequestListener<String> httpListener = new AbstractRequestListener<String>() {
@Override
public void onNetworkError(NetworkError networkError) {
// TODO Auto-generated method stub
if (listener != null) {
listener.onNetworkError(networkError);
}
}
@Override
public void onFault(Throwable fault) {
// TODO Auto-generated method stub
if (listener != null) {
listener.onFault(fault);
}
if (request.getTrial() <= MAX_TRIAL) {
request.tryAgain();
pipeline.notifySendToTargetHandler(request, listener);
} else {
messageList.add(request);
pipeline.moveToLast();
}
}
@Override
public void onComplete(String bean) {
// TODO Auto-generated method stub
request.setSend(true);
pipeline.scanAndDiscard();
if (listener != null) {
listener.onComplete(bean);
}
}
};
try {
if (async != null) {
Utils.logger("async not null-----------------");
}
if (request.getType() != null) {
Utils.logger(request.getType().getAction() + " not null-----------------");
}
if (request.getAMsg() != null) {
Utils.logger("amsg not null-----------------");
}
async.request(request.getType().getAction(), request.getAMsg()
.getParams(), httpListener);
} catch (NetworkException e) {
if (listener != null) {
listener.onNetworkError(new NetworkError(e.getMessage()));
}
}
}
public void addMsg(RequestMsg<? extends RequestParam> AMsg,
final AbstractRequestListener<String> listener) {
Utils.logger(AMsg.toString());
pipeline.add(AMsg, listener);
}
private void register() {
pipeline.registerListener(msgListener);
}
}