use of com.robo4j.socket.http.units.PathHttpMethod in project robo4j by Robo4J.
the class ReadDatagramSelectionKeyHandler method handle.
// TODO: 2/25/18 (miro) -> Datagram type -> not only string is possible
@Override
public SelectionKey handle() {
final DatagramChannel channel = (DatagramChannel) key.channel();
try {
ByteBuffer buffer = serverContext.getPropertySafe(ByteBuffer.class, PROPERTY_BYTE_BUFFER);
buffer.clear();
channel.receive(buffer);
buffer.flip();
String message = ChannelBufferUtils.byteBufferToString(buffer);
final String[] headerAndBody = message.split(HTTP_HEADER_BODY_DELIMITER);
final String firstLine = RoboHttpUtils.correctLine(headerAndBody[0]);
final String[] tokens = firstLine.split(HttpConstant.HTTP_EMPTY_SEP);
final String body = headerAndBody[1];
final ServerPathConfig serverPathConfig = serverContext.getPathConfig(new PathHttpMethod(tokens[1], null));
final RoboReference<Object> roboReference = serverPathConfig.getRoboUnit();
final SocketDecoder<Object, Object> decoder = codecRegistry.getDecoder(roboReference.getMessageType());
final Object decodedMessage = decoder.decode(body);
serverPathConfig.getRoboUnit().sendMessage(decodedMessage);
final DatagramResponseProcess responseProcess = new DatagramResponseProcess(tokens[1], roboReference, decodedMessage);
outBuffers.put(key, responseProcess);
return key;
} catch (IOException e) {
throw new SocketException("hanlde", e);
}
}
use of com.robo4j.socket.http.units.PathHttpMethod in project robo4j by Robo4J.
the class WriteSelectionKeyHandler method sendMessageToTargetRoboReference.
private void sendMessageToTargetRoboReference(HttpResponseProcess process) {
final ServerPathConfig pathConfig = serverContext.getPathConfig(new PathHttpMethod(process.getPath(), process.getMethod()));
if (pathConfig.getRoboUnit() != null && pathConfig.getRoboUnit().getMessageType().equals(process.getResult().getClass())) {
RoboReference<Object> reference = pathConfig.getRoboUnit();
reference.sendMessage(process.getResult());
} else {
throw new IllegalStateException(String.format("process %s", process));
}
}
use of com.robo4j.socket.http.units.PathHttpMethod in project robo4j by Robo4J.
the class DatagramPathUtils method updateDatagramServerContextPaths.
public static void updateDatagramServerContextPaths(final RoboContext context, final ServerContext serverContext, final Collection<HttpPathMethodDTO> paths) {
final Map<PathHttpMethod, ServerPathConfig> resultPaths = paths.stream().map(e -> {
RoboReference<Object> reference = context.getReference(e.getRoboUnit());
return new ServerPathConfig(toPath(SystemPath.UNITS.getPath(), e.getRoboUnit()), reference, e.getMethod(), e.getCallbacks());
}).collect(Collectors.toMap(e -> new PathHttpMethod(e.getPath(), null), e -> e));
serverContext.addPaths(resultPaths);
}
use of com.robo4j.socket.http.units.PathHttpMethod in project robo4j by Robo4J.
the class HttpPathUtils method updateHttpServerContextPaths.
public static void updateHttpServerContextPaths(final RoboContext context, final ServerContext serverContext, final Collection<HttpPathMethodDTO> paths) {
final Map<PathHttpMethod, ServerPathConfig> resultPaths = paths.stream().map(e -> {
RoboReference<Object> reference = context.getReference(e.getRoboUnit());
return HttpPathUtils.toHttpPathConfig(e, reference);
}).collect(Collectors.toMap(e -> new PathHttpMethod(e.getPath(), e.getMethod()), e -> e));
resultPaths.put(new PathHttpMethod(Utf8Constant.UTF8_SOLIDUS, HttpMethod.GET), new ServerPathConfig(Utf8Constant.UTF8_SOLIDUS, null, HttpMethod.GET));
serverContext.addPaths(resultPaths);
}
Aggregations