use of software.amazon.awssdk.eventstreamrpc.RpcServer in project aws-iot-device-sdk-java-v2 by aws.
the class GreengrassV2ClientTest method before.
@BeforeEach
public void before() throws IOException {
port = randomPort();
try (final EventLoopGroup elGroup = new EventLoopGroup(1);
SocketOptions socketOptions = new SocketOptions()) {
socketOptions.connectTimeoutMs = 3000;
socketOptions.domain = SocketOptions.SocketDomain.IPv4;
socketOptions.type = SocketOptions.SocketType.STREAM;
GreengrassCoreIPCService service = new GreengrassCoreIPCService();
service.setCreateLocalDeploymentHandler((c) -> new GeneratedAbstractCreateLocalDeploymentOperationHandler(c) {
@Override
protected void onStreamClosed() {
}
@Override
public CreateLocalDeploymentResponse handleRequest(CreateLocalDeploymentRequest request) {
return new CreateLocalDeploymentResponse().withDeploymentId("deployment");
}
@Override
public void handleStreamEvent(EventStreamJsonMessage streamRequestEvent) {
}
});
service.setSubscribeToTopicHandler((c) -> new GeneratedAbstractSubscribeToTopicOperationHandler(c) {
@Override
protected void onStreamClosed() {
subscriptionClosed.complete(null);
}
@Override
public SubscribeToTopicResponse handleRequest(SubscribeToTopicRequest request) {
new Thread(() -> {
sendStreamEvent(new SubscriptionResponseMessage().withBinaryMessage(new BinaryMessage().withMessage("message".getBytes(StandardCharsets.UTF_8))));
}).start();
return new SubscribeToTopicResponse().withTopicName(request.getTopic());
}
@Override
public void handleStreamEvent(EventStreamJsonMessage streamRequestEvent) {
}
});
service.setAuthenticationHandler((headers, bytes) -> {
authenticationRequest = new Gson().fromJson(new String(bytes), GreengrassEventStreamConnectMessage.class);
return () -> "connected";
});
service.setAuthorizationHandler(authenticationData -> Authorization.ACCEPT);
ipcServer = new RpcServer(elGroup, socketOptions, null, "127.0.0.1", port, service);
ipcServer.runServer();
client = GreengrassCoreIPCClientV2.builder().withPort(port).withSocketPath("127.0.0.1").withSocketDomain(SocketOptions.SocketDomain.IPv4).withAuthToken("myAuthToken").build();
}
}
use of software.amazon.awssdk.eventstreamrpc.RpcServer in project aws-iot-device-sdk-java-v2 by aws.
the class EchoTestServiceRunner method runService.
public void runService() {
try (SocketOptions socketOptions = new SocketOptions()) {
socketOptions.connectTimeoutMs = 3000;
socketOptions.domain = domain;
socketOptions.type = SocketOptions.SocketType.STREAM;
final EchoTestRPCService service = new EchoTestRPCService();
// wiring of operation handlers
service.setEchoMessageHandler(EchoMessageHandler::new);
service.setEchoStreamMessagesHandler(EchoStreamMessagesHandler::new);
service.setCauseServiceErrorHandler(CauseServiceErrorHandler::new);
service.setCauseStreamServiceToErrorHandler(CauseStreamServiceToError::new);
service.setGetAllCustomersHandler(GetAllCustomersHandler::new);
service.setGetAllProductsHandler(GetAllProductsHandler::new);
service.setAuthenticationHandler(TestAuthNZHandlers.getAuthNHandler());
service.setAuthorizationHandler(TestAuthNZHandlers.getAuthZHandler());
rpcServer = new RpcServer(elGroup, socketOptions, null, hostname, port, service);
rpcServer.runServer();
}
}
use of software.amazon.awssdk.eventstreamrpc.RpcServer in project aws-greengrass-nucleus by aws-greengrass.
the class IPCEventStreamService method startup.
@SuppressWarnings({ "PMD.AvoidCatchingGenericException", "PMD.ExceptionAsFlowControl" })
@Override
public void startup() {
Path rootPath = kernel.getNucleusPaths().rootPath();
try {
greengrassCoreIPCService.getAllOperations().forEach(operation -> greengrassCoreIPCService.setOperationHandler(operation, (context) -> new DefaultOperationHandler(GreengrassCoreIPCServiceModel.getInstance().getOperationModelContext(operation), context)));
greengrassCoreIPCService.setAuthenticationHandler((List<Header> headers, byte[] bytes) -> ipcAuthenticationHandler(bytes));
greengrassCoreIPCService.setAuthorizationHandler(this::ipcAuthorizationHandler);
socketOptions = new SocketOptions();
socketOptions.connectTimeoutMs = 3000;
socketOptions.domain = SocketOptions.SocketDomain.LOCAL;
socketOptions.type = SocketOptions.SocketType.STREAM;
eventLoopGroup = new EventLoopGroup(1);
Topic kernelUri = config.getRoot().lookup(SETENV_CONFIG_NAMESPACE, NUCLEUS_DOMAIN_SOCKET_FILEPATH);
kernelUri.withValue(Platform.getInstance().prepareIpcFilepath(rootPath));
Topic kernelRelativeUri = config.getRoot().lookup(SETENV_CONFIG_NAMESPACE, NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT);
kernelRelativeUri.withValue(Platform.getInstance().prepareIpcFilepathForComponent(rootPath));
// For domain sockets:
// 1. Port number is ignored. RpcServer does not accept a null value so we are using a default value.
// 2. The hostname parameter expects the socket filepath
rpcServer = new RpcServer(eventLoopGroup, socketOptions, null, Platform.getInstance().prepareIpcFilepathForRpcServer(rootPath), DEFAULT_PORT_NUMBER, greengrassCoreIPCService);
rpcServer.runServer();
} catch (RuntimeException e) {
// Make sure to cleanup anything we created since we don't know where exactly we failed
close();
throw e;
}
logger.debug("Set IPC permissions");
Platform.getInstance().setIpcFilePermissions(rootPath);
}
Aggregations