public void sendPackage(long packNumber, double x, double y,
			RemoteEventListener<TrackPackage> nodeListener)
			throws RemoteException {

		final long getPackNum = packNumber;
		try {

			this.route(getPackNum, x, y, nodeListener);
		} catch (Exception e) {
			// Report a TrackPackage to Headquarters remote event listeners.
			eventGenerator.reportEvent(new TrackPackage("Package number "
					+ packNumber + " departed from " + this.getOfficeName()
					+ " office", packNumber, 1));
			// Report a TrackPackage event to Customer remote event listeners.
			nodeListener.report(0, new TrackPackage("Package number "
					+ packNumber + " departed from " + this.getOfficeName()
					+ " office", packNumber, 1));

			try {
				Thread.sleep(100);
			} catch (InterruptedException e2) {
			}

			// Report a TrackPackage to any remote event listeners.
			eventGenerator.reportEvent(new TrackPackage("Package number "
					+ packNumber + " lost by " + this.getOfficeName()
					+ " office", packNumber, 2));
			try {
				// Report a TrackPackage event to Customer remote event
				// listeners.
				nodeListener.report(0, new TrackPackage("Package number "
						+ packNumber + " lost by " + this.getOfficeName()
						+ " office", packNumber, 2));
			} catch (Exception e3) {
				try {
					Thread.sleep(45000);
				} catch (InterruptedException e1) {
				}

				List<String> listOfOffices1 = registry.list();
				Iterator<String> iter1 = listOfOffices1.iterator();

				while (iter1.hasNext()) {
			
					GPSOfficeRef neighbor1;
					try {
						neighbor1 = (GPSOfficeRef) registry
								.lookup(iter1.next());
						neighbor1.updateNeighbors();
					} catch (NotBoundException e1) {
					}
				}
			}

		}
	}