use of com.robo4j.socket.http.request.HttpResponseProcess in project robo4j by Robo4J.
the class ReadSelectionKeyHandler method handle.
@Override
public SelectionKey handle() {
SocketChannel channel = (SocketChannel) key.channel();
lock.lock();
try {
final HttpDecoratedRequest decoratedRequest = channelRequestBuffer.getHttpDecoratedRequestByChannel(channel);
final RoboRequestFactory factory = new RoboRequestFactory(codecRegistry);
final RoboRequestCallable callable = new RoboRequestCallable(context, serverContext, decoratedRequest, factory);
final Future<HttpResponseProcess> futureResult = context.getScheduler().submit(callable);
final HttpResponseProcess result = extractRoboResponseProcess(futureResult);
outBuffers.put(key, result);
registerSelectionKey(channel);
return key;
} catch (IOException e) {
throw new SocketException(e.getMessage());
} finally {
lock.unlock();
}
}
use of com.robo4j.socket.http.request.HttpResponseProcess in project robo4j by Robo4J.
the class WriteSelectionKeyHandler method handle.
@Override
public SelectionKey handle() {
SocketChannel channel = (SocketChannel) key.channel();
final HttpResponseProcess responseProcess = outBuffers.get(key);
ByteBuffer buffer;
if (responseProcess.getMethod() != null) {
switch(responseProcess.getMethod()) {
case GET:
String getResponse;
if (responseProcess.getResult() != null && responseProcess.getCode().equals(StatusCode.OK)) {
// FIXME: 2/18/18 (miro) put abstraction
String responseMessage = responseProcess.getResult().toString();
HttpDenominator denominator = new HttpResponseDenominator(responseProcess.getCode(), HttpVersion.HTTP_1_1);
getResponse = HttpMessageBuilder.Build().setDenominator(denominator).addHeaderElement(HttpHeaderFieldNames.ROBO_UNIT_UID, context.getId()).addHeaderElement(HttpHeaderFieldNames.CONTENT_LENGTH, String.valueOf(responseMessage.length())).build(responseMessage);
} else {
HttpDenominator denominator = new HttpResponseDenominator(responseProcess.getCode(), HttpVersion.HTTP_1_1);
getResponse = HttpMessageBuilder.Build().setDenominator(denominator).build();
}
buffer = ChannelBufferUtils.getByteBufferByString(getResponse);
ChannelUtils.handleWriteChannelAndBuffer("get write", channel, buffer);
break;
case POST:
HttpDenominator denominator = new HttpResponseDenominator(responseProcess.getCode(), HttpVersion.HTTP_1_1);
String postResponse = HttpMessageBuilder.Build().setDenominator(denominator).build();
if (responseProcess.getResult() != null && responseProcess.getCode().equals(StatusCode.ACCEPTED)) {
buffer = ChannelBufferUtils.getByteBufferByString(postResponse);
ChannelUtils.handleWriteChannelAndBuffer("post write", channel, buffer);
sendMessageToTargetRoboReference(responseProcess);
} else {
buffer = ChannelBufferUtils.getByteBufferByString(postResponse);
ChannelUtils.handleWriteChannelAndBuffer("post write", channel, buffer);
}
default:
break;
}
} else {
HttpDenominator denominator = new HttpResponseDenominator(StatusCode.BAD_REQUEST, HttpVersion.HTTP_1_1);
String badResponse = HttpMessageBuilder.Build().setDenominator(denominator).build();
buffer = ChannelBufferUtils.getByteBufferByString(badResponse);
try {
ChannelUtils.writeBuffer(channel, buffer);
} catch (Exception e) {
throw new SocketException("post write", e);
}
buffer.clear();
}
try {
key.cancel();
key.channel().close();
} catch (IOException e) {
throw new SocketException(e.getMessage());
}
return key;
}
Aggregations