use of com.robo4j.socket.http.SocketException in project robo4j by Robo4J.
the class ChannelUtils method initServerSocketChannel.
public static ServerSocketChannel initServerSocketChannel(ServerContext context) {
try {
final ServerSocketChannel result = ServerSocketChannel.open();
result.bind(new InetSocketAddress(context.getPropertySafe(Integer.class, PROPERTY_SOCKET_PORT)));
result.configureBlocking(false);
return result;
} catch (Exception e) {
SimpleLoggingUtil.error(ChannelUtils.class, "init server socket channel", e);
throw new SocketException("init server socket channel", e);
}
}
use of com.robo4j.socket.http.SocketException 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