/**
 * Listen for state changes in clocks
 */

package client;

import service.*;
import xmltypes.*;

import java.io.*;

import org.cybergarage.upnp.*;
import org.cybergarage.upnp.device.*;
import org.cybergarage.upnp.control.*;
import org.cybergarage.http.*;
import org.cybergarage.upnp.ssdp.*;
import org.cybergarage.upnp.event.*;

public class ValidityListener implements EventListener, NotifyListener 
{
    private ControlPoint ctrlPoint = new ControlPoint();
    
    private StateVariable timeVar;
    private Device lastDeviceSeen;

    public static void main(String[] args) {
	ValidityListener client = new ValidityListener();
	
	Object keepAlive = new Object();
	synchronized(keepAlive) {
	    try {
		// Wait for a "notify" from another thread
		// that will never be sent.
		// So we stay alive for ever
		keepAlive.wait();
	    } catch(java.lang.InterruptedException e) {
		// do nothing
	    }
	}
    }

    public ValidityListener()
    {
	UPnP.setEnable(UPnP.USE_ONLY_IPV4_ADDR);

	// org.cybergarage.util.Debug.on();

	ctrlPoint.addNotifyListener(this);

	// Change start
	ctrlPoint.addEventListener(this);
	// Change end

	ctrlPoint.start();
    }

    // Change start
    public void eventNotifyReceived(String uuid, long seq, 
				    String varName, String value) {
	// a new event has arrived
	System.out.println("UUID: \"" +  uuid + "\"");
	System.out.println("Name: \"" +  varName + "\"");
	System.out.println("Value: \"" +  value + "\"");
    }
    // Change end

    public void deviceNotifyReceived(SSDPPacket ssdpPacket) { 
	DeviceList devList = ctrlPoint.getDeviceList();
	Device dev = null;
	System.out.println("Devices: " + devList.size());
	for (int n = 0; n < devList.size(); n++) {
	    if (devList.getDevice(n).getSSDPPacket() == ssdpPacket) {
		System.out.println("Found the new device matching SSDP packet");
		dev = devList.getDevice(n);
		break;
	    }
	}
	if (dev == null) {
	    // couldn't find it? That shouldn't happen...
	    return;
	}

	if (dev.getDeviceType().equals("urn:schemas-upnp-org:device:clock:1")) {
	    ServiceList services = dev.getServiceList();
	    for (int m = 0; m < services.size(); m++) {
		Service svc = services.getService(m);
		if (svc.getServiceType().equals("urn:schemas-upnp-org:service:timer:1")) {
		    System.out.println("Subscribing to timer events");

		    // Change start
		    // subscribe to events
		    ctrlPoint.subscribe(svc);
		    // Change end
		}
	    }
	}
    } 
}

