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

📄 networkmanager.java

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

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

import SOMA.Environment;
import SOMA.network.connection.*;
import SOMA.explorer.*;
import SOMA.naming.*;
import SOMA.naming.place.*;
import SOMA.naming.domain.*;
import SOMA.mobilePlace.*;

/** Gestore delle comunicazioni di rete di un {@link SOMA.Environment place}.
*
* @author Livio Profiri
*/

public class NetworkManager
{
  Environment env;
  ConnectionServer connectionServer = null;
  protected Hashtable permanentConnections = new Hashtable();

  /** Informazioni sul place. */
  public PlaceInfo placeInfo;

  DirExplorerItem networkManagerDir;
  DirExplorerItem connectionsDir;
  int connectionCount = 1;

  /** Memorizza le {@link SOMA.network.connection.Connection connessioni}
  * con gli altri place dello stesso dominio. */
  public ConnectionStore connectionStore = new ConnectionStore();

  /** Costruttore.
  * @param env L'environment del place.
  * @param port La porta su cui avviare il
  *   {@link SOMA.network.connection.ConnectionServer server} per le connessioni.
  */
  public NetworkManager( Environment env, int port ) throws IOException, ConnectionServer.ConnectionServerException, NameException
  {
    this.env = env;

    if( env.placeID.isDomain() )
      placeInfo = new DomainInfo( env.placeID, InetAddress.getLocalHost(), port );
    else
      placeInfo = new PlaceInfo( env.placeID, InetAddress.getLocalHost(), port );

    //Aggiungo 2 voci alla struttura delle directory.
    networkManagerDir = new DirExplorerItem( "netManager" );
    env.dir.addItem( networkManagerDir );

    networkManagerDir.addItem( "placeInfo", new ObjectExplorerItem( placeInfo ) );

    // Eliminare questa: la lista si allunga ad ogni connessione.
    connectionsDir = new DirExplorerItem( "connections" );
    networkManagerDir.addItem( connectionsDir );

    // Aggiungo un'autoconnessione, in modo che i comandi spediti verso lo stesso place
    //   vengano eseguiti in loco
    Connection selfConnection = new SelfConnection( env );
    connectionStore.putConnection( env.placeID, selfConnection );
    connectionsDir.addItem( "selfConnection", new ConnectionExplorerItem( selfConnection ) );

    // Avvio il server per le connessioni
    connectionServer = new ConnectionServer( port, 100,
      new ExplorableConnectionFactory( env, connectionsDir, "servConn" ) );

    networkManagerDir.addItem( "server" , new DaemonExplorerItem( connectionServer ) );

    connectionServer.start();

    if( env.placeID.isDomain() )
      env.domainNameService.putDomain( (DomainInfo)placeInfo );

    env.placeNameService.putPlace( placeInfo );
    /*
    if( env.placeID.isDomain() )
    {
      env.domainNameService = new DomainNameService( env );
      env.dir.addItem( "dns", new DNSExplorerItem( env.domainNameService ) );

      env.domainNameService.putDomain( (DomainInfo)placeInfo );
    }

    env.placeNameService = new PlaceNameService( env );
    env.dir.addItem( "pns", new PNSExplorerItem( env.placeNameService ) );

    env.placeNameService.putPlace( placeInfo );
    */

    networkManagerDir.addItem( "connList" , new ExplorerItem( "List of connections" )
      {
        public Object Execute( Collection Parameters, PrintStream out )
        {
          connectionStore.printConnections( out );
          return null;
        }
      });

    networkManagerDir.addItem( "send" , new ExplorerItem( "<PlaceID> <Message>" )
      {
        public Object Execute( Collection Parameters, PrintStream out )
        {
          if( Parameters.size() > 1 )
          {
            Iterator i = Parameters.iterator();

            PlaceID dest = null;
            try
            {
              //dest = new PlaceID( (String)i.next() );
              dest = MobilePlaceID.parsePlaceID( (String)i.next() );
            }
            catch( NameException e )
            {
              out.println( e );
              return e;
            }

            SendMessageCommand Message = new SendMessageCommand( (String)i.next() );

            out.println( "Sending command " + Message + " to " + dest );

            if( sendCommand( dest, Message ) )
            {
              out.println( "Message " + Message + " sent!" );
              return new Boolean( true );
            }
            else
            {
              out.println( "ERROR: Message " + Message + " NOT SENT!" );
              return new Boolean( true );
            }
          }

          out.println( "incorrect number of parameters" );
          return null;
        }
      });

    networkManagerDir.addItem( "perm" , new PermanentConnectionsExplorerItem() );
  }

  /** Spedizione di un comando ad un place.
  *
  * @return <code>true</code> se la spedizione ha avuto successo.
  */
  public boolean sendCommand( PlaceID destID, Command aCommand )
  {
    boolean answer = false;

    PlaceID myDomainID;

    if( env.placeID instanceof MobilePlaceID )
      myDomainID = ((MobileEnvironment)env).currentDomainID;
    else
      myDomainID = env.placeID.getDomainID();

    if( destID instanceof MobilePlaceID ) // La destinazione 

⌨️ 快捷键说明

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