📄 simparamtcp.java
字号:
}
private class DialogListener implements ActionListener,
ListSelectionListener {
public void valueChanged(ListSelectionEvent e) {
}
public void actionPerformed(ActionEvent e) {
String command=e.getActionCommand();
if(command.equals("TCP Properties...")) {
PropDialogListener listener=new PropDialogListener();
listener.dialog=new JDialog(theGUI.getMainFrame(),"TCP Properties",true);
listener.dialog.getContentPane().setLayout(new BoxLayout(
listener.dialog.getContentPane(),BoxLayout.Y_AXIS));
JPanel aPanel=new JPanel();
aPanel.add(new JLabel("Processing delay (usecs):"));
aPanel.add(listener.txtDelay=new JTextField(String.valueOf(tcp_delay),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("Delay variation (usecs):"));
aPanel.add(listener.txtDelayvar=new JTextField(String.valueOf(tcp_delayvar),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("Max window size (bytes):"));
aPanel.add(listener.txtMaxwin=new JTextField(String.valueOf(tcp_maxwin),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("Max segment size (bytes):"));
aPanel.add(listener.txtMaxseg=new JTextField(String.valueOf(tcp_maxseg),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("RTT Alpha (~0.125):"));
aPanel.add(listener.txtAlpha=new JTextField(String.valueOf(rtt_alpha),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("RTT Beta (~0.25):"));
aPanel.add(listener.txtBeta=new JTextField(String.valueOf(rtt_beta),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("RTT Lower Bound (seconds):"));
aPanel.add(listener.txtLBound=new JTextField(String.valueOf(rtt_lbound),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("RTT Upper Bound (seconds):"));
aPanel.add(listener.txtUBound=new JTextField(String.valueOf(rtt_ubound),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("TCP Congestion Control:"));
String [] tags=new String[3];
tags[0]="Standard";
tags[1]="Tahoe";
tags[2]="Reno";
aPanel.add(listener.cmbTCPCC=new JComboBox(tags));
listener.cmbTCPCC.setSelectedIndex(tcp_cc);
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(new JLabel("Logging every (ticks) (e.g. 1, 100):"));
aPanel.add(listener.txtLogFac=new JTextField(String.valueOf(log_factor),7));
listener.dialog.getContentPane().add(aPanel);
aPanel=new JPanel();
aPanel.add(listener.btnOK=new JButton("OK"));
aPanel.add(listener.btnCancel=new JButton("Cancel"));
listener.dialog.getContentPane().add(aPanel);
listener.dialog.getRootPane().setDefaultButton(listener.btnOK);
listener.btnOK.addActionListener(listener);
listener.btnCancel.addActionListener(listener);
listener.dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
listener.dialog.pack();
Dimension ddim=listener.dialog.getPreferredSize();
Dimension sdim=Toolkit.getDefaultToolkit().getScreenSize();
listener.dialog.setLocation((sdim.width-ddim.width)/2,(sdim.height-ddim.height)/2);
listener.dialog.show();
}
else if(command.equals("Copy Properties to All")) {
//well, need to find all SimParamTCP in the topology and update all of them!
java.util.List components=getOwner().getSim().getSimComponents();
for(int i=0;i<components.size();i++) {
SimComponent comp=(SimComponent)components.get(i);
SimParameter [] parms=comp.getParameters();
for(int j=0;j<parms.length;j++) {
if(parms[j]==me()) continue; //skip myself
if(parms[j] instanceof SimParamTCP) {
SimParamTCP thattcp=(SimParamTCP)parms[j];
thattcp.tcp_delay=tcp_delay;
thattcp.tcp_delayvar=tcp_delayvar;
thattcp.tcp_maxwin=tcp_maxwin;
thattcp.tcp_maxseg=tcp_maxseg;
thattcp.rtt_alpha=rtt_alpha;
thattcp.rtt_beta=rtt_beta;
thattcp.rtt_lbound=rtt_lbound;
thattcp.rtt_ubound=rtt_ubound;
thattcp.tcp_cc=tcp_cc;
thattcp.log_factor=log_factor;
}
}
}
}
else if(command.equals("Close")) {
ctableDialog.dispose();
}
}
}
//helper for monitoring changes in the simulation (e.g. to refresh table)
private void checkLinks() {
//check if the owner is still there...
if(!getOwner().getSim().getSimComponents().contains(getOwner())) {
if(ctableDialog!=null) ctableDialog.dispose();
}
}
//the table model
private class MyTableModel extends javax.swing.table.AbstractTableModel {
public int getRowCount() {
return tcp.connectionCount();
}
public int getColumnCount() {
return 5;
}
public Object getValueAt(int row,int col) {
int valueip;
String ip;
switch(col) {
case 0:
valueip=tcp.queryTCB_srcip(row);
ip=String.valueOf((valueip>>24)&0xff)+".";
ip+=String.valueOf((valueip>>16)&0xff)+".";
ip+=String.valueOf((valueip>>8)&0xff)+".";
ip+=String.valueOf(valueip&0xff);
return ip;
case 1:
return String.valueOf(tcp.queryTCB_srcport(row));
case 2:
valueip=tcp.queryTCB_destip(row);
ip=String.valueOf((valueip>>24)&0xff)+".";
ip+=String.valueOf((valueip>>16)&0xff)+".";
ip+=String.valueOf((valueip>>8)&0xff)+".";
ip+=String.valueOf(valueip&0xff);
return ip;
case 3:
return String.valueOf(tcp.queryTCB_destport(row));
case 4:
String stat=tcp.queryTCBStatus(row);
if(stat==null) return "N/A";
return stat;
}
return null;
}
public String getColumnName(int col) {
switch(col) {
case 0: return "Source IP";
case 1: return "Source Port";
case 2: return "Dest IP";
case 3: return "Dest Port";
case 4: return "Status";
}
return "N/A";
}
}
private JComponent createNewCTableDialog() {
//the listener
DialogListener listener=new DialogListener();
//prepare the table
table=new JTable(new MyTableModel());
JScrollPane scrollPane=new JScrollPane(table);
table.setPreferredScrollableViewportSize(new Dimension(400,100));
table.getSelectionModel().addListSelectionListener(listener);
table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//prepare buttons panel
JPanel compPanel=new JPanel();
JButton btnProp=new JButton("TCP Properties...");
btnProp.addActionListener(listener);
compPanel.add(btnProp);
JButton btnCopy=new JButton("Copy Properties to All");
btnCopy.addActionListener(listener);
compPanel.add(btnCopy);
JButton btnClose=new JButton("Close");
btnClose.addActionListener(listener);
compPanel.add(btnClose);
//now the outer panel
JPanel outerpane=new JPanel();
GridBagLayout gl=new GridBagLayout();
outerpane.setLayout(gl);
GridBagConstraints gc=new GridBagConstraints();
gc.fill=GridBagConstraints.BOTH;
gc.gridx=0; gc.gridy=0;
gl.setConstraints(compPanel,gc);
outerpane.add(compPanel);
gc.gridy=1; gc.weightx=1; gc.weighty=1;
gl.setConstraints(scrollPane,gc);
outerpane.add(scrollPane);
return outerpane;
}
public void actionPerformed(ActionEvent e) {
if(ctableDialog==null) {
ctableDialog=new SimDialog(theGUI.getMainFrame(),getOwner().getName()
+" - "+getName(),getOwner().getSim(),theGUI) {
public void componentsChanged() { checkLinks(); }
};
ctableDialog.getContentPane().add(createNewCTableDialog());
ctableDialog.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
ctableDialog=null;
}
});
ctableDialog.pack();
Dimension dsize=ctableDialog.getSize();
Dimension scrsize=Toolkit.getDefaultToolkit().getScreenSize();
ctableDialog.setLocation((scrsize.width-dsize.width)/2,(scrsize.height-dsize.height)/2);
ctableDialog.show();
}
else
ctableDialog.requestFocus();
}
private SimParamTCP me() {
return this;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -