//  Nbr of object to register
int numberObjects=200;
DemoServer []myServers;

bool SEND_SIGNALS=true;



[DBus (name = "net.prx.test")]
public class DemoServer : Object {

	private int counterA;
	private int counterB;	

	public void sendSignalA(){		
		if (SEND_SIGNALS){
			newSignalA(counterA);
			}
		counterA++;
	}
	public void sendSignalB(){
		if (SEND_SIGNALS){
			newSignalB(counterB);
		}
		counterB++;
	}	
	
    public signal void newSignalA (double value);
    public signal void newSignalB (double value);
}

[DBus (name = "net.prx.test")]
public errordomain DemoError
{
    SOME_ERROR
}

void on_bus_aquired (DBusConnection conn) {
	stdout.printf ("Bus adquired\n");
	
	myServers=new DemoServer[numberObjects];
	
	for (int i=0;i<numberObjects;i++){
    	try {
	    	myServers[i]=new DemoServer ();
        	conn.register_object ("/net/prx/test/"+i.to_string(), myServers[i]);
          
    	} catch (IOError e) {
        	stderr.printf ("Could not register service\n");
    	}
	}    	
    	
	Timeout.add (250, () => {
		for (int i=0;i<numberObjects;i++){
			myServers[i].sendSignalA();
		}
		return true;
	});	       
	
	Timeout.add (2000, () => {
		for (int i=0;i<numberObjects;i++){
			myServers[i].sendSignalB();
		}			
		return true;
	});	    	    
}

void on_name_adquired (DBusConnection conn) {
	stdout.printf("Name adquired");
}

void on_name_lost (DBusConnection conn) {
	stdout.printf("Name lost");
}

void main () {
    Bus.own_name (BusType.SYSTEM, "net.prx.genio.prx", BusNameOwnerFlags.NONE, 
                 on_bus_aquired,
                 on_name_adquired,
                 on_name_lost);
	        
    new MainLoop ().run ();
}