Search in sources :

Example 1 with HttpResponseProcess

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();
    }
}
Also used : HttpDecoratedRequest(com.robo4j.socket.http.message.HttpDecoratedRequest) SocketChannel(java.nio.channels.SocketChannel) SocketException(com.robo4j.socket.http.SocketException) RoboRequestCallable(com.robo4j.socket.http.request.RoboRequestCallable) HttpResponseProcess(com.robo4j.socket.http.request.HttpResponseProcess) IOException(java.io.IOException) RoboRequestFactory(com.robo4j.socket.http.request.RoboRequestFactory)

Example 2 with HttpResponseProcess

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;
}
Also used : SocketChannel(java.nio.channels.SocketChannel) HttpDenominator(com.robo4j.socket.http.message.HttpDenominator) SocketException(com.robo4j.socket.http.SocketException) HttpResponseDenominator(com.robo4j.socket.http.message.HttpResponseDenominator) HttpResponseProcess(com.robo4j.socket.http.request.HttpResponseProcess) IOException(java.io.IOException) ByteBuffer(java.nio.ByteBuffer) SocketException(com.robo4j.socket.http.SocketException) IOException(java.io.IOException)

Aggregations

SocketException (com.robo4j.socket.http.SocketException)2 HttpResponseProcess (com.robo4j.socket.http.request.HttpResponseProcess)2 IOException (java.io.IOException)2 SocketChannel (java.nio.channels.SocketChannel)2 HttpDecoratedRequest (com.robo4j.socket.http.message.HttpDecoratedRequest)1 HttpDenominator (com.robo4j.socket.http.message.HttpDenominator)1 HttpResponseDenominator (com.robo4j.socket.http.message.HttpResponseDenominator)1 RoboRequestCallable (com.robo4j.socket.http.request.RoboRequestCallable)1 RoboRequestFactory (com.robo4j.socket.http.request.RoboRequestFactory)1 ByteBuffer (java.nio.ByteBuffer)1