package org.voovan.http.client;
import org.voovan.http.message.HttpParser;
import org.voovan.http.message.Request;
import org.voovan.http.message.Response;
import org.voovan.http.websocket.WebSocketFrame;
import org.voovan.network.IoFilter;
import org.voovan.network.IoSession;
import org.voovan.network.exception.IoFilterException;
import org.voovan.tools.ByteBufferChannel;
import org.voovan.tools.TByteBuffer;
import org.voovan.tools.TObject;
import org.voovan.tools.log.Logger;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
/**
* HTTP 请求过滤器
* @author helyho
*
* Voovan Framework.
* WebSite: https://github.com/helyho/Voovan
* Licence: Apache v2 License
*/
public class HttpClientFilter implements IoFilter {
@Override
public Object encode(IoSession session,Object object) {
if(object instanceof WebSocketFrame){
return ((WebSocketFrame)object).toByteBuffer();
}
if(object instanceof Request){
Request request = TObject.cast(object);
try {
request.send(session);
} catch (IOException e) {
Logger.error(e);
}
return ByteBuffer.allocateDirect(0);
}
return null;
}
@Override
public Object decode(IoSession session,Object object) throws IoFilterException{
try{
ByteBufferChannel byteBufferChannel = session.getByteBufferChannel();
if("WebSocket".equals(session.getAttribute("Type"))){
return WebSocketFrame.parse((ByteBuffer)object);
}
if(object instanceof ByteBuffer){
session.enabledMessageSpliter(false);
ByteBuffer byteBuffer = TObject.cast(object);
Response response = HttpParser.parseResponse(byteBufferChannel, session.socketContext().getReadTimeout());
session.enabledMessageSpliter(true);
return response;
}
}catch(IOException e){
throw new IoFilterException("HttpClientFilter decode Error. "+e.getMessage(),e);
}
return null;
}
}