Details | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 15 | arune | 1 | /* |
| 2 | * modLoopback.java |
||
| 3 | * |
||
| 4 | * Created on den 23 augusti 2003, 14:10 |
||
| 5 | */ |
||
| 6 | package Macbeth.Modules.modLoopback; |
||
| 7 | |||
| 8 | import java.util.*; |
||
| 9 | import Macbeth.System.*; |
||
| 10 | import Macbeth.Utilities.MySystem; |
||
| 11 | import Macbeth.XML.XMLDataHandler; |
||
| 12 | |||
| 13 | /** |
||
| 14 | * Macbeth module for performance loopback tests. |
||
| 15 | * @author Jimmy |
||
| 16 | */ |
||
| 17 | public class modLoopback extends MbModule { |
||
| 18 | |||
| 19 | private int nrPacketBounces = 0; |
||
| 20 | |||
| 21 | /** |
||
| 22 | * Creates a new instance of modLoopback. |
||
| 23 | */ |
||
| 24 | public modLoopback() { |
||
| 25 | //construct MbModule |
||
| 26 | super(); |
||
| 27 | //register our packet data handler |
||
| 28 | setPacketDataHandler(new PacketDataHandler()); |
||
| 29 | //we have a html-interface, so lets register it |
||
| 30 | setHTMLInterface(new HTMLInterface()); |
||
| 31 | } |
||
| 32 | |||
| 33 | /** |
||
| 34 | * Gets the name of the component. |
||
| 35 | * @return The name of the component. |
||
| 36 | */ |
||
| 37 | public String name() { |
||
| 38 | return "Loopback"; |
||
| 39 | } |
||
| 40 | |||
| 41 | /** |
||
| 42 | * Gets the description of the component. |
||
| 43 | * @return The description of the component. |
||
| 44 | */ |
||
| 45 | public String description() { |
||
| 46 | return "Simple loopback test module"; |
||
| 47 | } |
||
| 48 | |||
| 49 | /** |
||
| 50 | * This method sets default values on all _required_ data |
||
| 51 | * fields in the data repository. |
||
| 52 | */ |
||
| 53 | protected void initDataFields(){ |
||
| 54 | //this module doesn't require any data fields |
||
| 55 | } |
||
| 56 | |||
| 57 | /** |
||
| 58 | * Starts up this module. |
||
| 59 | */ |
||
| 60 | public void startup() throws MbStartupException { |
||
| 61 | //start up MbModule |
||
| 62 | super.startup(); |
||
| 63 | MbPacket p = new MbPacket(); |
||
| 64 | p.setContents("<returntosource/>"); |
||
| 65 | p.setDestination(new MbLocation("self",name())); |
||
| 66 | for (int i=0; i<1000; i++) { |
||
| 67 | sendPacket(p); |
||
| 68 | } |
||
| 69 | } |
||
| 70 | |||
| 71 | /** |
||
| 72 | * Shuts down this module. |
||
| 73 | */ |
||
| 74 | public void shutdown() { |
||
| 75 | //shut down MbModule |
||
| 76 | super.shutdown(); |
||
| 77 | } |
||
| 78 | |||
| 79 | /** |
||
| 80 | * A HTML-interface for this module. |
||
| 81 | */ |
||
| 82 | private class HTMLInterface implements MbHTMLInterface { |
||
| 83 | /** |
||
| 84 | * Retreives the full code for your HTML-page. This is |
||
| 85 | * formatted as plain text and must be valid HTML-code. |
||
| 86 | * @return Full HTML-code for the page. |
||
| 87 | */ |
||
| 88 | public String getHTMLPage() { |
||
| 89 | String s = "<html><body>" + MySystem.lineBreak; |
||
| 90 | s += "<h1>Loopback module</h1>" + MySystem.lineBreak; |
||
| 91 | s += "<p>This module sends packets to itself in order to put kernel on heavy workload</p>" + MySystem.lineBreak; |
||
| 92 | s += "<p>So far, a total of <b>" + Integer.toString(nrPacketBounces) + "</b> packets have been bounced back and forth to kernel"; |
||
| 93 | s += "</p></body></html>"; |
||
| 94 | return s; |
||
| 95 | } |
||
| 96 | |||
| 97 | /** |
||
| 98 | * This method is invoked when a link is pressed on your |
||
| 99 | * HTML-page. |
||
| 100 | * @param href The href-attribute of the link. |
||
| 101 | */ |
||
| 102 | public void linkPressed(String href) { |
||
| 103 | _info.println("Link pressed: " + href); |
||
| 104 | } |
||
| 105 | } |
||
| 106 | |||
| 107 | /** |
||
| 108 | * Takes care of XML-data found in incoming packets. |
||
| 109 | */ |
||
| 110 | private class PacketDataHandler implements XMLDataHandler { |
||
| 111 | /** |
||
| 112 | * Called when start of a new element is found in the XML-data. |
||
| 113 | * Ex: <name attr1="value1" attr2="value2"> |
||
| 114 | * Element name would then be "name" and attribute list |
||
| 115 | * would contain "value1" and "value2" mapped to the attribute |
||
| 116 | * names "attr1" and "attr2". |
||
| 117 | * @param element The name of the element. |
||
| 118 | * @param attributes The element attributes. |
||
| 119 | */ |
||
| 120 | public void XMLstartElement(String element, HashMap attributes) { |
||
| 121 | /** |
||
| 122 | * Ex: <returntosource/> |
||
| 123 | * Tells us to return this packet to where it came from. |
||
| 124 | */ |
||
| 125 | if (element.equals("returntosource")) { |
||
| 126 | MbPacket p = currentPacket; |
||
| 127 | p.setDestinationModule(p.getSource().getModule()); |
||
| 128 | p.setDestinationKernel("self"); |
||
| 129 | sendPacket(p); |
||
| 130 | nrPacketBounces++; |
||
| 131 | } |
||
| 132 | } |
||
| 133 | |||
| 134 | public void XMLendElement(String element) {} |
||
| 135 | public void XMLelementData(String data) {} |
||
| 136 | public void XMLdocumentStart() {} |
||
| 137 | public void XMLdocumentEnd() {} |
||
| 138 | } |
||
| 139 | } |