📄 terminatenaplet.java~
字号:
/* * @<#> TerminateNaplet.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 terminate;/** * The <code>TerminateNaplet</code> class implements a dummy naplet * that travels around the network, sleeping a while at each server. * The naplet will be terminated by its dispatcher. * * @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 TerminateNaplet extends Naplet { public TerminateNaplet(String[] servers) throws InvalidNapletException, InvalidItineraryException { this(null, servers, null); } public TerminateNaplet(String name, String[] servers) throws InvalidNapletException, InvalidItineraryException { this(name, servers, null); } /** * Constructs a naplet * @param servers a list of servers to be visited * @param listener listener of the naplet waiting for results */ public TerminateNaplet(String[] servers, NapletListener listener) throws InvalidNapletException, InvalidItineraryException { this(null, servers, listener); } /** * Constructs a naplet, setting itinerary * * @param name Nick name of the naplet * @param servers A list of servers to be visitted * @param listener Listener of the naplet waiting for results */ public TerminateNaplet(String name, String[] servers, NapletListener listener) throws InvalidNapletException, InvalidItineraryException { super(name, listener); try { Hashtable messages = new Hashtable( servers.length ); setNapletState( new ProtectedNapletState() ); getNapletState().set("message", messages); } catch (NapletStateAccessException nsae) { throw new InvalidNapletException("Naplet state initialization failure"); } setItinerary ( new ICItinerary( servers ) ); } /** * Entry point of a naplet at each server */ public void onStart() throws InterruptedException { String serverName; serverName = getNapletContext().getServerURN().getHostName(); System.out.println( "Naplet " + this.getNapletID().toString() + " arrives at " + serverName); System.out.println("Sleeping... ..."); Thread.sleep(30000); System.out.println("Wakeup"); try { getItinerary().travel( this ); } catch (NapletMigrateException nme) { System.out.println(nme.getMessage()); } System.out.println("End of Start()"); } public void onInterrupt() { MailBox mbox = this.getNapletContext().getMessenger().getMailBox(this.getNapletID()); try { Message msg = mbox.getMessage(); switch (msg.getType()) { case Message.TERMINATE: System.out.println("I'm to be interrupted"); Message ack = new Message(Message.TERMINATE_ACK, this.getNapletID(), msg.getSender(), " Ack to terminate"); try { this.getNapletContext().getMessenger().send(this.getNapletID(), msg.getSender(), ack); } catch (NapletCommunicationException nce) { System.out.println(nce.getMessage()); } Thread.currentThread().interrupt(); case Message.SUSPEND: case Message.RESUME: } } catch (InterruptedException ie){} } static void classFinalize() { System.out.println("MyNaplet was finalized"); } private class ICItinerary extends Itinerary { public ICItinerary( String[] servers ) throws InvalidItineraryException { Operable act = null; // seq(s0,s1,s2) setRoute( new SeqPattern(servers, act) ); System.out.println("ICItinerary = " + getRoute().toString() ); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -