waku-org/go-waku

View on GitHub
library/mobile/api.go

Summary

Maintainability
A
0 mins
Test Coverage
// Package gowaku implements gomobile bindings for go-waku. Contains a set of functions that
// are exported when go-waku is exported as libraries for mobile devices
package gowaku

import (
    "github.com/waku-org/go-waku/library"
    "github.com/waku-org/go-waku/waku/v2/protocol"
)

// NewNode initializes a waku node.
// Receives a JSON string containing the configuration, and use default values for those config items not specified
// Returns an instance id
func NewNode(instanceID uint, configJSON string) string {
    instance := library.Init()
    err := library.NewNode(instance, configJSON)
    if err != nil {
        _ = library.Free(instance)
    }
    return prepareJSONResponse(instance.ID, err)
}

// Start starts the waku node
func Start(instanceID uint) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    err = library.Start(instance)
    return makeJSONResponse(err)
}

// Stop stops a waku node
func Stop(instanceID uint) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    err = library.Stop(instance)
    return makeJSONResponse(err)
}

// Release resources allocated to a waku node
func Free(instanceID uint) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    err = library.Free(instance)
    return makeJSONResponse(err)
}

// IsStarted is used to determine is a node is started or not
func IsStarted(instanceID uint) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    return prepareJSONResponse(library.IsStarted(instance), nil)
}

// PeerID is used to obtain the peer ID of the waku node
func PeerID(instanceID uint) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    peerID, err := library.PeerID(instance)
    return prepareJSONResponse(peerID, err)
}

// ListenAddresses returns the multiaddresses the wakunode is listening to
func ListenAddresses(instanceID uint) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    addresses, err := library.ListenAddresses(instance)
    return prepareJSONResponse(addresses, err)
}

// AddPeer adds a node multiaddress and protocol to the wakunode peerstore
func AddPeer(instanceID uint, address string, protocolID string) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    peerID, err := library.AddPeer(instance, address, protocolID)
    return prepareJSONResponse(peerID, err)
}

// Connect is used to connect to a peer at multiaddress. if ms > 0, cancel the function execution if it takes longer than N milliseconds
func Connect(instanceID uint, address string, ms int) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    err = library.Connect(instance, address, ms)
    return makeJSONResponse(err)
}

// ConnectPeerID is usedd to connect to a known peer by peerID. if ms > 0, cancel the function execution if it takes longer than N milliseconds
func ConnectPeerID(instanceID uint, peerID string, ms int) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    err = library.ConnectPeerID(instance, peerID, ms)
    return makeJSONResponse(err)
}

// Disconnect closes a connection to a known peer by peerID
func Disconnect(instanceID uint, peerID string) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    err = library.Disconnect(instance, peerID)
    return makeJSONResponse(err)
}

// PeerCnt returns the number of connected peers
func PeerCnt(instanceID uint) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    peerCnt, err := library.PeerCnt(instance)
    return prepareJSONResponse(peerCnt, err)
}

// ContentTopic creates a content topic string according to RFC 23
func ContentTopic(applicationName string, applicationVersion string, contentTopicName string, encoding string) string {
    contentTopic, _ := protocol.NewContentTopic(applicationName, applicationVersion, contentTopicName, encoding)
    return contentTopic.String()
}

// DefaultPubsubTopic returns the default pubsub topic used in waku2: /waku/2/default-waku/proto
func DefaultPubsubTopic() string {
    return library.DefaultPubsubTopic()
}

// Peers retrieves the list of peers known by the waku node
func Peers(instanceID uint) string {
    instance, err := library.GetInstance(instanceID)
    if err != nil {
        return makeJSONResponse(err)
    }

    peers, err := library.Peers(instance)
    return prepareJSONResponse(peers, err)
}