JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q28530F
  • License ISC

Package Exports

  • trackle-library-nodejs
  • trackle-library-nodejs/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (trackle-library-nodejs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Setup

Prerequisiti

Pacchetti

Per poter utilizzare questo progetto sono necessari alcuni strumenti all'utilizzo della libreria node-addon-api.

Di seguito vengono riportati le principali dipendenze:

  • NodeJS
  • node-gyp
  • gcc
  • python

NB: Fare comunque riferimento alla pagina della libreria: node-addon-api

Aggiungere all'includePath anche la cartella di node per avere a disposizione la libreria <node_api.h> dipendenza della <napi.h> della libreria node-addon-api!

Libreria

Per poter compilare la libreria saranno necessari alcuni strumenti come:

  • gcc
  • g++
  • make

Dopodichè sarà necessario posizionare la libreria di trackle di cui si vuole wrappare il contenuto nel percorso ./lib/src/<libFolder>

# Ad esempio
 ./lib/src/trackle-library-cpp-4/

NB: A questo punto è OBBLIGATORIO impostare la variabile d'ambiente TRACKLE_LIB_FOLDER_NAME, dove va inserito il nome della cartella che contiene la libreria del passo precedente.
Ad esempio nel mio caso

export TRACKLE_LIB_FOLDER_NAME=trackle-library-cpp-4

IncludePath

Aggiungere all'includePath di compilazione del proprio ide tutte le cartelle che si vogliono utilizzare per le varie compilazioni, ad esempio io ho messo queste:

- /home/scimam/.nvm/versions/node/v18.13.0/include/node = Nodejs
- ${workspaceFolder}/** = includo tutte le sottocarelle del mio workspace
- ${workspaceFolder}/node_modules/node-addon-api = cartella di node-addon-api per l'utilizzo della libreria <napi.h>
- ${workspaceFolder}/lib/src/trackle-library-cpp-4/include = cartella con gli include necessari per la build della libreria trackle

Utilizzo

Build Libreria

Per prima cosa bisogna compilare la libreria e prima di farlo, modificare il file ./build-trackle-lib.sh ed inserire correttamente le variabili nella sezione #Set variables.

Dopodichè lanciare il comando

npm run build:lib

A questo punto se tutto è andato correttamente l'artifact potremo trovarlo in /dist/app/lib/trackle_library.so.

Build Wrapper

Il codice del wrapper si trova in ./lib/src/wrapper/ e contiene un proxy per l'interfacciamento delle funzionalità tra nodejs e c++.
Per la sua compilazione sarà necessario lanciare il comando:

npm run build:wrapper

così facendo verrà generato un file trackleWrapper.node che finirà nella cartella di destinazione standard ./dist/lib.

NB: cartelle di <source> e di <destination> sono modificabili nel file ./binding.gyp.

Progetto Node

Ora si è liberi di crearsi il proprio progetto node semplicemente importando il proxy (e/o gli enum che possono servire), dopodichè sarà sufficiente passare all'oggetto TrackleAuth il nome del device con la relativa cartella in cui è contenuto il file ".der" della chiave privata associata a quel device.

Di seguito un codice di esempio:

import trackle, { Log_Level, ... } from "./proxy/trackleWrapper";
import TrackleAuth from "./entities/trackleAuth";

const CERTIFICATE_DIR_PATH = "/home/scimam/Downloads/";
const auth = new TrackleAuth("10af10750a1783413cbcbddd", CERTIFICATE_DIR_PATH);

// Inizio set metodi wrappati
trackle.setDeviceId(auth.getDeviceId(trackle.getMaxDeviceIdLength()));
trackle.setKeys(auth.getDeviceKey(trackle.getMaxDevicePrivateKeyLength()));
...

Nel caso si voglia utilizzare la connessione udp di default in c++ della libreria, basterà dichiarare i metodi che gestiscono la connessione senza parametri:

trackle.setConnectCallback();
trackle.setDisconnectCallback();
trackle.setSendCallback();
trackle.setReceiveCallback();

Build completo

E' possibile anche lanciare in un unico comando la compilazione di tutto per creare una dist in automatico.

npm run build:all

il quale racchiude:

npm run build:lib
npm run build:wrapper
npm run build:ts

Esempio

Per lanciare il programma di esempio bisogna per prima cosa buildare l'intero progetto (lib, wrapper, ts), modificare il path e il nome del deviceId di cui si vuole fare un test in ${workspaceFolder}/src/test/example/example.test.ts:

const relativeKeyDirPath = "relative/path/to/key";
const DEVICEID = "deviceIdCorretto";

e lanciare

npm run example