⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 placenameservice.java

📁 一个agent 工具包,可以开发移动设备应用,考虑了安全措施
💻 JAVA
字号:
package SOMA.naming.place;

import java.io.*;
import java.util.*;
import java.net.InetAddress;

import SOMA.naming.*;
import SOMA.network.connection.*;
import SOMA.Environment;

/** Servizio di nomi di place, <B>PNS</B>.
*
* <P> Il servizio realizza la metafora di una tabella in cui vengono memorizzate
* le {@link PlaceInfo}. La chiave di ricerca e' di tipo
* {@link PlaceID}, identificatore del place.
*
* <P> Affinche' un place entri a far parte di un dominio e' necessario che il PNS del place
* si <B>registri</B> presso il PNS del <B>default place</B> del dominio.
*
* <P> In ogni momento il PNS puo' richiedere l'aggiornamento della tabella dei place
* del dominio sia al default place, sia a un place qualsiasi, ove questo sia necessario.
*
* @see PNSExplorerItem
* @see SOMA.naming.domain.DomainNameService
*
* @author Livio Profiri
*/

public class PlaceNameService implements Serializable
{
  /** @serial*/
  transient protected Environment env;
  /** @serial*/
  protected Hashtable places = new Hashtable();

  /** Costruttore.
  * @param env L'environment del place.
  */
  public PlaceNameService( SOMA.Environment env )
  {
    this.env = env;
  }

  /** Restituisce la <code>PlaceInfo</code> corrispondente a <code>placeID</code>,
  * o <code>null</code> se non trovata.
  */
  synchronized public PlaceInfo getPlace( PlaceID placeID )
  {
    return (PlaceInfo)places.get( placeID );
  }

  /** Inserisce una <code>PlaceInfo</code>.
  *
  * <P> Se e' un default place e <code>PlaceInfo</code> e' nuova, aggiorna gli altri place.
  * <BR>
  * @return Il vecchio valore memorizzato o <code>null</code> se si tratta di un nuovo place.
  */
  synchronized public PlaceInfo putPlace( PlaceInfo newPlaceInfo )
  {
    PlaceInfo oldPlaceInfo = (PlaceInfo)places.put( newPlaceInfo.placeID, newPlaceInfo );

    if( env.placeID.isDomain() && (! newPlaceInfo.equals( oldPlaceInfo )) )
      sendToAllPlaces( new PutPlaceCommand( newPlaceInfo ), newPlaceInfo.placeID );

    return oldPlaceInfo;
  }

  /** Elimina la <code>placeInfo</code> corrispondente a <code>aPlaceID</code>.
  *
  * <P> Se e' un default place e <code>aPlaceID</code> e' presente, aggiorna gli altri place.
  * <BR>
  *
  * @return Il vecchio valore memorizzato o <code>null</code> se si tratta di un nuovo place.
  */
  synchronized public PlaceInfo removePlace( PlaceID aPlaceID )
  {
    PlaceInfo oldPlaceInfo = (PlaceInfo)places.remove( aPlaceID );  // Restituisce il vecchio valore o null.
    env.networkManager.connectionStore.removeConnection( aPlaceID );

    if( env.placeID.isDomain() && (oldPlaceInfo != null) )
      sendToAllPlaces( new RemovePlaceCommand( aPlaceID ) );

    return oldPlaceInfo;
  }

  /** Stampa la lista di tutti i place del dominio su <code>out</code>.*/
  public void listPlaces( PrintStream out )
  {
    out.println( "I know " + places.size() + " places:" );
    out.println();
    int i;
    Enumeration list;

    for( i = 1, list = places.elements(); list.hasMoreElements(); )
      out.println( "    " + i++ + ") " + list.nextElement().toString() );
    out.println();
  }

  /** Registrazione presso il PNS del default place del dominio.
  *
  * <P>Viene inviato un {@link PlaceRegisterCommand} al default place, individuato dalla coppia
  * <B>host:port</B>.
  */
  public boolean register( InetAddress host, int port )
  {
    return env.networkManager.sendCommand( host, port,
      new PlaceRegisterCommand( env.networkManager.placeInfo ) );
  }

  /** Richiesta di refresh della tabella al PNS del default place.
  *
  * <P>Viene inviato un {@link PlaceRefreshCommand.Request} al PNS del default place.
  */
  public boolean refresh()
  {
    if( env.placeID.isDomain() )
    {
      env.err.println( "Can't refresh a default place!" );
      return false;
    }
    else
    {
      return env.networkManager.sendCommand( env.placeID.getDomainID(),
                    new PlaceRefreshCommand.Request() );
    }
  }

  /** Richiesta di refresh della tabella al PNS di un place qualsiasi.
  *
  * <P>Viene inviato un {@link PlaceRefreshCommand.Request} al PNS del place
  * individuato dalla coppia<B>host:port</B>.
  */
  public boolean refresh( InetAddress host, int port )
  {
    return env.networkManager.sendCommand( host, port,
      new PlaceRefreshCommand.Request() );
  }

  /** Spedisce un comando a tutti i place della tabella. */
  public void sendToAllPlaces( Command command )
  {
    sendToAllPlaces( command, null );
  }


  /** Spedisce un comando a tutti i place della tabella, escluso il place <code>DontSendMe</code>.
  */

  // Salto il place DontSendMe
  public void sendToAllPlaces( Command command, PlaceID DontSendMe )
  {
    env.out.println( "  Sending " + command + " to every place in my domain:"  );
    env.out.println();
    int i;
    Enumeration list;

    list = places.elements();

    for( i = 1; list.hasMoreElements(); )
    {
      PlaceInfo dest = (PlaceInfo)list.nextElement();
      // Attenzione: il metodo sendcommand che usa il PlaceInfo 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -