private synchronized void coreClient() {
		LinkedList subscriptions = new LinkedList();
		// Waiting for the broker...
		try {
			wait(BROKER_STARTUP_TIME * 1000);
		} catch (InterruptedException e2) {
			e2.printStackTrace();
		}
		// Opening connection with the local broker
		try {
			srv.open();
		} catch (ConnectException e) {
			e.printStackTrace();
		}
		// Setting up subscriptions at core node
		Random rnd = new Random();
		for (int i = 0; i < MAX_SUBSCRIPTIONS; i++) {
			TextFilter flt = new TextFilter(String.valueOf(rnd.nextInt(RANDOM_THRESHOLD)), TextFilter.CONTAINS);
			srv.subscribe(flt);
			subscriptions.add(flt);
		}
		// Setting up control subscription
		srv.subscribe(new TextFilter("CONTROL", TextFilter.CONTAINS));
		// Starting publisher and notifier threads
		NotifierThread notifier = new NotifierThread();
		PublisherThread publisher = new PublisherThread();
		new Thread(notifier).start();
		new Thread(publisher).start();
		// Waiting simulation time
		try {
			wait(SIMULATION_TIME * 1000);
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		// The simulation ended
		publisher.stop();
		notifier.stop();
		// Recording subscriptions on stable storage
		ObjectOutputStream oos = null;
		try {
			oos = new ObjectOutputStream(new FileOutputStream("SUBSCRIPTIONS." + srv.getID()));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		ListIterator it = subscriptions.listIterator();
		while (it.hasNext()) {
			try {
				oos.writeObject((TextFilter) it.next());
				oos.flush();
				oos.reset();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		try {
			oos.flush();
			oos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		srv.close();
	}