talknaplet.java
来自「移动Agent编程工具Naplet」· Java 代码 · 共 158 行
JAVA
158 行
/*
* @<#> TalkNaplet.java version 0.0.1, 1/1/2000
*
* THIS PROGRAM IS FREE SOFTWARE; YOU CAN DISTRIBUTE IT AND/OR
* MODIFY IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE
* AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION.
*
* THIS PROGRAM 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 GENERAL PUBLIC LICENSE FOR MORE DETAILS.
*
* Copyright (c) 2000 Wayne State University. All Rights Reserved.
*/
package talk;
/**
* The <code>TalkNaplet</code> class implements an example of naplets
* that is dispatched in parallel and the two spawned naplets need to
* talk to each other.
*
* @version 0.0.1, 1/1/2000
* @author C. Xu
*
*/
import java.io.*;
import java.rmi.*;
import java.util.*;
import java.lang.reflect.*;
import naplet.*;
import naplet.itinerary.*;
import naplet.message.*;
public class TalkNaplet extends Naplet
{
public TalkNaplet( String[] servers )
throws InvalidNapletException, InvalidItineraryException
{
this( null, servers );
}
public TalkNaplet( String name, String[] servers )
throws InvalidNapletException, InvalidItineraryException
{
super( name, null );
setItinerary( new CommItinerary( servers ) );
}
/**
* Entry point of a naplet at each server
*/
public void onStart()
throws InterruptedException
{
String server = getNapletContext().getServerURN().toString();
System.out.println( "Naplet " + this.getNapletID().toString()
+ " is running at " + server );
Thread.sleep( 3000 );
try
{
getItinerary().travel( this );
}
catch ( NapletMigrateException nme )
{
System.out.println( nme.getMessage() );
}
}
static void classFinalize()
{
System.out.println( "MyNaplet was finalized" );
}
/**
* The <code>Barrier</code> class defines an operation to be performed
* at the end of an itinerary.
*/
private class Barrier
implements Operable
{
public void operate( Naplet nap )
{
NapletID myID = nap.getNapletID();
System.out.println( "My NapletID =" + myID.toString() );
Messenger postman = nap.getNapletContext().getMessenger();
AddressBook aBook = nap.getAddressBook();
Iterator iter = aBook.iterator();
while ( iter.hasNext() )
{
AddressEntry entry = ( AddressEntry ) iter.next();
NapletID nid = entry.getNapletID();
try
{
if ( !nid.equals( aBook.creator() ) && !nid.equals( myID ) )
{
Message msg = new Message( myID, nid,
"Helloooo from " + myID.toString() );
// postman.send(myID, id, msg);
postman.send( myID, entry.getServerURN(), msg );
}
}
catch ( NapletCommunicationException nce )
{
System.out.println( "Unable to post message" );
System.exit( 1 );
}
}
// Communicate to all the naplets, excluding its Creator and itself
for ( int i = 0; i < aBook.size() - 2; i++ )
{
Message msg = postman.checkMailBox( myID );
if ( msg != null )
{
System.out.println( msg.getMessage() );
}
else
{
System.out.println( "No new message" );
}
}
}
}
private class CommItinerary extends Itinerary
{
public CommItinerary( String[] servers )
throws InvalidItineraryException
{
Operable act = new Barrier();
// broadcast pattern
ItineraryPattern[] ip = new ItineraryPattern[servers.length];
for ( int i = 0; i < servers.length; i++ )
{
ip[i] = new SingletonPattern( servers[i], act );
}
setRoute( new ParPattern( ip ) );
System.out.println( "ICItinerary = " + getRoute().toString() );
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?