📄 messagenaplet.java
字号:
/* * @<#> MessageNaplet.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 message;/** * The <code>MessageNaplet</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 MessageNaplet extends Naplet { public MessageNaplet(String[] servers) throws InvalidNapletException, InvalidItineraryException { this(null, servers); } public MessageNaplet(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); try { getItinerary().travel( this ); } catch (NapletMigrateException nme) { throw new NapletRuntimeException(nme); } } 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(); // Address book of a naplet contains all the NapletID of its // sibling naplets (due to cloning), as well as the address // information inherited from its parent (or creator). AddressBook aBook = nap.getAddressBook(); Iterator iter = aBook.iterator(); try { Thread.sleep(3000); } catch (InterruptedException ie){} 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); System.out.println("Sending message to "+ entry.getServerURN().toString() ); } } catch (NapletCommunicationException nce) { System.out.println("Unable to post message"); System.exit(1); } } // Communicate to all the naplets, excluding 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(); // par(ns1; seq(ns2, ns3)) ItineraryPattern[] ip = new ItineraryPattern[2]; ip[0] = new SingletonPattern( servers[0], act ); String[] rest = new String[servers.length-1]; for (int i=0; i<servers.length-1; i++) rest[i] = new String( servers[i+1] ); ip[1] = new SeqPattern( rest, act ); setRoute( new ParPattern(ip) ); System.out.println("ICItinerary = " + getRoute().toString() ); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -