Nodejs equivalent of IPC Socket implemention pn Python

0

Hi, I have the below code to use the IPC socket on any device registered to Greengrass.

But I could find a nice example to do it in nodejs. Is there a way to do it? I could not find where to set SVCUID parameter as in python version. My current non-working nodejs version is as follows:

Nodejs Version:

import { greengrass, iot, io, mqtt } from 'aws-iot-device-sdk-v2';
...
  const hostname =
    process.env.AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT;

  const clientBootstrap = new io.ClientBootstrap();
  const configBuilder =
    iot.AwsIotMqttConnectionConfigBuilder.new_websocket_builder()
      .with_clean_session(false)
      .with_socket_options(
        new io.SocketOptions(io.SocketType.STREAM, io.SocketDomain.LOCAL, 3000)
      );

  const config = configBuilder.build();
  config.host_name = hostname;
  config.port = 8033;

  const client = new mqtt.MqttClient(clientBootstrap);
  const connection = client.new_connection(config);

Python version:

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

import os

from awscrt.io import (
    ClientBootstrap,
    DefaultHostResolver,
    EventLoopGroup,
    SocketDomain,
    SocketOptions,
)
from awsiot.eventstreamrpc import Connection, LifecycleHandler, MessageAmendment

TIMEOUT = 10

class IPCUtils:
    def connect(self):
        elg = EventLoopGroup()
        resolver = DefaultHostResolver(elg)
        bootstrap = ClientBootstrap(elg, resolver)
        socket_options = SocketOptions()
        socket_options.domain = SocketDomain.Local
        amender = MessageAmendment.create_static_authtoken_amender(os.getenv("SVCUID"))
        hostname = os.getenv("AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT")
        connection = Connection(
            host_name=hostname,
            port=8033,
            bootstrap=bootstrap,
            socket_options=socket_options,
            connect_message_amender=amender,
        )
        self.lifecycle_handler = LifecycleHandler()
        connect_future = connection.connect(self.lifecycle_handler)
        connect_future.result(TIMEOUT)
        return connection

Thanks, Sukru

asked a year ago238 views
1 Answer
1
Accepted Answer

Greengrass IPC does not yet support NodeJS, but it is coming this year. You must use a supported SDK language: https://docs.aws.amazon.com/greengrass/v2/developerguide/interprocess-communication.html#ipc-requirements

Cheers,

Michael

AWS
EXPERT
answered a year ago
profile picture
EXPERT
reviewed 2 months ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions