All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.granite.gravity.Gravity Maven / Gradle / Ivy

The newest version!
/**
 *   GRANITE DATA SERVICES
 *   Copyright (C) 2006-2014 GRANITE DATA SERVICES S.A.S.
 *
 *   This file is part of the Granite Data Services Platform.
 *
 *   Granite Data Services is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU Lesser General Public
 *   License as published by the Free Software Foundation; either
 *   version 2.1 of the License, or (at your option) any later version.
 *
 *   Granite Data Services is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
 *   General Public License for more details.
 *
 *   You should have received a copy of the GNU Lesser General Public
 *   License along with this library; if not, write to the Free Software
 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 *   USA, or see .
 */
package org.granite.gravity;

import java.security.Principal;
import java.util.List;
import java.util.Set;

import org.granite.config.GraniteConfig;
import org.granite.config.flex.ServicesConfig;

import flex.messaging.messages.AsyncMessage;
import flex.messaging.messages.Message;

/**
 * @author Franck WOLFF
 */
public interface Gravity {

    ///////////////////////////////////////////////////////////////////////////
    // Granite/Services configs access.

	/**
	 * Current Gravity configuration
	 * @return config
	 */
    public GravityConfig getGravityConfig();
    
    /**
     * Current services configuration
     * @return config
     */
    public ServicesConfig getServicesConfig();
    
    /**
     * Current Granite configuration
     * @return config
     */
    public GraniteConfig getGraniteConfig();

    ///////////////////////////////////////////////////////////////////////////
    // Properties.

    /**
     * State of the Gravity component
     * @return true if started
     */
	public boolean isStarted();

    ///////////////////////////////////////////////////////////////////////////
    // Operations.
	
	/**
	 * Start the Gravity component
	 * @throws Exception
	 */
    public void start() throws Exception;
    
    /**
     * Update the current configuration and restarts
     * @param gravityConfig Gravity config
     * @param graniteConfig Granite config
     */
    public void reconfigure(GravityConfig gravityConfig, GraniteConfig graniteConfig);
    
    /**
     * Stop the Gravity component
     * @throws Exception
     */
    public void stop() throws Exception;
    
    /**
     * Stop the Gravity component, optionally forcing immediate shutdown (without waiting for channel closing)
     * @throws Exception
     */
    public void stop(boolean now) throws Exception;
    
    /**
     * Registers a listener which will be notified of channel events (connect/disconnect/subscription/unsubscription)
     * @param listener 
     */
    public void registerListener(Listener listener);
    
    /**
     * Unregisters a listener which will be notified of channel events (connect/disconnect/subscription/unsubscription)
     * @param listener 
     */
    public void unregisterListener(Listener listener);

    /**
     * Currently connected channels
     * @return list of channels
     */
    public List getConnectedChannels();
    
    /**
     * Currently connected authenticated users
     * @return set of users
     */
    public Set getConnectedUsers();
    
    /**
     * Channels currently connected for a specified destination
     * @param destination a destination
     * @return list of channels
     */
    public List getConnectedChannelsByDestination(String destination);
    
    /**
     * Authenticated users currently connected for a specified destination
     * @param destination a destination
     * @return set of users
     */
    public Set getConnectedUsersByDestination(String destination);
    
    /**
     * Find all channels for an authenticated user name
     * @param name user name
     * @return list of channels
     */
    public List findConnectedChannelsByUser(String name);
    
    /**
     * Find the channel for a specified clientId
     * @param clientId client id
     * @return channel
     */
    public Channel findChannelByClientId(String clientId);
    
    /**
     * Current channel for the specified destination
     * @param destination destination
     * @return channel
     */
    public Channel findCurrentChannel(String destination);
    
    /**
     * Handle a message using the configured service adapter
     * @param message message
     * @return acknowledge or error
     */
    public Message handleMessage(Message message);
    
    /**
     * Handle a message using the configured service adapter, optionally skipping interceptors
     * @param message message
     * @param skipInterceptor skip interceptors
     * @return acknowledge or error
     */
    public Message handleMessage(Message message, boolean skipInterceptor);

    /**
     * Publish a message to connected users from the default server channel
     * @param message message to publish
     * @return acknowledge or error
     */
    public Message publishMessage(AsyncMessage message);
    
    /**
     * Publish a message to connected users from the specified user channel
     * @param fromChannel originating channel
     * @param message message to publish
     * @return acknowledge or error
     */
    public Message publishMessage(Channel fromChannel, AsyncMessage message);
    
    /**
     * Send a server-to-client request, waiting synchronously for the response
     * @param fromChannel originating channel
     * @param message request
     * @return response
     */
    public Message sendRequest(Channel fromChannel, AsyncMessage message);
    
    
    
    public interface Listener {
    	
    	public void connected(Channel channel);
    	
    	public void subscribed(Channel channel, String subscriptionId);
    	
    	public void authenticated(Channel channel, Principal principal);
    	
    	public void disconnected(Channel channel);
    	
    	public void unsubscribed(Channel channel, String subscriptionId);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy