📄 javistrace.java
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -