upnp初始化

/*
 * Copyright (C) 2010 Teleal GmbH, Switzerland
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.teleal.cling;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.teleal.cling.controlpoint.ActionCallback;
import org.teleal.cling.model.action.ActionArgumentValue;
import org.teleal.cling.model.action.ActionInvocation;
import org.teleal.cling.model.message.header.STAllHeader;
import org.teleal.cling.model.meta.Action;
import org.teleal.cling.model.meta.LocalDevice;
import org.teleal.cling.model.meta.RemoteDevice;
import org.teleal.cling.model.meta.Service;
import org.teleal.cling.model.types.UDAServiceId;
import org.teleal.cling.registry.Registry;
import org.teleal.cling.registry.RegistryListener;

/**
 * Runs a simple UPnP discovery procedure.
 * <p>
 * Call this class from the command-line to quickly evaluate Cling, it will
 * search for all UPnP devices on your LAN and print out any discovered, added,
 * and removed devices while it is running.
 * </p>
 *
 * @author Christian Bauer
 */
public class MyMain {

    public static void main(String[] args) throws Exception {
        System.out.println("Starting Cling...");
        
        UpnpService upnpService = new UpnpServiceImpl(
                new RegistryListener() {
                    public void remoteDeviceDiscoveryStarted(Registry registry, RemoteDevice device) {
                        System.out.println("Discovery started: " + device.getDisplayString());
                    }
                    public void remoteDeviceDiscoveryFailed(Registry registry, RemoteDevice device, Exception ex) {
                        System.out.println("Discovery failed: " + device.getDisplayString() + " => " + ex);
                    }
                    public void remoteDeviceAdded(Registry registry, RemoteDevice device) {
                        System.out.println("Remote device added: " + device.getDisplayString());
                    }
                    public void remoteDeviceUpdated(Registry registry, RemoteDevice device) {
                        System.out.println("Remote device updated: " + device.getDisplayString());
                    }
                    public void remoteDeviceRemoved(Registry registry, RemoteDevice device) {
                        System.out.println("Remote device removed: " + device.getDisplayString());
                    }
                    public void localDeviceAdded(Registry registry, LocalDevice device) {
                        System.out.println("Local device added: " + device.getDisplayString());
                    }
                    public void localDeviceRemoved(Registry registry, LocalDevice device) {
                        System.out.println("Local device removed: " + device.getDisplayString());
                    }
                    public void beforeShutdown(Registry registry) {
                        System.out.println("Before shutdown, the registry has devices: " + registry.getDevices().size());
                    }
                    public void afterShutdown() {
                        System.out.println("Shutdown of registry complete!");
                    }
                }
        );
        upnpService.getControlPoint().search(new STAllHeader()); // Search for all devices and services
       Thread.sleep(10000); //暂停5秒 查找设备
        
        
        Collection<RemoteDevice> dss = upnpService.getRegistry().getRemoteDevices();
        MyMain mian = new MyMain();
        for(RemoteDevice device:dss){
        	Map<String,Object> inputs = new HashMap<String,Object>();
        	inputs.put("ObjectID","200/516/517");
        	inputs.put("BrowseFlag","BrowseDirectChildren");
        	inputs.put("Filter","*");
            inputs.put("StartingIndex","0");
            inputs.put("RequestedCount","0");
            inputs.put("SortCriteria","");
        	Map outputs = new HashMap();
        	outputs = mian.action(upnpService, device, "ContentDirectory", "Browse", inputs);
        	Set<String> keys = outputs.keySet();
        	for(String key:keys){
        		System.out.println("key:"+key+"  values:"+outputs.get(key));
        	}
        	/*Service service = device.findService(new UDAServiceId("ContentDirectory"));
            Action getStatusAction = service.getAction("Browse");
            ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);*/
           /* //取第一个目录数据
            getStatusInvocation.setInput("ObjectID", "200/516");
            getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
            getStatusInvocation.setInput("Filter", "*");
            getStatusInvocation.setInput("StartingIndex", "0");
            getStatusInvocation.setInput("RequestedCount", "0");
            getStatusInvocation.setInput("SortCriteria", "+dc:creator"); //按照 创建时间排序
*/         /* //取根目录数据
            getStatusInvocation.setInput("ObjectID", "0");
            getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
            getStatusInvocation.setInput("Filter", "*");
            getStatusInvocation.setInput("StartingIndex", "0");
            getStatusInvocation.setInput("RequestedCount", "3");
            getStatusInvocation.setInput("SortCriteria", "");*/
            //根目录元数据
            /*getStatusInvocation.setInput("ObjectID", "0");
            //getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
            getStatusInvocation.setInput("BrowseFlag", "BrowseMetadata");
            getStatusInvocation.setInput("Filter", "*");
            getStatusInvocation.setInput("StartingIndex", "0");
            getStatusInvocation.setInput("RequestedCount", "0");
            getStatusInvocation.setInput("SortCriteria", "");*/
            
            //同步action 但是也没有发现怎么同步了 ,之前需要sleep
        	/*new ActionCallback.Default(getStatusInvocation, upnpService.getControlPoint()).run();
        	Map map = getStatusInvocation.getOutputMap();
        	ActionArgumentValue ss = getStatusInvocation.getOutput("Result");
        	System.out.println(ss.getValue());*/
        	
        	
        	//异步action
        	/* Service service = device.findService(new UDAServiceId("ContentDirectory"));
             Action getStatusAction = service.getAction("GetSearchCapabilities");
             ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);
             //getStatusInvocation.setInput("SourceURI", "");
             //getStatusInvocation.setInput("DestinationURI", "");
             ActionCallback getStatusCallback = new ActionCallback(getStatusInvocation) {

                  public void success(ActionInvocation invocation) {
                      ActionArgumentValue status  = invocation.getOutput("SearchCaps");
                     System.out.println(status.getValue());
                      //assertEquals((Boolean) status.getValue(), Boolean.valueOf(false));
                  }
                  @Override
                  public void failure(ActionInvocation invocation, UpnpResponse res) {
                      System.err.println(
                          createDefaultFailureMessage(invocation, res)
                      );
                  }
					@Override
					public void failure(ActionInvocation invocation,
							UpnpResponse operation, String defaultMsg) {
						System.err.println(
                              createDefaultFailureMessage(invocation, operation)
                          );
					}
             };
             upnpService.getControlPoint().execute(getStatusCallback);*/
        }
        System.out.println("Stopping Cling...");
        upnpService.shutdown();
    }
    public Map action(UpnpService upnpService, RemoteDevice device, String serviceId, String actionId, Map inputs){
    	Map retMap = null;
    	Service service = device.findService(new UDAServiceId(serviceId));
        Action getStatusAction = service.getAction(actionId);
        ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);
        Set<String> keys = inputs.keySet();
        for(String key:keys){
        	getStatusInvocation.setInput(key, inputs.get(key));
        }
        new ActionCallback.Default(getStatusInvocation, upnpService.getControlPoint()).run();
        retMap = getStatusInvocation.getOutputMap();
        System.out.println(retMap.size());
        return retMap;
    }
}

 

附件为文件管理开发文档

你可能感兴趣的:(初始化)