blob: ad520345f656156a25358e92d6c27fde72ff3cd3 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* @author max
*/
package com.intellij.util.messages;
import com.intellij.openapi.Disposable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Aggregates multiple topic subscriptions for particular {@link MessageBus message bus}. I.e. every time a client wants to
* listen for messages it should grab appropriate connection (or create a new one) and {@link #subscribe(Topic, Object) subscribe}
* to particular endpoint.
*/
public interface MessageBusConnection extends Disposable {
/**
* Subscribes given handler to the target endpoint within the current connection.
*
* @param topic target endpoint
* @param handler target handler to use for incoming messages
* @param <L> interface for working with the target topic
* @throws IllegalStateException if there is already registered handler for the target endpoint within the current connection.
* Note that that previously registered handler is not replaced by the given one then
* @see MessageBus#syncPublisher(Topic)
*/
<L> void subscribe(@NotNull Topic<L> topic, @NotNull L handler) throws IllegalStateException;
/**
* Subscribes to the target topic within the current connection using {@link #setDefaultHandler(MessageHandler) default handler}.
*
* @param topic target endpoint
* @param <L> interface for working with the target topic
* @throws IllegalStateException if {@link #setDefaultHandler(MessageHandler) default handler} hasn't been defined or
* has incompatible type with the {@link Topic#getListenerClass() topic's business interface}
* or if target topic is already subscribed within the current connection
*/
<L> void subscribe(@NotNull Topic<L> topic) throws IllegalStateException;
/**
* Allows to specify default handler to use during {@link #subscribe(Topic) anonymous subscriptions}.
*
* @param handler handler to use
*/
void setDefaultHandler(@Nullable MessageHandler handler);
/**
* Forces to process any queued but not delivered events.
*
* @see MessageBus#syncPublisher(Topic)
*/
void deliverImmediately();
/**
* Disconnects current connections from the {@link MessageBus message bus} and drops all queued but not dispatched messages (if any)
*/
void disconnect();
}