@Override
	public ReservationReplyMessage reservationRequest(int clientID, int theaterID, int seatReservation) throws RemoteException {
		if(seatReservation < 0)
			return new ReservationReplyMessage(theaterID, null, false);
					
		//Creates a communication channel between this and the DBServer
		CommunicationController databaseCC;
		try {
			databaseCC = new CommunicationController(new Socket(this.dbAddress, this.dbPort));
		} catch (UnknownHostException e) {
			return new ReservationReplyMessage(theaterID, null, false);
		} catch (IOException e) {
			return new ReservationReplyMessage(theaterID, null, false);
		}
		
		ReservationReplyMessage reply = Skeleton.reservation(new ReservationRequestMessage(theaterID, seatReservation), databaseCC);
		databaseCC.closeConnection();
		
		//Update cache
		if(reply != null){
			if(reply.getTheaterSeats() == null)
				return null;
			this.cache.free(clientID);
			this.cache.addTheaterSeats(reply.getTheaterSeats());
		}
		
		//If an error occurred the reply == null and it is returned
		return reply;
	}