upnp 초기 화

10658 단어 초기 화
/*
 * 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;
    }
}

 
첨부 파일 관리 개발 문서

좋은 웹페이지 즐겨찾기