Return to Snippet

Revision: 34997
at November 1, 2010 03:26 by kubaitis


Initial Code
import javax.jmdns.JmDNS;
import javax.jmdns.ServiceInfo;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Hashtable;
public class mDNSAgent extends Thread {
    public mDNSAgent(){
        this.mdnsType = "_myservice._tcp.local.";
        this.mdnsName = "MyService";
        try{jmdns = JmDNS.create();}catch(Exception e){e.printStackTrace();System.exit(1);}
        running = false;
        paused=false;
        waitInterval=500L;
        status="initialized";
        servers = new ArrayList<ServerInfo>();
    }
    public mDNSAgent(final String mdnsType,final String mdnsName){
        this.mdnsType = mdnsType; 
        this.mdnsName = mdnsName; 
        try{jmdns = JmDNS.create();}catch(Exception e){e.printStackTrace();System.exit(1);}
        running = false;
        paused=false;
        waitInterval=500L;
        status="initialized";
        servers = new ArrayList<ServerInfo>();
    }
    private boolean running;
    private boolean paused;
    private JmDNS jmdns;
    private long waitInterval;
    private String mdnsName;
    private String mdnsType;
    private String status;
    private ArrayList<ServerInfo> servers;
    public ArrayList<ServerInfo> getServers(){return servers;}
    public boolean isRunning(){return running;}
    public boolean isPaused(){return paused;}
    public void stopService(){running=false;paused=false;}
    public void pauseService(){paused=true;}
    public void resumeService(){paused=false;}
    public void setWaitInterval(long input){waitInterval=input;}
    public void setStatus(String input){status=input;}
    public long getWaitInterval(){return waitInterval;}
    public String getMdnsName(){return mdnsName;}
    public String getMdnsType(){return mdnsType;}
    public String getStatus(){return status;}
    public static final void sleep(long millis){try{Thread.sleep(millis);}catch(Exception e){}}
    public void checkPause(){while(isRunning()&&isPaused()){sleep(waitInterval);}}
    public void register(final String hostName,final Integer webServerPort){
        Hashtable<String,String> settings = new Hashtable<String,String>();
        settings.put("host", hostName);
        settings.put("web_port", webServerPort.toString());
        settings.put("secure_web_port", webServerPort.toString());
        try {
            ServiceInfo info = ServiceInfo.create(mdnsType, mdnsName, webServerPort,1,1,settings);
            jmdns.registerService(info);
        }catch(IOException e){e.printStackTrace();}
    }
    public void run(){
        while (isRunning()) {
            checkPause();
            ServiceInfo[] infos = jmdns.list(mdnsType);
            if(infos!=null&&infos.length>0){
                ArrayList<ServerInfo> temp = new ArrayList<ServerInfo>();
                for (int i=0; i < infos.length; i++) {
                    temp.add(new ServerInfo(infos[i].getName(),infos[i].getPropertyString("host"),Integer.valueOf(infos[i].getPropertyString("web_port")),Integer.valueOf(infos[i].getPropertyString("secure_web_port"))));
                }
                servers = temp;
                try {Thread.sleep(waitInterval);}catch(InterruptedException e){break;}
            }
        }
    }
}

Initial URL


Initial Description
Requires jmdns.jar from http://sourceforge.net/projects/jmdns/

Initial Title
Register and Monitor mDNS Services : Zeroconf

Initial Tags


Initial Language
Java