Android Open Source - dissertation-project Nsd Helper






From Project

Back to project page dissertation-project.

License

The source code is released under:

MIT License

If you think the Android project dissertation-project listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.fyp.resilience.swarm.helper;
//  w w w.j a  va2  s.c  o m
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.jmdns.JmDNS;
import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceInfo;
import javax.jmdns.ServiceListener;

import android.content.Context;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.MulticastLock;
import android.util.Log;

import com.fyp.resilience.ResilienceController;
import com.fyp.resilience.swarm.model.SwarmClient;
import com.fyp.resilience.thread.ResilienceThreadFactory;

public class NsdHelper implements SwarmHelperInterface {

    private static final String TAG = NsdHelper.class.getSimpleName();

    private final ExecutorService mNsdExecutorService = Executors
            .newSingleThreadExecutor(new ResilienceThreadFactory());

    private final ResilienceController mController;

    private static final String MULTICAST_LOCK_NAME = "nsd_lock";
    private static final String SERVICE_TYPE = "_resil._tcp.local.";

    private final WifiManager mWifiManager;
    private MulticastLock mLock;
    private JmDNS mJmDNS;
    private ServiceInfo mServiceInfo;
    private InetAddress mInetAddress;

    private final ServiceListener mServiceListener = new ServiceListener() {

        @SuppressWarnings("deprecation")
        @Override
        public void serviceResolved(final ServiceEvent serviceEvent) {

            /*
             * Very easy to receive junk resolutions. Ensure that we're not
             * talking to ourself!
             */
            if (serviceEvent.getType().equals(SERVICE_TYPE) &&
                    !serviceEvent.getName().equals(mServiceInfo.getName()) &&
                    !mInetAddress.equals(serviceEvent.getInfo().getInetAddress())) {

                mController.addClientToList(new SwarmClient(serviceEvent.getInfo()));
                Log.d(TAG, "A service has been resolved");
            }
        }

        @Override
        public void serviceRemoved(ServiceEvent serviceEvent) {

            final SwarmClient client = new SwarmClient(serviceEvent.getInfo());
            Log.d(TAG, "A service has been removed");
            mController.removeClientFromList(client);
        }

        @Override
        public void serviceAdded(final ServiceEvent serviceEvent) {
            if (serviceEvent.getType().equals(SERVICE_TYPE) &&
                    !serviceEvent.getName().equals(mServiceInfo.getName())) {
                Log.d(TAG, "A service has been added");
                mJmDNS.requestServiceInfo(serviceEvent.getType(), serviceEvent.getName(), 1);
            }
        }
    };

    public NsdHelper(final ResilienceController controller, final WifiManager wifiMgr) {
        mController = controller;
        mWifiManager = wifiMgr;
    }

    @Override
    public void initialise() {

        /*
         * Must be performed on a thread otherwise a
         * NetworkOnMainThreadException will be raised
         */
        mNsdExecutorService.submit(new Runnable() {
            @Override
            public void run() {
                final int intAddr = mWifiManager.getConnectionInfo().getIpAddress();

                if (intAddr == 0) {
                    return;
                }

                /* Elegant way of calculating an IP address from an integer */
                final byte[] byteaddr = new byte[] {
                        (byte) (intAddr & 0xff),
                        (byte) (intAddr >> 8 & 0xff),
                        (byte) (intAddr >> 16 & 0xff),
                        (byte) (intAddr >> 24 & 0xff)
                };

                try {
                    mInetAddress = InetAddress.getByAddress(byteaddr);

                    Log.d(TAG, "Network address registered with: " + mInetAddress.getHostAddress());

                    mLock = mWifiManager.createMulticastLock(MULTICAST_LOCK_NAME);
                    mLock.setReferenceCounted(true);
                    mLock.acquire();
                    try {
                        mJmDNS = JmDNS.create(mInetAddress);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                } catch (UnknownHostException e1) {
                    e1.printStackTrace();
                }
            }
        });
    }

    @Override
    public void register(final int port, final boolean discover, Context context) {
        mNsdExecutorService.submit(new Runnable() {
            @Override
            public void run() {
                mServiceInfo = ServiceInfo.create(SERVICE_TYPE, "resilservice", port,
                        "Resilience service for Data Upload");
                try {
                    mJmDNS.registerService(mServiceInfo);
                    Log.d(TAG, "Registered");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

        if (discover) {
            discover();
        }

    }

    @Override
    public void discover() {
        mNsdExecutorService.submit(new Runnable() {
            @Override
            public void run() {
                mJmDNS.addServiceListener(SERVICE_TYPE, mServiceListener);
                Log.d(TAG, "Discovering");
            }
        });
    }

    @Override
    public void stopDiscovery() {
        Log.d(TAG, "Stopped Discovering!");
        mJmDNS.removeServiceListener(SERVICE_TYPE, mServiceListener);
    }

    @Override
    public void tearDown() {
        mNsdExecutorService.submit(new Runnable() {
            @Override
            public void run() {
                Log.d(TAG, "Tearing down!");
                mJmDNS.removeServiceListener(SERVICE_TYPE, mServiceListener);
                try {
                    mJmDNS.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mLock.release();
            }
        });
    }

}




Java Source Code List

com.fyp.resilience.Constants.java
com.fyp.resilience.Flags.java
com.fyp.resilience.GCMIntentService.java
com.fyp.resilience.PreferenceConstants.java
com.fyp.resilience.ResilienceApplication.java
com.fyp.resilience.ResilienceController.java
com.fyp.resilience.activity.LicenceActivity.java
com.fyp.resilience.activity.ResilienceActivity.java
com.fyp.resilience.activity.SettingsActivity.java
com.fyp.resilience.adapter.ClientListAdapter.java
com.fyp.resilience.adapter.ConnectionListAdapter.java
com.fyp.resilience.adapter.FileListAdapter.java
com.fyp.resilience.connection.Connectable.java
com.fyp.resilience.connection.ServerDownloadConnectable.java
com.fyp.resilience.connection.ServerUploadConnectable.java
com.fyp.resilience.connection.UploadConnectable.java
com.fyp.resilience.connection.WifiDownloadConnectable.java
com.fyp.resilience.connection.WifiUploadConnectable.java
com.fyp.resilience.database.ResilienceDbHelper.java
com.fyp.resilience.database.ResilienceDbManager.java
com.fyp.resilience.database.model.DataPiece.java
com.fyp.resilience.database.model.DataWhole.java
com.fyp.resilience.event.ClientListChanged.java
com.fyp.resilience.event.ClientModified.java
com.fyp.resilience.event.ConnectionProgressChange.java
com.fyp.resilience.event.ConnectionStateChange.java
com.fyp.resilience.event.ConnectionsModified.java
com.fyp.resilience.event.PieceStateChange.java
com.fyp.resilience.event.ServerRegistrationChanged.java
com.fyp.resilience.event.ServerUploadFinished.java
com.fyp.resilience.event.WholeModified.java
com.fyp.resilience.event.WifiDownloadFinished.java
com.fyp.resilience.event.WifiUploadFinished.java
com.fyp.resilience.fragment.ClientsFragment.java
com.fyp.resilience.fragment.ConnectionsFragment.java
com.fyp.resilience.fragment.FilesFragment.java
com.fyp.resilience.interfaces.Messagable.java
com.fyp.resilience.interfaces.Partialable.java
com.fyp.resilience.proto.ProtoBuffSpecification.java
com.fyp.resilience.receiver.AbstractConnectivityBroadcastReceiver.java
com.fyp.resilience.receiver.BootReceiver.java
com.fyp.resilience.receiver.ConnectivityBroadcastReceiver.java
com.fyp.resilience.receiver.WiFiDirectBroadcastReceiver.java
com.fyp.resilience.register.RegisterRequestInitializer.java
com.fyp.resilience.register.RegisterRequest.java
com.fyp.resilience.register.RegisterScopes.java
com.fyp.resilience.register.Register.java
com.fyp.resilience.register.model.DeviceInfo.java
com.fyp.resilience.service.PieceUploadService.java
com.fyp.resilience.stream.PiecedRandomAccessFile.java
com.fyp.resilience.swarm.helper.NsdHelper.java
com.fyp.resilience.swarm.helper.SwarmHelperInterface.java
com.fyp.resilience.swarm.helper.WifiDirectSdHelper.java
com.fyp.resilience.swarm.model.SwarmClient.java
com.fyp.resilience.thread.ResilienceRunnable.java
com.fyp.resilience.thread.ResilienceThreadFactory.java
com.fyp.resilience.util.ConnectionUtils.java
com.fyp.resilience.util.Utils.java
com.fyp.resilience.view.ClientView.java
com.fyp.resilience.view.ConnectionView.java
com.fyp.resilience.view.FileView.java
com.fyp.resilience.view.PieceProgressIndicator.java
com.fyp.resilience.widerst.WiderstRequestInitializer.java
com.fyp.resilience.widerst.WiderstRequest.java
com.fyp.resilience.widerst.WiderstScopes.java
com.fyp.resilience.widerst.Widerst.java
com.fyp.resilience.widerst.model.DataPiecePartial.java
com.fyp.resilience.widerst.model.DataWholePartial.java
com.fyp.resilience.widerst.model.PostResponse.java
com.fyp.widerst.Constants.java
com.fyp.widerst.WiderstObjectifyService.java
com.fyp.widerst.backend.FileJoinerBackend.java
com.fyp.widerst.cron.CronJobServlet.java
com.fyp.widerst.endpoint.DataPieceEndpoint.java
com.fyp.widerst.endpoint.DeviceInfoEndpoint.java
com.fyp.widerst.entity.DataPiece.java
com.fyp.widerst.entity.DataWhole.java
com.fyp.widerst.entity.DeviceInfo.java
com.fyp.widerst.handler.BlobstoreUploadHandler.java
com.fyp.widerst.partial.DataPiecePartial.java
com.fyp.widerst.partial.DataWholePartial.java
com.fyp.widerst.response.PostResponse.java
com.fyp.widerst.servlet.WholeFileServer.java
com.fyp.widerst.util.DbHelper.java
com.fyp.widerst.util.GcmHelper.java