/*
 * 
 * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * The contents of this file are subject to the Sun Community Source
 * License v3.0/Jini Technology Specific Attachment v 1.0 (the
 * "License"). You may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 * http://wwws.sun.com/software/jini/licensing/SCSL3_JiniTSA1.html.
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License.
 * 
 * The Reference Code is Jini Technology Core Platform code, v2.0. The
 * Developer of the Reference Code is Sun Microsystems, Inc.
 * 
 * Contributor(s): Sun Microsystems, Inc.
 * 
 * The contents of this file comply with the Jini Technology Core
 * Platform Compatibility Kit, v2.0A.
 * 
 * Tester(s): Sun Microsystems, Inc.
 * 
 * Test Platform(s):
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Solaris(TM)SPARC/x86
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Linux (Intel x86)
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Windows (Intel Platform)
 * 
 */
package com.sun.jini.mercury;

import com.sun.jini.admin.DestroyAdmin;
import com.sun.jini.landlord.Landlord;
import com.sun.jini.proxy.ThrowThis;
import com.sun.jini.start.ServiceProxyAccessor;
import net.jini.id.Uuid;


import java.rmi.Remote;
import java.rmi.RemoteException;

import net.jini.admin.Administrable;
import net.jini.admin.JoinAdmin;
import net.jini.core.event.RemoteEventListener;
import net.jini.core.event.RemoteEvent;
import net.jini.core.event.UnknownEventException;
import net.jini.core.lease.LeaseDeniedException;
import net.jini.event.EventMailbox;
import net.jini.event.MailboxRegistration;
import net.jini.admin.Administrable;

/**
 * MailboxBackEnd defines the private protocol between the various client-side
 * proxies and the event mailbox server.
 * <p>
 * The declared methods are pretty straightforward mappings of the
 * <tt>EventMailbox</tt> and <tt>MailboxRegistration</tt> interfaces.
 * <p>
 * Note: The <tt>Landlord</tt> interface extends <tt>Remote</tt>, 
 * which implicitly makes this interface Remote as well. 
 *
 * @author Sun Microsystems, Inc.
 *
 * @since 1.1
 */
interface MailboxBackEnd extends Landlord, Administrable, MailboxAdmin,
    EventMailbox, ServiceProxyAccessor
{

    /**
     * Enable delivery of events for the given registration
     * to the specified target
     *
     * @param uuid The unique registration identifier
     *
     * @param target The designated delivery target for event notifications
     *
     * @see net.jini.event.MailboxRegistration#enableDelivery
     */
    public void enableDelivery(Uuid registrationID, RemoteEventListener target) 
	throws RemoteException, ThrowThis;
	
    /**
     * Disable delivery of events for the given registration
     *
     * @param uuid The unique registration identifier
     *
     * @see net.jini.event.MailboxRegistration#disableDelivery
     */
    public void disableDelivery(Uuid registrationID) 
	throws RemoteException, ThrowThis;

    /**
     * Collect remote events for the associated registration.
     *
     * @param uuid The unique registration identifier
     *
     * @param theEvent The event to store and/or forward
     *
     * @see net.jini.core.event.RemoteEventListener#notify
     */
    public void notify(Uuid registrationID, RemoteEvent theEvent) 
	throws UnknownEventException, RemoteException, ThrowThis;
}
