Skip to content

Datahop mobile client

This is a documentation for java based andriod application. The doc for golang of the same library is available here.

Install

In your app level gradle file add the following dependencies

    ...
    dependencies {

        ...

        implementation 'network.datahop.libs:datahop:v0.0.12'
        implementation 'network.datahop.libs:blediscovery:0.0.6'
        implementation 'network.datahop.libs:wifidirect:0.0.3'

        ...
    }

Init client repository

To initialise the repo we need to BLE and Wifi libraries and pass them in the init function

    try {

         ...

        BLEServiceDiscovery bleDiscoveryDriver = BLEServiceDiscovery.getInstance(getApplicationContext());
        BLEAdvertising bleAdvertisingDriver = BLEAdvertising.getInstance(getApplicationContext());

        WifiDirectHotSpot hotspot = WifiDirectHotSpot.getInstance(getApplicationContext());
        WifiLink connection = WifiLink.getInstance(getApplicationContext());

        Datahop.init(
            getApplicationContext().getCacheDir() + "/" + root,
            this,
            bleDiscoveryDriver,
            bleAdvertisingDriver,
            hotspot,
            connection
        );

    } catch (Exception e) {
        e.printStackTrace();
    }

Start client and discovery

We will pass a "shouldBootstrap" boolean with start. This will determine if the client will connect with datahop default bootstrap node.

startDiscovery will take three boolean values in the following order

- "advertising" : To Advertise BLE Scanning
- "scanning" : To Scan BLE advertisements from other devices
- "autoDisconnect" : Auto disconnect from a D2D discovered network
    try {

        ...

        Datahop.start(true);

        Datahop.startDiscovery(true, true, true);

    } catch (Exception e) {
        e.printStackTrace();
    }

Stop client and discovery

   if(Datahop.isNodeOnline()) {
        try {
            Datahop.stopDiscovery();
            Datahop.stop();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Client id and online status

    Log.d("Node Id", Datahop.id());
    Log.d("Node Status onCreate", String.valueOf(Datahop.isNodeOnline()));

ConnectionManager

To be able to get imformed about new peer connection and disconnection our Class should implement ConnectionManager. We will be notified through this class functions about new peer connection and disconnection

    @Override
    public void peerConnected(String s) {
        Log.d("*** Peer Connected ***", s);
    }

    @Override
    public void peerDisconnected(String s) {
        Log.d("*** Peer Disconnected ***", s);
    }

Client Addresses

    try {
        Types.StringSlice addrs = Types.StringSlice.parseFrom(Datahop.addrs());
        Log.d("Addrs : ", addrs.getOutputList().toString());
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        Types.StringSlice ifaceAddrs = Types.StringSlice.parseFrom(Datahop.interfaceAddrs());
        Log.d("IfaceAddrs : ", ifaceAddrs.getOutputList().toString());
    } catch (Exception e) {
        e.printStackTrace();
    }

Client Peerinfo

    try {
        Log.d("peerinfo : ",Datahop.peerInfo());
    } catch (Exception e) {
        e.printStackTrace();
    }

Connected Peers

    try {
        Types.StringSlice peers = Types.StringSlice.parseFrom(Datahop.peers());
        Log.d("Peers : ", peers.getOutputList().toString());
    } catch (Exception e) {
        e.printStackTrace();
    }

Client Matrix

    try {
        String matrix = Datahop.matrix();
        Log.d("matrix : ",matrix);
    } catch (Exception e) {
        e.printStackTrace();
    }

Get all the available tags

    try {
        Types.StringSlice tags = Types.StringSlice.parseFrom(Datahop.getTags());
        Log.d("Tags : ", tags.getOutputList().toString());
    } catch (Exception e) {
        e.printStackTrace();
    }

Get diskusage

    try {
        Log.d("Size : ", String.valueOf(Datahop.diskUsage()));
    } catch (Exception e) {
        e.printStackTrace();
    }

Add content

add takes in the following params

- "tag": a unique string to tag the given content in the network
- "content": the content to add in the network in byte array form
- "passphrase": to encrypt the content. pass "" (blank string) to add content without encryption
    try {
        String tag = "my tag";
        byte[] content = tag.getBytes();

        // to add content without encryption
        Datahop.add(tag, content, "")

        // to add content with encryption
        Datahop.add(tag, content, "verySecretPassphrase")
    } catch (Exception e) {
        e.printStackTrace();
    }

Get content

get takes in the following params

- "tag": a unique string tag for getting content from the network
- "passphrase": to decrypt the content. pass "" (blank string) to get content without encryption
    try {
        String tag = "my tag";

        // to get content without encryption
        byte[] value = Datahop.get(tag, "")

        // to get content with encryption
        byte[] value = Datahop.add(tag, "verySecretPassphrase")

        // Do something with value
    } catch (Exception e) {
        e.printStackTrace();
    }

// TODO:

Get Tags

State

Matrix

DownloadsInProgress