package com.aincc.seoulopenapi.network;
import com.aincc.lib.network.common.IPacket;
import com.aincc.lib.network.http.HttpTrans;
import com.aincc.lib.util.Logger;
import com.aincc.seoulopenapi.ErrorInfoType;
import com.aincc.seoulopenapi.OpenAPICons;
/**
*
* <h3><b>OpenBase</b></h3></br>
*
* @author aincc@barusoft.com
* @version 1.0.0
* @since 1.0.0
*/
public abstract class OpenBase extends HttpTrans
{
/**
* packet builder
*
* @since 1.0.0
*/
protected PacketBuilder pb = null;
/**
* 에러여부
*/
protected boolean isError = false;
/**
* 에러유형
*/
protected ErrorInfoType errorInfoType = ErrorInfoType.SUCCESS;
/*
* (non-Javadoc)
*
* @see
* com.baru.core.network.BaseTrans#setPacket(com.baru.core.network.IPacket)
*/
@Override
public void setPacket(IPacket packet) throws Exception
{
super.setPacket(packet);
setResponse(packet.toString());
// Logger.d(response);
try
{
parse();
Logger.i(getParam().getRequestKey() + " response parse OK.");
}
catch (Exception e)
{
e.printStackTrace();
parseError();
Logger.e(getParam().getRequestKey() + "response parse Error!");
}
}
/**
* TODO: OpenAPI 오류내용 파싱.
*
* @since 1.0.0
*/
private void parseError()
{
isError = true;
// 처음 나오는 ':' 의 인덱스 가져오기
int last = response.indexOf(":");
if (0 < last)
{
// last 위치 이전까지의 문자열이 코드값.
String code = response.substring(0, last).trim();
if (OpenAPICons.ERROR_TABLE.containsKey(code))
{
errorInfoType = OpenAPICons.ERROR_TABLE.get(code);
return;
}
}
errorInfoType = ErrorInfoType.UNKNOWN;
}
/**
*
* @since 1.0.0
* @return
*/
public boolean isError()
{
return isError;
}
/**
*
* @since 1.0.0
* @return
*/
public ErrorInfoType getErrorInfoType()
{
return errorInfoType;
}
/**
* 서브클래스에서 응답결과 파싱처리를 구현한다.
*
* @since 1.0.0
*/
abstract public void parse() throws Exception;
}