javistrace.java
来自「The Java Network Simulator is a Java imp」· Java 代码 · 共 135 行
JAVA
135 行
package jns.trace;
import jns.Simulator;
import jns.element.*;
import jns.element.Element;
import jns.element.Link;
import jns.element.Node;
import jns.util.Preferences;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.zip.GZIPOutputStream;
public class JavisTrace extends Trace
{
private Hashtable m_handlers;
private BufferedWriter m_writer;
/**
Create a new Javis trace object that will write to the file with the
supplied name. If the name ends with ".gz", then the output will be
written in compressed form (Javis is capable of reading compressed
input, NAM isn't, so beware).
Compressed output is recommended because trace-files do get big.
*/
public JavisTrace(String filename) throws IOException
{
super();
m_handlers = new Hashtable();
registerHandler("LinkEvent", new JavisLinkHandler());
registerHandler("HopEvent", new JavisPacketHandler());
registerHandler("ReceiveEvent", new JavisPacketHandler());
registerHandler("EnqueueEvent", new JavisPacketHandler());
registerHandler("DequeueEvent", new JavisPacketHandler());
registerHandler("LinkDropEvent", new JavisPacketHandler());
registerHandler("QueueDropEvent", new JavisPacketHandler());
if(filename.endsWith(".gz"))
m_writer = new BufferedWriter(new OutputStreamWriter(
new GZIPOutputStream(new FileOutputStream(filename))));
else
m_writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(filename)));
}
public void writePreamble() throws IOException
{
// Write a little comment at the beginning
m_writer.write("# Trace file generated by JNS Version " +
Preferences.VERSION + ".");
m_writer.newLine();
// Now write the initial network configuration
Enumeration e = Simulator.getInstance().enumerateElements();
while(e.hasMoreElements())
{
Element curelement = (Element) e.nextElement();
// I don't see how to get around instanceof. We could add functions to
// Node and Link, but that would make them Javis specific. I'll leave
// it like this.
if(curelement instanceof Node)
{
// TODO: Determine correct node ID from IP address. there is no quick
// fix, DON'T HACK IT!
Node node = (Node) curelement;
m_writer.write("n -t * ");
m_writer.write("-a " + node.getNumber() + " ");
m_writer.write("-s " + node.getNumber() + " ");
m_writer.write("-S UP -v circle -c black");
m_writer.newLine();
}
else if(curelement instanceof Link)
{
Link link = (Link) curelement;
m_writer.write("l -t * ");
m_writer.write("-s " +
link.getOutgoingInterface().getNode().getNumber() +
" ");
m_writer.write("-d " +
link.getIncomingInterface().getNode().getNumber() +
" ");
m_writer.write("-S UP ");
m_writer.write("-r " + link.getBandwidth() + " ");
m_writer.write("-D " + link.getDelay() + " ");
m_writer.newLine();
}
}
}
public void registerHandler(String eventname, JavisHandler handler)
{
m_handlers.put(eventname, handler);
}
public void handleEvent(Event e) throws IOException
{
JavisHandler handler = (JavisHandler) m_handlers.get(e.getName());
if(handler != null)
handler.handleEvent(e, m_writer);
}
public void writePostamble() throws IOException
{
m_writer.close();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?