diff --git a/clients/rtds/GTNETv2_SKT/Standard_2pt_udp_loopback/GTNETSKT1_to.txt b/clients/rtds/gtnet_skt/Standard_2pt_udp_loopback/GTNETSKT1_to.txt similarity index 91% rename from clients/rtds/GTNETv2_SKT/Standard_2pt_udp_loopback/GTNETSKT1_to.txt rename to clients/rtds/gtnet_skt/Standard_2pt_udp_loopback/GTNETSKT1_to.txt index 7ae06952c..9abf948ca 100644 --- a/clients/rtds/GTNETv2_SKT/Standard_2pt_udp_loopback/GTNETSKT1_to.txt +++ b/clients/rtds/gtnet_skt/Standard_2pt_udp_loopback/GTNETSKT1_to.txt @@ -1,5 +1,5 @@ -POINT0 int -POINT1 int -POINT2 int -POINT3 int -POINT4 float +POINT0 int +POINT1 int +POINT2 int +POINT3 int +POINT4 float diff --git a/clients/rtds/GTNETv2_SKT/Standard_2pt_udp_loopback_gtsync/GTNET_SKT_TCP_GUI.java b/clients/rtds/gtnet_skt/Standard_2pt_udp_loopback/GTNET_SKT_TCP_GUI.java similarity index 97% rename from clients/rtds/GTNETv2_SKT/Standard_2pt_udp_loopback_gtsync/GTNET_SKT_TCP_GUI.java rename to clients/rtds/gtnet_skt/Standard_2pt_udp_loopback/GTNET_SKT_TCP_GUI.java index 2f56601d7..950a4dcf1 100644 --- a/clients/rtds/GTNETv2_SKT/Standard_2pt_udp_loopback_gtsync/GTNET_SKT_TCP_GUI.java +++ b/clients/rtds/gtnet_skt/Standard_2pt_udp_loopback/GTNET_SKT_TCP_GUI.java @@ -1,1543 +1,1543 @@ -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Font; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.ServerSocket; -import java.net.Socket; -import java.net.SocketException; -import java.net.UnknownHostException; -import java.nio.ByteBuffer; -import java.util.Vector; - -import javax.swing.BorderFactory; -import javax.swing.DefaultCellEditor; -import javax.swing.JComboBox; -import javax.swing.JFileChooser; -import javax.swing.JFormattedTextField; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextArea; -import javax.swing.JTextField; -import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.border.CompoundBorder; -import javax.swing.border.EmptyBorder; -import javax.swing.border.TitledBorder; -import javax.swing.table.AbstractTableModel; -import javax.swing.table.JTableHeader; -import javax.swing.table.TableCellEditor; - -/* - * NOTE: GTNET_SKT_TCP_GUI was made as an example TCP client/server - * The code is given as an example and is not intended to be - * part of RSCAD support. Questions will not be answered. - */ - -public class GTNET_SKT_TCP_GUI extends JFrame -{ - /** - * - */ - private static final long serialVersionUID = -6325275282238226823L; - - private static boolean DEBUG = false; - - static TCP_ListenTask serverProcess; - static TCP_ConnectTask clientProcess; - //UDP Server - static JTextField jTextFieldLocalIp; - static JTextField jTextFieldLocalPort; - static JLabel lblLocalIp; - static JLabel lblLocalPort; - public static SoftEdgeButton btnStart; - public static SoftEdgeButton btnTCP; - public static SoftEdgeButton btnQuit; - public static SoftEdgeButton btnAddIp; - public static SoftEdgeButton btnDeleteIp; - public static SoftEdgeButton btnSaveIp; - public static SoftEdgeButton btnLoadIp; - static JTable IPtable; - //UDP Client - static JTextField jTextFieldRemoteIp; - static JTextField jTextFieldRemotePort; - static JLabel lblRemoteIp; - static JLabel lblRemotePort; - - public static SoftEdgeButton btnSend; - static JTable OPtable; - private static JPanel MainPnl; - - final static int GTNETSKT_MAX_INPUTS = 300; - - public static String[] gtnetSktInputName = new String[GTNETSKT_MAX_INPUTS]; - public static String[] gtnetSktInputType = new String[GTNETSKT_MAX_INPUTS]; - static int ival[]; - static float fval[]; - public static String[] gtnetSktOutputName = new String[GTNETSKT_MAX_INPUTS]; - public static String[] gtnetSktOutputType = new String[GTNETSKT_MAX_INPUTS]; - - static int numInPoints = 0; - static int numOutPoints = 0; - static InetAddress host = null; - static byte[] inBuf = null; - static byte[] outBuf = null; - static String msg = null; - public static TableCellEditor editorInt; - public static TableCellEditor editorFloat; - protected static JTextArea textArea; - // private final static String newline = "\r\n"; - private final static String newline = System.getProperty("line.separator");//This will retrieve line separator - private final static String delim = "\t";//","; // tab delimited file - - ServerSocket serverSocket = null; - Socket connectionSocket =null; - static GTNET_SKT_TCP_GUI main_inst; - - public static void main(String args[]) - { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - main_inst = new GTNET_SKT_TCP_GUI(); - main_inst.setVisible(true); - } - }); - - } - - public GTNET_SKT_TCP_GUI() - { - super("RTDS GTNET-SKT TCP Server and Client"); - - try - { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } - catch(Exception e) - { - - } - - JFormattedTextField ftf[] = new JFormattedTextField[2]; - ftf[0] = new JFormattedTextField(new Integer(90032221)); - ftf[1] = new JFormattedTextField(java.text.NumberFormat.getInstance()); - ftf[1].setValue(new Float(0.0)); - editorInt = new DefaultCellEditor(ftf[0]); - editorFloat = new DefaultCellEditor(ftf[1]); - - Object options[] = { "int", "float" }; - JComboBox comboBox = new JComboBox(options); - comboBox.setMaximumRowCount(4); - TableCellEditor editorType = new DefaultCellEditor(comboBox); - - // The Server Table - String columnNames[] = {"Point #","Variable","Type","Value"}; - IPtable = new JTable(new InputTableModel(columnNames));//Create JTable - IPtable.setCellSelectionEnabled(true); - IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - IPtable.setFillsViewportHeight(true); - IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - IPtable.setRowSelectionAllowed(true); - IPtable.setColumnSelectionAllowed(false); - IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - JTableHeader header = IPtable.getTableHeader(); - header.setBackground(Color.LIGHT_GRAY); - IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - // The Client Table - OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable - OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - OPtable.setFillsViewportHeight(true); - OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - OPtable.setRowSelectionAllowed(true); - OPtable.setColumnSelectionAllowed(false); - OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); - OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - setup(); // The GUI - - setSize(520,745); - setLayout(new FlowLayout()); - setDefaultCloseOperation(EXIT_ON_CLOSE); - this.getContentPane().add(MainPnl); - setVisible(true); - - } - - public static void setup() - { - try { - host = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - - // Main Panel - MainPnl = new JPanel(new GridBagLayout()); - GridBagConstraints gbc = new GridBagConstraints(); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.gridwidth = 1; - MainPnl.add(createTCP_Pnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 1; - gbc.gridwidth = 1; - MainPnl.add(createInputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 2; - gbc.gridwidth = 1; - MainPnl.add(createOutputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 3; - gbc.gridwidth = 1; - MainPnl.add(createMsgPnl(), gbc); - - } - - private static JPanel createTCP_Pnl() { - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Communication Mode"); - JPanel pnlTCP = new JPanel(new GridBagLayout()); - pnlTCP.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(2,2,2,2))); - Object options[] = { "Client", "Server" }; - final JComboBox comboBox = new JComboBox(options); - btnTCP= new SoftEdgeButton("Connect"); - - lblLocalIp = new JLabel("Local Server, IP Address:"); - jTextFieldLocalIp = new JTextField("", 10); - jTextFieldLocalIp.setText(host.getHostAddress()); - jTextFieldLocalIp.setEditable(true); - - lblLocalPort = new JLabel("Port"); - jTextFieldLocalPort = new JTextField("", 6); - jTextFieldLocalPort.setText("12345"); - - jTextFieldLocalIp.setVisible(false); - jTextFieldLocalPort.setVisible(false); - lblLocalIp.setVisible(false); - lblLocalPort.setVisible(false); - - lblRemoteIp = new JLabel("Remote Server, IP Address:"); - jTextFieldRemoteIp = new JTextField("", 9); - jTextFieldRemoteIp.setText(host.getHostAddress()); - if (DEBUG) { - jTextFieldRemoteIp.setText("172.24.9.185"); - } - jTextFieldRemoteIp.setEditable(true); - - lblRemotePort = new JLabel("Port"); - jTextFieldRemotePort = new JTextField("", 5); - jTextFieldRemotePort.setText("12345"); - - - comboBox.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(comboBox.getSelectedIndex()==0) - { - btnTCP.setText("Connect"); - jTextFieldLocalIp.setVisible(false); - jTextFieldLocalPort.setVisible(false); - lblLocalIp.setVisible(false); - lblLocalPort.setVisible(false); - lblRemoteIp.setVisible(true); - jTextFieldRemoteIp.setVisible(true); - lblRemotePort.setVisible(true); - jTextFieldRemotePort.setVisible(true); - } - else - { - btnTCP.setText("Listen"); - jTextFieldLocalIp.setVisible(true); - jTextFieldLocalPort.setVisible(true); - lblLocalIp.setVisible(true); - lblLocalPort.setVisible(true); - lblRemoteIp.setVisible(false); - jTextFieldRemoteIp.setVisible(false); - lblRemotePort.setVisible(false); - jTextFieldRemotePort.setVisible(false); - } - - } - - }); - - btnTCP.addActionListener(new ActionListener() { - @SuppressWarnings("deprecation") - @Override - public void actionPerformed(ActionEvent e) { - if(btnTCP.getText()=="Listen") - { - echo("Server socket opening..."); - try { - serverProcess = new TCP_ListenTask(main_inst , numInPoints); - serverProcess.start(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - - return; - } - if(btnTCP.getText()=="StopServer") - { - btnTCP.setText("Listen"); - btnAddIp.setEnabled(true); - btnDeleteIp.setEnabled(true); - btnSaveIp.setEnabled(true); - btnLoadIp.setEnabled(true); - jTextFieldLocalIp.setEnabled(true); - jTextFieldLocalPort.setEnabled(true); - btnSend.setEnabled(false); - echo("Server socket closed..."); - serverProcess.closeTask(); - serverProcess.stop(); - return; - } - if(btnTCP.getText()=="Connect") - { - echo("Client socket opening..."); - try { - clientProcess = new TCP_ConnectTask(main_inst , numOutPoints); - clientProcess.start(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - return; - } - if(btnTCP.getText()=="StopClient") - { - clientProcess.closeTask(); - echo("Client socket closed..."); - return; - } - } - }); - - GridBagConstraints gbc = new GridBagConstraints(); - JPanel TCPoptions = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - TCPoptions.add(comboBox, gbc); - TCPoptions.add(btnTCP, gbc); - - JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - LocalPanel.add(comboBox, gbc); - LocalPanel.add(btnTCP, gbc); - LocalPanel.add(lblLocalIp, gbc); - LocalPanel.add(jTextFieldLocalIp, gbc); - LocalPanel.add(lblLocalPort, gbc); - LocalPanel.add(jTextFieldLocalPort, gbc); - - JPanel RemotePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - - RemotePanel.add(lblRemoteIp, gbc); - RemotePanel.add(jTextFieldRemoteIp, gbc); - RemotePanel.add(lblRemotePort, gbc); - RemotePanel.add(jTextFieldRemotePort, gbc); - - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 1; - gbc.gridy = 0; - pnlTCP.add(TCPoptions, gbc); - gbc.gridx = 2; - gbc.gridy = 0; - pnlTCP.add(LocalPanel, gbc); - gbc.gridx = 3; - gbc.gridy = 0; - pnlTCP.add(RemotePanel, gbc); - return pnlTCP; - - } - - private static JPanel createInputPointPnl() { - - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Server"); - JPanel pnlPoint = new JPanel(new GridBagLayout()); - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(IPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - btnStart= new SoftEdgeButton("Start"); - btnAddIp = new SoftEdgeButton("Add") ; - btnDeleteIp = new SoftEdgeButton("Delete") ; - btnSaveIp = new SoftEdgeButton("Save Table"); - btnLoadIp = new SoftEdgeButton("Load Table"); - - btnAddIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) - { - if(numInPoints< GTNETSKT_MAX_INPUTS){ - int i = numInPoints++; - InputTableModel a = (InputTableModel) IPtable.getModel(); - gtnetSktInputName[i] = "POINTin" + Integer.toString(i); - gtnetSktInputType[i] = "float"; - Object[] values = {i, gtnetSktInputName[i], gtnetSktInputType[i], ""}; - a.insertData(values); - }else{ - echo("Number of Server Points is at maximum of:" + GTNETSKT_MAX_INPUTS); - } - } - }); - - btnDeleteIp.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(IPtable.getSelectedRow() != -1){ - InputTableModel a = (InputTableModel) IPtable.getModel(); - a.removeRow(IPtable.getSelectedRow()); - numInPoints--; - for (int i=0; i < numInPoints; i++) { - a.setValueAt((Object) i, i, 0); - } - } - } - }); - - btnSaveIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - saveIPTable(); - } - }); - - btnLoadIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - loadIPTable(); - } - }); - - JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - tableButtonPanel.add(btnAddIp, gbc); - tableButtonPanel.add(btnDeleteIp, gbc); - tableButtonPanel.add(btnSaveIp, gbc); - tableButtonPanel.add(btnLoadIp, gbc); - - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 1; - pnlPoint.add(tableButtonPanel, gbc); - - return pnlPoint; - - } - - private static JPanel createOutputPointPnl() { - - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Client"); - - //Points to GTNET-SKT - JPanel pnlPoint = new JPanel(new GridBagLayout()); - - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(OPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - btnSend= new SoftEdgeButton("Send"); - btnSend.setEnabled(false); - SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; - SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; - SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); - SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); - - btnSend.addActionListener(new ActionListener() { - int txCnt = 0; - @Override - public void actionPerformed(ActionEvent e) { - - int size = numOutPoints * 4; - - try { - byte[] buffer = new byte[size]; - ByteBuffer outbuff = ByteBuffer.wrap(buffer); - txCnt++; - for (int i = 0; i> data = new Vector>(); - - public InputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktInputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - int numdecimals = 0; -// int offset = 0; - String tempStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - newValue = newValue.replaceAll(",", ""); - - // check for valid digits, decimal places, and range check - for (int i=0; i < newValue.length(); i++) { - char c = newValue.charAt(i); -// if(c == '-' && i == 0){ -// offset = 1; -// } - if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - } - if (save) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(tempStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col != 2) { - return false; - }else if(btnStart.getText()=="Stop"){ - return false; - } else { - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - class OutputTableModel extends AbstractTableModel { - - /** - * - */ - private static final long serialVersionUID = 8248501194260208975L; - private String[] columnNames; - private Vector> data = new Vector>(); - - public OutputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktOutputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - boolean realok = true; - boolean fracok = true; - int numdecimals = 0; - int offset = 0; - String typeStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - String real = null, frac = null; - newValue = newValue.replaceAll(",", ""); - if(newValue.contains("-")){ - offset = 1; - } - if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal - real = newValue.substring(offset, newValue.indexOf(".")); - frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); - if(real.length()>=10){ - for (int i=0; i < 10; i++) { - char c = real.charAt(i); - if (c > '2' && i == 0) - realok = false; - if (c > '1' && i == 1) - realok = false; - if (c > '4' && i == 2) - realok = false; - if (c > '7' && i == 3) - realok = false; - if (c > '4' && i == 4) - realok = false; - if (c > '8' && i == 5) - realok = false; - if (c > '3' && i == 6) - realok = false; - if (c > '6' && i == 7) - realok = false; - if (c > '4' && i == 8) - realok = false; - if (c > '7' && i == 9 && offset==0) - realok = false; - if (c == '7' && i == 9 && offset==0 && realok){ - if(real.contains("2147483647")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - if (c > '8' && i == 9 && offset==1) // for negative numbers - realok = false; - if (c == '8' && i == 9 && offset==1 && realok){ - if(real.contains("2147483648")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - - } - } - } - - if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ - real = newValue.substring(offset, newValue.length()); - } - if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ - real = newValue.substring(offset, newValue.indexOf(".")); - int i = Math.round(Float.valueOf(newValue)); - newValue = Integer.toString(i); - } - if(real.length()<=10){ - // check for valid digits and maximum range check - for (int i=0; i < real.length(); i++) { - char c = real.charAt(i); - if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - - if(real.length()>=10){ // The check for the maximum value - if (c > '2' && i == 0) - save = false; - if (c > '1' && i == 1) - save = false; - if (c > '4' && i == 2) - save = false; - if (c > '7' && i == 3) - save = false; - if (c > '4' && i == 4) - save = false; - if (c > '8' && i == 5) - save = false; - if (c > '3' && i == 6) - save = false; - if (c > '6' && i == 7) - save = false; - if (c > '4' && i == 8) - save = false; - if (c > '7' && i == 9 && offset==0) - save = false; - if (c > '8' && i == 9 && offset==1) // for negative numbers - save = false; - } - } - } - else - { - save = false; - } - if (save && realok && fracok) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(typeStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col < 1) { - return false; - } else { - if(data.elementAt(row).toString().contains("int")) - { - OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); - }else{ - OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); - } - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - //simple function to initialize parameters from the data file to variables - public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) - { - FileInputStream fileInputStream = null; - InputStreamReader inputStreamReader = null; - BufferedReader bufferedReader = null; - String[] var = null; - int points = 0; - - try { - String[] result = fileChooser(false,fname); - if (result != null){ - fileInputStream = new FileInputStream(result[1]); - inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); - bufferedReader = new BufferedReader(inputStreamReader); - - // use BufferedReader here - String s; - - while((s = bufferedReader.readLine()) != null){ - var = s.split(delim);//\t ,\n\r - gtnetSktName[points] = var[0]; - gtnetSktType[points] = var[1]; - points++; - } - } - } - catch (IOException e) { - e.printStackTrace(); - } - finally - { - try { - if (fileInputStream != null){ - fileInputStream.close(); - inputStreamReader.close(); - bufferedReader.close(); - } - } - catch (IOException e) { - e.printStackTrace(); - } - } - return points; - } - - //simple function to fill data to table - public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - OutputTableModel a = (OutputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - if(gtnetSktType[i].contains("int")){ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; - a.insertData(values); - }else{ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; - a.insertData(values); - } - } - - } - - //simple function to fill data to table - public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - InputTableModel a = (InputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; - a.insertData(values); - } - - } - - - //simple function to echo data to terminal - public static void echo(String msg) - { - if (DEBUG) { - System.out.println(msg); - } - - textArea.append(msg + newline); - - //Make sure the new text is visible, even if there - //was a selection in the text area. - textArea.setCaretPosition(textArea.getDocument().getLength()); - - } - - //simple function to save the file name and path - private static String[] fileChooser(boolean folderOnly, String fname) - { - String[] filePath = null; -// JFileChooser c = new JFileChooser(); - myJFileChooser = new JFileChooser(); - File myfile = new File(fname); - - if(folderOnly) - { - myJFileChooser.setDialogTitle("Select Folder..."); - myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File folder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = ""; - filePath[1] = folder.getAbsolutePath(); - } - } - else - { - myJFileChooser.setDialogTitle("Select File"); - myJFileChooser.setSelectedFile(myfile); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File fileFolder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = myJFileChooser.getSelectedFile().getName(); - filePath[1] = fileFolder.getAbsolutePath(); - } - } - - return filePath; - }//end saveAsChooser - - public static byte[] convertToByteArray(int value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putInt(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(float value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putFloat(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(byte value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.put(value); - return buffer.array(); - } - -} // End of Class - -class TCP_ListenTask extends Thread -{ - private volatile boolean stop = false; - int npoints = 0; - int ival[] = null; - float fval[] = null; -// ServerSocket serverSocket = null; -// Socket connectionSocket = null; - GTNET_SKT_TCP_GUI myskt = null; - - public TCP_ListenTask(GTNET_SKT_TCP_GUI myinst, int numPoints) throws SocketException { - this.npoints = numPoints; - ival = new int[numPoints]; - fval = new float[numPoints]; - this.myskt = myinst; - } - public void closeTask() { - try { - stop = true; - myskt.serverSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - public void run() { - while (!stop) { - ByteBuffer buf; - try - { - //1. creating a server socket, parameter is local port number - myskt.serverSocket = new ServerSocket(); - myskt.serverSocket.setReuseAddress(true); - // inSocket.setSoTimeout(10000); // DO NOT USE TIMEOUTS - myskt.connectionSocket = new Socket(); - - String ipAddr = GTNET_SKT_TCP_GUI.jTextFieldLocalIp.getText(); - int ipPort = Integer.parseInt(GTNET_SKT_TCP_GUI.jTextFieldLocalPort.getText()); - myskt.serverSocket.bind(new InetSocketAddress(ipAddr, ipPort)); - - //2. Wait for an incoming data - GTNET_SKT_TCP_GUI.echo("Server socket created. Waiting for incoming data..."); - - GTNET_SKT_TCP_GUI.btnTCP.setText("StopServer"); - GTNET_SKT_TCP_GUI.btnAddIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnDeleteIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnSaveIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnLoadIp.setEnabled(false); - GTNET_SKT_TCP_GUI.jTextFieldLocalIp.setEnabled(false); - GTNET_SKT_TCP_GUI.jTextFieldLocalPort.setEnabled(false); - - //communication loop - int rxCnt = 0; - while (!(myskt.serverSocket.isClosed())) - { - rxCnt++; - - myskt.connectionSocket = myskt.serverSocket.accept(); - GTNET_SKT_TCP_GUI.echo("Connection received from " + myskt.connectionSocket.getInetAddress().getHostName() + " : " + myskt.connectionSocket.getPort()); - GTNET_SKT_TCP_GUI.btnSend.setEnabled(true); - InputStream insktStream = myskt.connectionSocket.getInputStream(); - byte[] buff = new byte[(npoints) * 4]; // Buffer - int num = -1; // Bytes read - while( (num = insktStream.read(buff)) >= 0 ){ // Not EOS yet - // System.out.print(new String(buff,0,num) ); // Echo to console - // out.write( buff, 0, num ); // Echo to source - // out.flush(); // Flush stream - if (num==(npoints) * 4) - insktStream.close(); // This is necessary in Server mode to read new packets - break; - } // end while - if (num==(npoints) * 4){ - buf = ByteBuffer.wrap(buff); - for (int i = 0; i= 0 ){ // Not EOS yet -// // System.out.print(new String(buff,0,num) ); // Echo to console -// // out.write( buff, 0, num ); // Echo to source -// // out.flush(); // Flush stream -// if (num==(npoints) * 4) -// // inskt.close(); -// break; -// } // end while - - if (num==(npoints) * 4){ - ByteBuffer buf = ByteBuffer.wrap(buff); - for (int i = 0; i comboBox = new JComboBox(options); + comboBox.setMaximumRowCount(4); + TableCellEditor editorType = new DefaultCellEditor(comboBox); + + // The Server Table + String columnNames[] = {"Point #","Variable","Type","Value"}; + IPtable = new JTable(new InputTableModel(columnNames));//Create JTable + IPtable.setCellSelectionEnabled(true); + IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + IPtable.setFillsViewportHeight(true); + IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + IPtable.setRowSelectionAllowed(true); + IPtable.setColumnSelectionAllowed(false); + IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + JTableHeader header = IPtable.getTableHeader(); + header.setBackground(Color.LIGHT_GRAY); + IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + // The Client Table + OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable + OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + OPtable.setFillsViewportHeight(true); + OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + OPtable.setRowSelectionAllowed(true); + OPtable.setColumnSelectionAllowed(false); + OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); + OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + setup(); // The GUI + + setSize(520,745); + setLayout(new FlowLayout()); + setDefaultCloseOperation(EXIT_ON_CLOSE); + this.getContentPane().add(MainPnl); + setVisible(true); + + } + + public static void setup() + { + try { + host = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + // Main Panel + MainPnl = new JPanel(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.gridwidth = 1; + MainPnl.add(createTCP_Pnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 1; + gbc.gridwidth = 1; + MainPnl.add(createInputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 2; + gbc.gridwidth = 1; + MainPnl.add(createOutputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 3; + gbc.gridwidth = 1; + MainPnl.add(createMsgPnl(), gbc); + + } + + private static JPanel createTCP_Pnl() { + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Communication Mode"); + JPanel pnlTCP = new JPanel(new GridBagLayout()); + pnlTCP.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(2,2,2,2))); + Object options[] = { "Client", "Server" }; + final JComboBox comboBox = new JComboBox(options); + btnTCP= new SoftEdgeButton("Connect"); + + lblLocalIp = new JLabel("Local Server, IP Address:"); + jTextFieldLocalIp = new JTextField("", 10); + jTextFieldLocalIp.setText(host.getHostAddress()); + jTextFieldLocalIp.setEditable(true); + + lblLocalPort = new JLabel("Port"); + jTextFieldLocalPort = new JTextField("", 6); + jTextFieldLocalPort.setText("12345"); + + jTextFieldLocalIp.setVisible(false); + jTextFieldLocalPort.setVisible(false); + lblLocalIp.setVisible(false); + lblLocalPort.setVisible(false); + + lblRemoteIp = new JLabel("Remote Server, IP Address:"); + jTextFieldRemoteIp = new JTextField("", 9); + jTextFieldRemoteIp.setText(host.getHostAddress()); + if (DEBUG) { + jTextFieldRemoteIp.setText("172.24.9.185"); + } + jTextFieldRemoteIp.setEditable(true); + + lblRemotePort = new JLabel("Port"); + jTextFieldRemotePort = new JTextField("", 5); + jTextFieldRemotePort.setText("12345"); + + + comboBox.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(comboBox.getSelectedIndex()==0) + { + btnTCP.setText("Connect"); + jTextFieldLocalIp.setVisible(false); + jTextFieldLocalPort.setVisible(false); + lblLocalIp.setVisible(false); + lblLocalPort.setVisible(false); + lblRemoteIp.setVisible(true); + jTextFieldRemoteIp.setVisible(true); + lblRemotePort.setVisible(true); + jTextFieldRemotePort.setVisible(true); + } + else + { + btnTCP.setText("Listen"); + jTextFieldLocalIp.setVisible(true); + jTextFieldLocalPort.setVisible(true); + lblLocalIp.setVisible(true); + lblLocalPort.setVisible(true); + lblRemoteIp.setVisible(false); + jTextFieldRemoteIp.setVisible(false); + lblRemotePort.setVisible(false); + jTextFieldRemotePort.setVisible(false); + } + + } + + }); + + btnTCP.addActionListener(new ActionListener() { + @SuppressWarnings("deprecation") + @Override + public void actionPerformed(ActionEvent e) { + if(btnTCP.getText()=="Listen") + { + echo("Server socket opening..."); + try { + serverProcess = new TCP_ListenTask(main_inst , numInPoints); + serverProcess.start(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + + return; + } + if(btnTCP.getText()=="StopServer") + { + btnTCP.setText("Listen"); + btnAddIp.setEnabled(true); + btnDeleteIp.setEnabled(true); + btnSaveIp.setEnabled(true); + btnLoadIp.setEnabled(true); + jTextFieldLocalIp.setEnabled(true); + jTextFieldLocalPort.setEnabled(true); + btnSend.setEnabled(false); + echo("Server socket closed..."); + serverProcess.closeTask(); + serverProcess.stop(); + return; + } + if(btnTCP.getText()=="Connect") + { + echo("Client socket opening..."); + try { + clientProcess = new TCP_ConnectTask(main_inst , numOutPoints); + clientProcess.start(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + return; + } + if(btnTCP.getText()=="StopClient") + { + clientProcess.closeTask(); + echo("Client socket closed..."); + return; + } + } + }); + + GridBagConstraints gbc = new GridBagConstraints(); + JPanel TCPoptions = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + TCPoptions.add(comboBox, gbc); + TCPoptions.add(btnTCP, gbc); + + JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + LocalPanel.add(comboBox, gbc); + LocalPanel.add(btnTCP, gbc); + LocalPanel.add(lblLocalIp, gbc); + LocalPanel.add(jTextFieldLocalIp, gbc); + LocalPanel.add(lblLocalPort, gbc); + LocalPanel.add(jTextFieldLocalPort, gbc); + + JPanel RemotePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + + RemotePanel.add(lblRemoteIp, gbc); + RemotePanel.add(jTextFieldRemoteIp, gbc); + RemotePanel.add(lblRemotePort, gbc); + RemotePanel.add(jTextFieldRemotePort, gbc); + + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 1; + gbc.gridy = 0; + pnlTCP.add(TCPoptions, gbc); + gbc.gridx = 2; + gbc.gridy = 0; + pnlTCP.add(LocalPanel, gbc); + gbc.gridx = 3; + gbc.gridy = 0; + pnlTCP.add(RemotePanel, gbc); + return pnlTCP; + + } + + private static JPanel createInputPointPnl() { + + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Server"); + JPanel pnlPoint = new JPanel(new GridBagLayout()); + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(IPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + btnStart= new SoftEdgeButton("Start"); + btnAddIp = new SoftEdgeButton("Add") ; + btnDeleteIp = new SoftEdgeButton("Delete") ; + btnSaveIp = new SoftEdgeButton("Save Table"); + btnLoadIp = new SoftEdgeButton("Load Table"); + + btnAddIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + if(numInPoints< GTNETSKT_MAX_INPUTS){ + int i = numInPoints++; + InputTableModel a = (InputTableModel) IPtable.getModel(); + gtnetSktInputName[i] = "POINTin" + Integer.toString(i); + gtnetSktInputType[i] = "float"; + Object[] values = {i, gtnetSktInputName[i], gtnetSktInputType[i], ""}; + a.insertData(values); + }else{ + echo("Number of Server Points is at maximum of:" + GTNETSKT_MAX_INPUTS); + } + } + }); + + btnDeleteIp.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(IPtable.getSelectedRow() != -1){ + InputTableModel a = (InputTableModel) IPtable.getModel(); + a.removeRow(IPtable.getSelectedRow()); + numInPoints--; + for (int i=0; i < numInPoints; i++) { + a.setValueAt((Object) i, i, 0); + } + } + } + }); + + btnSaveIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + saveIPTable(); + } + }); + + btnLoadIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + loadIPTable(); + } + }); + + JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + tableButtonPanel.add(btnAddIp, gbc); + tableButtonPanel.add(btnDeleteIp, gbc); + tableButtonPanel.add(btnSaveIp, gbc); + tableButtonPanel.add(btnLoadIp, gbc); + + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 1; + pnlPoint.add(tableButtonPanel, gbc); + + return pnlPoint; + + } + + private static JPanel createOutputPointPnl() { + + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Client"); + + //Points to GTNET-SKT + JPanel pnlPoint = new JPanel(new GridBagLayout()); + + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(OPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + btnSend= new SoftEdgeButton("Send"); + btnSend.setEnabled(false); + SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; + SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; + SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); + SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); + + btnSend.addActionListener(new ActionListener() { + int txCnt = 0; + @Override + public void actionPerformed(ActionEvent e) { + + int size = numOutPoints * 4; + + try { + byte[] buffer = new byte[size]; + ByteBuffer outbuff = ByteBuffer.wrap(buffer); + txCnt++; + for (int i = 0; i> data = new Vector>(); + + public InputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktInputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + int numdecimals = 0; +// int offset = 0; + String tempStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + newValue = newValue.replaceAll(",", ""); + + // check for valid digits, decimal places, and range check + for (int i=0; i < newValue.length(); i++) { + char c = newValue.charAt(i); +// if(c == '-' && i == 0){ +// offset = 1; +// } + if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + } + if (save) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(tempStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col != 2) { + return false; + }else if(btnStart.getText()=="Stop"){ + return false; + } else { + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + class OutputTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 8248501194260208975L; + private String[] columnNames; + private Vector> data = new Vector>(); + + public OutputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktOutputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + boolean realok = true; + boolean fracok = true; + int numdecimals = 0; + int offset = 0; + String typeStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + String real = null, frac = null; + newValue = newValue.replaceAll(",", ""); + if(newValue.contains("-")){ + offset = 1; + } + if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal + real = newValue.substring(offset, newValue.indexOf(".")); + frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); + if(real.length()>=10){ + for (int i=0; i < 10; i++) { + char c = real.charAt(i); + if (c > '2' && i == 0) + realok = false; + if (c > '1' && i == 1) + realok = false; + if (c > '4' && i == 2) + realok = false; + if (c > '7' && i == 3) + realok = false; + if (c > '4' && i == 4) + realok = false; + if (c > '8' && i == 5) + realok = false; + if (c > '3' && i == 6) + realok = false; + if (c > '6' && i == 7) + realok = false; + if (c > '4' && i == 8) + realok = false; + if (c > '7' && i == 9 && offset==0) + realok = false; + if (c == '7' && i == 9 && offset==0 && realok){ + if(real.contains("2147483647")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + if (c > '8' && i == 9 && offset==1) // for negative numbers + realok = false; + if (c == '8' && i == 9 && offset==1 && realok){ + if(real.contains("2147483648")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + + } + } + } + + if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ + real = newValue.substring(offset, newValue.length()); + } + if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ + real = newValue.substring(offset, newValue.indexOf(".")); + int i = Math.round(Float.valueOf(newValue)); + newValue = Integer.toString(i); + } + if(real.length()<=10){ + // check for valid digits and maximum range check + for (int i=0; i < real.length(); i++) { + char c = real.charAt(i); + if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + + if(real.length()>=10){ // The check for the maximum value + if (c > '2' && i == 0) + save = false; + if (c > '1' && i == 1) + save = false; + if (c > '4' && i == 2) + save = false; + if (c > '7' && i == 3) + save = false; + if (c > '4' && i == 4) + save = false; + if (c > '8' && i == 5) + save = false; + if (c > '3' && i == 6) + save = false; + if (c > '6' && i == 7) + save = false; + if (c > '4' && i == 8) + save = false; + if (c > '7' && i == 9 && offset==0) + save = false; + if (c > '8' && i == 9 && offset==1) // for negative numbers + save = false; + } + } + } + else + { + save = false; + } + if (save && realok && fracok) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(typeStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col < 1) { + return false; + } else { + if(data.elementAt(row).toString().contains("int")) + { + OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); + }else{ + OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); + } + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + //simple function to initialize parameters from the data file to variables + public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) + { + FileInputStream fileInputStream = null; + InputStreamReader inputStreamReader = null; + BufferedReader bufferedReader = null; + String[] var = null; + int points = 0; + + try { + String[] result = fileChooser(false,fname); + if (result != null){ + fileInputStream = new FileInputStream(result[1]); + inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); + bufferedReader = new BufferedReader(inputStreamReader); + + // use BufferedReader here + String s; + + while((s = bufferedReader.readLine()) != null){ + var = s.split(delim);//\t ,\n\r + gtnetSktName[points] = var[0]; + gtnetSktType[points] = var[1]; + points++; + } + } + } + catch (IOException e) { + e.printStackTrace(); + } + finally + { + try { + if (fileInputStream != null){ + fileInputStream.close(); + inputStreamReader.close(); + bufferedReader.close(); + } + } + catch (IOException e) { + e.printStackTrace(); + } + } + return points; + } + + //simple function to fill data to table + public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + OutputTableModel a = (OutputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + if(gtnetSktType[i].contains("int")){ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; + a.insertData(values); + }else{ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; + a.insertData(values); + } + } + + } + + //simple function to fill data to table + public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + InputTableModel a = (InputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; + a.insertData(values); + } + + } + + + //simple function to echo data to terminal + public static void echo(String msg) + { + if (DEBUG) { + System.out.println(msg); + } + + textArea.append(msg + newline); + + //Make sure the new text is visible, even if there + //was a selection in the text area. + textArea.setCaretPosition(textArea.getDocument().getLength()); + + } + + //simple function to save the file name and path + private static String[] fileChooser(boolean folderOnly, String fname) + { + String[] filePath = null; +// JFileChooser c = new JFileChooser(); + myJFileChooser = new JFileChooser(); + File myfile = new File(fname); + + if(folderOnly) + { + myJFileChooser.setDialogTitle("Select Folder..."); + myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File folder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = ""; + filePath[1] = folder.getAbsolutePath(); + } + } + else + { + myJFileChooser.setDialogTitle("Select File"); + myJFileChooser.setSelectedFile(myfile); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File fileFolder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = myJFileChooser.getSelectedFile().getName(); + filePath[1] = fileFolder.getAbsolutePath(); + } + } + + return filePath; + }//end saveAsChooser + + public static byte[] convertToByteArray(int value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putInt(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(float value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putFloat(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(byte value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.put(value); + return buffer.array(); + } + +} // End of Class + +class TCP_ListenTask extends Thread +{ + private volatile boolean stop = false; + int npoints = 0; + int ival[] = null; + float fval[] = null; +// ServerSocket serverSocket = null; +// Socket connectionSocket = null; + GTNET_SKT_TCP_GUI myskt = null; + + public TCP_ListenTask(GTNET_SKT_TCP_GUI myinst, int numPoints) throws SocketException { + this.npoints = numPoints; + ival = new int[numPoints]; + fval = new float[numPoints]; + this.myskt = myinst; + } + public void closeTask() { + try { + stop = true; + myskt.serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void run() { + while (!stop) { + ByteBuffer buf; + try + { + //1. creating a server socket, parameter is local port number + myskt.serverSocket = new ServerSocket(); + myskt.serverSocket.setReuseAddress(true); + // inSocket.setSoTimeout(10000); // DO NOT USE TIMEOUTS + myskt.connectionSocket = new Socket(); + + String ipAddr = GTNET_SKT_TCP_GUI.jTextFieldLocalIp.getText(); + int ipPort = Integer.parseInt(GTNET_SKT_TCP_GUI.jTextFieldLocalPort.getText()); + myskt.serverSocket.bind(new InetSocketAddress(ipAddr, ipPort)); + + //2. Wait for an incoming data + GTNET_SKT_TCP_GUI.echo("Server socket created. Waiting for incoming data..."); + + GTNET_SKT_TCP_GUI.btnTCP.setText("StopServer"); + GTNET_SKT_TCP_GUI.btnAddIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnDeleteIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnSaveIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnLoadIp.setEnabled(false); + GTNET_SKT_TCP_GUI.jTextFieldLocalIp.setEnabled(false); + GTNET_SKT_TCP_GUI.jTextFieldLocalPort.setEnabled(false); + + //communication loop + int rxCnt = 0; + while (!(myskt.serverSocket.isClosed())) + { + rxCnt++; + + myskt.connectionSocket = myskt.serverSocket.accept(); + GTNET_SKT_TCP_GUI.echo("Connection received from " + myskt.connectionSocket.getInetAddress().getHostName() + " : " + myskt.connectionSocket.getPort()); + GTNET_SKT_TCP_GUI.btnSend.setEnabled(true); + InputStream insktStream = myskt.connectionSocket.getInputStream(); + byte[] buff = new byte[(npoints) * 4]; // Buffer + int num = -1; // Bytes read + while( (num = insktStream.read(buff)) >= 0 ){ // Not EOS yet + // System.out.print(new String(buff,0,num) ); // Echo to console + // out.write( buff, 0, num ); // Echo to source + // out.flush(); // Flush stream + if (num==(npoints) * 4) + insktStream.close(); // This is necessary in Server mode to read new packets + break; + } // end while + if (num==(npoints) * 4){ + buf = ByteBuffer.wrap(buff); + for (int i = 0; i= 0 ){ // Not EOS yet +// // System.out.print(new String(buff,0,num) ); // Echo to console +// // out.write( buff, 0, num ); // Echo to source +// // out.flush(); // Flush stream +// if (num==(npoints) * 4) +// // inskt.close(); +// break; +// } // end while + + if (num==(npoints) * 4){ + ByteBuffer buf = ByteBuffer.wrap(buff); + for (int i = 0; i comboBox = new JComboBox(options); - comboBox.setMaximumRowCount(4); - TableCellEditor editorType = new DefaultCellEditor(comboBox); - - // The Server Table - String columnNames[] = {"Point #","Variable","Type","Value"}; - IPtable = new JTable(new InputTableModel(columnNames));//Create JTable - IPtable.setCellSelectionEnabled(true); - IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - IPtable.setFillsViewportHeight(true); - IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - IPtable.setRowSelectionAllowed(true); - IPtable.setColumnSelectionAllowed(false); - IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - JTableHeader header = IPtable.getTableHeader(); - header.setBackground(Color.LIGHT_GRAY); - IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - // The Client Table - OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable - OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - OPtable.setFillsViewportHeight(true); - OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - OPtable.setRowSelectionAllowed(true); - OPtable.setColumnSelectionAllowed(false); - OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); - OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - setup(); // The GUI - - setSize(555,745); - setLayout(new FlowLayout()); - setDefaultCloseOperation(EXIT_ON_CLOSE); - this.getContentPane().add(MainPnl); - setVisible(true); - - } - - public static void setup() - { - try { - host = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - - // Main Panel - MainPnl = new JPanel(new GridBagLayout()); - GridBagConstraints gbc = new GridBagConstraints(); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.gridwidth = 1; - MainPnl.add(createInputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 1; - gbc.gridwidth = 1; - MainPnl.add(createOutputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 2; - gbc.gridwidth = 1; - MainPnl.add(createMsgPnl(), gbc); - - } - - private static JPanel createInputPointPnl() { - - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Server"); - JPanel pnlPoint = new JPanel(new GridBagLayout()); - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(IPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - jTextFieldLocalIp = new JTextField("", 10); - jTextFieldLocalIp.setText(host.getHostAddress()); - jTextFieldLocalIp.setEditable(true); - - jTextFieldLocalPort = new JTextField("", 6); - jTextFieldLocalPort.setText("12345"); - - btnStart= new SoftEdgeButton("Start"); - btnAddIp = new SoftEdgeButton("Add") ; - btnDeleteIp = new SoftEdgeButton("Delete") ; - btnSaveIp = new SoftEdgeButton("Save Table"); - btnLoadIp = new SoftEdgeButton("Load Table"); - - btnStart.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Start") - { - GTNET_SKT_UDP_GUI.btnStart.setText("Stop"); - GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(false); - GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(false); - GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(false); -// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(false); -// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(false); - try { - GTNET_SKT_UDP_GUI.process = new UDP_ServerTask(GTNET_SKT_UDP_GUI.numInPoints); - GTNET_SKT_UDP_GUI.process.execute(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - } - else - { - GTNET_SKT_UDP_GUI.btnStart.setText("Start"); - GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(true); - GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(true); - GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(true); -// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(true); -// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(true); - GTNET_SKT_UDP_GUI.process.closeTask(); - GTNET_SKT_UDP_GUI.process.cancel(true); - GTNET_SKT_UDP_GUI.echo("Server socket closed."); - } - } - }); - - btnAddIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) - { - if(GTNET_SKT_UDP_GUI.numInPoints< GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS){ - int i = GTNET_SKT_UDP_GUI.numInPoints++; - InputTableModel a = (InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); - GTNET_SKT_UDP_GUI.gtnetSktInputName[i] = "POINTin" + Integer.toString(i); - GTNET_SKT_UDP_GUI.gtnetSktInputType[i] = "float"; - Object[] values = {i, GTNET_SKT_UDP_GUI.gtnetSktInputName[i], GTNET_SKT_UDP_GUI.gtnetSktInputType[i], ""}; - a.insertData(values); - }else{ - GTNET_SKT_UDP_GUI.echo("Number of Server Points is at maximum of:" + GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS); - } - } - }); - - btnDeleteIp.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow() != -1){ - GTNET_SKT_UDP_GUI.InputTableModel a = (GTNET_SKT_UDP_GUI.InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); - a.removeRow(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow()); - GTNET_SKT_UDP_GUI.numInPoints--; - for (int i=0; i < GTNET_SKT_UDP_GUI.numInPoints; i++) { - a.setValueAt((Object) i, i, 0); - } - } - } - }); - - btnSaveIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - saveIPTable(); - } - }); - - btnLoadIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - loadIPTable(); - } - }); - - JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(2, 2, 2, 2); - JLabel lblLocalIp = new JLabel("Local Server Settings, IP Address:"); - LocalPanel.add(lblLocalIp, gbc); - LocalPanel.add(jTextFieldLocalIp, gbc); - LocalPanel.add(new JLabel("Port:"), gbc); - LocalPanel.add(jTextFieldLocalPort, gbc); - LocalPanel.add(btnStart, gbc); - JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - tableButtonPanel.add(btnAddIp, gbc); - tableButtonPanel.add(btnDeleteIp, gbc); - tableButtonPanel.add(btnSaveIp, gbc); - tableButtonPanel.add(btnLoadIp, gbc); - - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 1; - pnlPoint.add(LocalPanel, gbc); - gbc.gridx = 0; - gbc.gridy = 2; - pnlPoint.add(tableButtonPanel, gbc); - - return pnlPoint; - - } - - private static JPanel createOutputPointPnl() { - - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Client"); - - //Points to GTNET-SKT - JPanel pnlPoint = new JPanel(new GridBagLayout()); - - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(OPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - jTextFieldRemoteIp = new JTextField("", 9); - jTextFieldRemoteIp.setText(host.getHostAddress()); - if (DEBUG) { - jTextFieldRemoteIp.setText("172.24.9.185"); - } - jTextFieldRemoteIp.setEditable(true); - - jTextFieldRemotePort = new JTextField("", 5); - jTextFieldRemotePort.setText("12345"); - - btnSend= new SoftEdgeButton("Send"); - SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; - SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; - SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); - SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); - - btnSend.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - DatagramSocket outSocket = null; - int size = GTNET_SKT_UDP_GUI.numOutPoints * 4; - try { - InetAddress gtnetIp = InetAddress.getByName(GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.getText()); - int gtnetPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldRemotePort.getText()); - byte[] buffer = new byte[size]; - ByteBuffer outbuff = ByteBuffer.wrap(buffer); - - for (int i = 0; i> data = new Vector>(); - - public InputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktInputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - int numdecimals = 0; -// int offset = 0; - String tempStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - newValue = newValue.replaceAll(",", ""); - - // check for valid digits, decimal places, and range check - for (int i=0; i < newValue.length(); i++) { - char c = newValue.charAt(i); -// if(c == '-' && i == 0){ -// offset = 1; -// } - if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - } - if (save) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(tempStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col != 2) { - return false; - }else if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Stop"){ - return false; - } else { - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - class OutputTableModel extends AbstractTableModel { - - /** - * - */ - private static final long serialVersionUID = 8248501194260208975L; - private String[] columnNames; - private Vector> data = new Vector>(); - - public OutputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktOutputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - boolean realok = true; - boolean fracok = true; - int numdecimals = 0; - int offset = 0; - String typeStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - String real = null, frac = null; - newValue = newValue.replaceAll(",", ""); - if(newValue.contains("-")){ - offset = 1; - } - if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal - real = newValue.substring(offset, newValue.indexOf(".")); - frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); - if(real.length()>=10){ - for (int i=0; i < 10; i++) { - char c = real.charAt(i); - if (c > '2' && i == 0) - realok = false; - if (c > '1' && i == 1) - realok = false; - if (c > '4' && i == 2) - realok = false; - if (c > '7' && i == 3) - realok = false; - if (c > '4' && i == 4) - realok = false; - if (c > '8' && i == 5) - realok = false; - if (c > '3' && i == 6) - realok = false; - if (c > '6' && i == 7) - realok = false; - if (c > '4' && i == 8) - realok = false; - if (c > '7' && i == 9 && offset==0) - realok = false; - if (c == '7' && i == 9 && offset==0 && realok){ - if(real.contains("2147483647")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - if (c > '8' && i == 9 && offset==1) // for negative numbers - realok = false; - if (c == '8' && i == 9 && offset==1 && realok){ - if(real.contains("2147483648")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - - } - } - } - - if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ - real = newValue.substring(offset, newValue.length()); - } - if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ - real = newValue.substring(offset, newValue.indexOf(".")); - int i = Math.round(Float.valueOf(newValue)); - newValue = Integer.toString(i); - } - if(real.length()<=10){ - // check for valid digits and maximum range check - for (int i=0; i < real.length(); i++) { - char c = real.charAt(i); - if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - - if(real.length()>=10){ // The check for the maximum value - if (c > '2' && i == 0) - save = false; - if (c > '1' && i == 1) - save = false; - if (c > '4' && i == 2) - save = false; - if (c > '7' && i == 3) - save = false; - if (c > '4' && i == 4) - save = false; - if (c > '8' && i == 5) - save = false; - if (c > '3' && i == 6) - save = false; - if (c > '6' && i == 7) - save = false; - if (c > '4' && i == 8) - save = false; - if (c > '7' && i == 9 && offset==0) - save = false; - if (c > '8' && i == 9 && offset==1) // for negative numbers - save = false; - } - } - } - else - { - save = false; - } - if (save && realok && fracok) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(typeStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col < 1) { - return false; - } else { - if(data.elementAt(row).toString().contains("int")) - { - OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); - }else{ - OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); - } - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - public static void main(String args[]) - { - new GTNET_SKT_UDP_GUI(); - - fillInputData(IPtable,numInPoints,gtnetSktInputName,gtnetSktInputType); //Server Data Point File - - fillOutputData(OPtable, numOutPoints, gtnetSktOutputName, gtnetSktOutputType); //Client Data Point File - } - - //simple function to initialize parameters from the data file to variables - public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) - { - FileInputStream fileInputStream = null; - InputStreamReader inputStreamReader = null; - BufferedReader bufferedReader = null; - String[] var = null; - int points = 0; - - try { - String[] result = fileChooser(false,fname); - if (result != null){ - fileInputStream = new FileInputStream(result[1]); - inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); - bufferedReader = new BufferedReader(inputStreamReader); - - // use BufferedReader here - String s; - - while((s = bufferedReader.readLine()) != null){ - var = s.split("\t");//\t ,\n\r - gtnetSktName[points] = var[0]; - gtnetSktType[points] = var[1]; - points++; - } - } - } - catch (IOException e) { - e.printStackTrace(); - } - finally - { - try { - if (fileInputStream != null){ - fileInputStream.close(); - inputStreamReader.close(); - bufferedReader.close(); - } - } - catch (IOException e) { - e.printStackTrace(); - } - } - return points; - } - - //simple function to fill data to table - public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - OutputTableModel a = (OutputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - if(gtnetSktType[i].contains("int")){ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; - a.insertData(values); - }else{ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; - a.insertData(values); - } - } - - } - - //simple function to fill data to table - public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - InputTableModel a = (InputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; - a.insertData(values); - } - - } - - - //simple function to echo data to terminal - public static void echo(String msg) - { - if (DEBUG) { - System.out.println(msg); - } - - textArea.append(msg + newline); - - //Make sure the new text is visible, even if there - //was a selection in the text area. - textArea.setCaretPosition(textArea.getDocument().getLength()); - - } - - //simple function to save the file name and path - private static String[] fileChooser(boolean folderOnly, String fname) - { - String[] filePath = null; -// JFileChooser c = new JFileChooser(); - myJFileChooser = new JFileChooser(); - File myfile = new File(fname); - - if(folderOnly) - { - myJFileChooser.setDialogTitle("Select Folder..."); - myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File folder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = ""; - filePath[1] = folder.getAbsolutePath(); - } - } - else - { - myJFileChooser.setDialogTitle("Select File"); - myJFileChooser.setSelectedFile(myfile); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File fileFolder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = myJFileChooser.getSelectedFile().getName(); - filePath[1] = fileFolder.getAbsolutePath(); - } - } - - return filePath; - }//end saveAsChooser - - public static byte[] convertToByteArray(int value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putInt(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(float value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putFloat(value); - return buffer.array(); - } - - -} // End of Class - - -/* - * CancelListener - */ -class CancelListener implements ActionListener -{ - public void actionPerformed(ActionEvent e) - { - System.exit(0); - } - } - - -class UDP_ServerTask extends SwingWorker -{ - int npoints = 0; - int ival[] = null; - float fval[] = null; - - public UDP_ServerTask(int numPoints) throws SocketException { - this.npoints = numPoints; - ival = new int[numPoints]; - fval = new float[numPoints]; - } - public void closeTask() { - GTNET_SKT_UDP_GUI.inSocket.close(); - System.out.println("UDP_ServerTask Closed Now"); - GTNET_SKT_UDP_GUI.echo("UDP_ServerTask Closed Now"); - } - @Override - protected Object doInBackground() throws Exception { - ByteBuffer buf; - byte[] data = null; - byte[] inBuf; - - - try - { - //1. creating a server socket, parameter is local port number - GTNET_SKT_UDP_GUI.inSocket = new DatagramSocket(null); - GTNET_SKT_UDP_GUI.inSocket.setReuseAddress(true); - - String ipAddr = GTNET_SKT_UDP_GUI.jTextFieldLocalIp.getText(); - int localPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldLocalPort.getText()); - GTNET_SKT_UDP_GUI.inSocket.bind(new InetSocketAddress(ipAddr, localPort)); - - //buffer to receive incoming data - inBuf = new byte[(npoints) * 4]; - DatagramPacket inPacket = new DatagramPacket(inBuf, inBuf.length); - - //2. Wait for an incoming data - GTNET_SKT_UDP_GUI.echo("Server socket created. Waiting for incoming data..."); - - //communication loop - int rxCnt = 0; - while(!isCancelled()) - { - rxCnt++; - - GTNET_SKT_UDP_GUI.inSocket.receive(inPacket); - data = inPacket.getData(); - buf = ByteBuffer.wrap(data); - for (int i = 0; i comboBox = new JComboBox(options); + comboBox.setMaximumRowCount(4); + TableCellEditor editorType = new DefaultCellEditor(comboBox); + + // The Server Table + String columnNames[] = {"Point #","Variable","Type","Value"}; + IPtable = new JTable(new InputTableModel(columnNames));//Create JTable + IPtable.setCellSelectionEnabled(true); + IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + IPtable.setFillsViewportHeight(true); + IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + IPtable.setRowSelectionAllowed(true); + IPtable.setColumnSelectionAllowed(false); + IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + JTableHeader header = IPtable.getTableHeader(); + header.setBackground(Color.LIGHT_GRAY); + IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + // The Client Table + OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable + OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + OPtable.setFillsViewportHeight(true); + OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + OPtable.setRowSelectionAllowed(true); + OPtable.setColumnSelectionAllowed(false); + OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); + OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + setup(); // The GUI + + setSize(555,745); + setLayout(new FlowLayout()); + setDefaultCloseOperation(EXIT_ON_CLOSE); + this.getContentPane().add(MainPnl); + setVisible(true); + + } + + public static void setup() + { + try { + host = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + // Main Panel + MainPnl = new JPanel(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.gridwidth = 1; + MainPnl.add(createInputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 1; + gbc.gridwidth = 1; + MainPnl.add(createOutputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 2; + gbc.gridwidth = 1; + MainPnl.add(createMsgPnl(), gbc); + + } + + private static JPanel createInputPointPnl() { + + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Server"); + JPanel pnlPoint = new JPanel(new GridBagLayout()); + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(IPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + jTextFieldLocalIp = new JTextField("", 10); + jTextFieldLocalIp.setText(host.getHostAddress()); + jTextFieldLocalIp.setEditable(true); + + jTextFieldLocalPort = new JTextField("", 6); + jTextFieldLocalPort.setText("12345"); + + btnStart= new SoftEdgeButton("Start"); + btnAddIp = new SoftEdgeButton("Add") ; + btnDeleteIp = new SoftEdgeButton("Delete") ; + btnSaveIp = new SoftEdgeButton("Save Table"); + btnLoadIp = new SoftEdgeButton("Load Table"); + + btnStart.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Start") + { + GTNET_SKT_UDP_GUI.btnStart.setText("Stop"); + GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(false); + GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(false); + GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(false); +// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(false); +// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(false); + try { + GTNET_SKT_UDP_GUI.process = new UDP_ServerTask(GTNET_SKT_UDP_GUI.numInPoints); + GTNET_SKT_UDP_GUI.process.execute(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + } + else + { + GTNET_SKT_UDP_GUI.btnStart.setText("Start"); + GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(true); + GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(true); + GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(true); +// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(true); +// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(true); + GTNET_SKT_UDP_GUI.process.closeTask(); + GTNET_SKT_UDP_GUI.process.cancel(true); + GTNET_SKT_UDP_GUI.echo("Server socket closed."); + } + } + }); + + btnAddIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + if(GTNET_SKT_UDP_GUI.numInPoints< GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS){ + int i = GTNET_SKT_UDP_GUI.numInPoints++; + InputTableModel a = (InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); + GTNET_SKT_UDP_GUI.gtnetSktInputName[i] = "POINTin" + Integer.toString(i); + GTNET_SKT_UDP_GUI.gtnetSktInputType[i] = "float"; + Object[] values = {i, GTNET_SKT_UDP_GUI.gtnetSktInputName[i], GTNET_SKT_UDP_GUI.gtnetSktInputType[i], ""}; + a.insertData(values); + }else{ + GTNET_SKT_UDP_GUI.echo("Number of Server Points is at maximum of:" + GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS); + } + } + }); + + btnDeleteIp.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow() != -1){ + GTNET_SKT_UDP_GUI.InputTableModel a = (GTNET_SKT_UDP_GUI.InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); + a.removeRow(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow()); + GTNET_SKT_UDP_GUI.numInPoints--; + for (int i=0; i < GTNET_SKT_UDP_GUI.numInPoints; i++) { + a.setValueAt((Object) i, i, 0); + } + } + } + }); + + btnSaveIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + saveIPTable(); + } + }); + + btnLoadIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + loadIPTable(); + } + }); + + JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(2, 2, 2, 2); + JLabel lblLocalIp = new JLabel("Local Server Settings, IP Address:"); + LocalPanel.add(lblLocalIp, gbc); + LocalPanel.add(jTextFieldLocalIp, gbc); + LocalPanel.add(new JLabel("Port:"), gbc); + LocalPanel.add(jTextFieldLocalPort, gbc); + LocalPanel.add(btnStart, gbc); + JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + tableButtonPanel.add(btnAddIp, gbc); + tableButtonPanel.add(btnDeleteIp, gbc); + tableButtonPanel.add(btnSaveIp, gbc); + tableButtonPanel.add(btnLoadIp, gbc); + + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 1; + pnlPoint.add(LocalPanel, gbc); + gbc.gridx = 0; + gbc.gridy = 2; + pnlPoint.add(tableButtonPanel, gbc); + + return pnlPoint; + + } + + private static JPanel createOutputPointPnl() { + + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Client"); + + //Points to GTNET-SKT + JPanel pnlPoint = new JPanel(new GridBagLayout()); + + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(OPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + jTextFieldRemoteIp = new JTextField("", 9); + jTextFieldRemoteIp.setText(host.getHostAddress()); + if (DEBUG) { + jTextFieldRemoteIp.setText("172.24.9.185"); + } + jTextFieldRemoteIp.setEditable(true); + + jTextFieldRemotePort = new JTextField("", 5); + jTextFieldRemotePort.setText("12345"); + + btnSend= new SoftEdgeButton("Send"); + SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; + SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; + SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); + SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); + + btnSend.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + DatagramSocket outSocket = null; + int size = GTNET_SKT_UDP_GUI.numOutPoints * 4; + try { + InetAddress gtnetIp = InetAddress.getByName(GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.getText()); + int gtnetPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldRemotePort.getText()); + byte[] buffer = new byte[size]; + ByteBuffer outbuff = ByteBuffer.wrap(buffer); + + for (int i = 0; i> data = new Vector>(); + + public InputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktInputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + int numdecimals = 0; +// int offset = 0; + String tempStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + newValue = newValue.replaceAll(",", ""); + + // check for valid digits, decimal places, and range check + for (int i=0; i < newValue.length(); i++) { + char c = newValue.charAt(i); +// if(c == '-' && i == 0){ +// offset = 1; +// } + if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + } + if (save) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(tempStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col != 2) { + return false; + }else if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Stop"){ + return false; + } else { + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + class OutputTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 8248501194260208975L; + private String[] columnNames; + private Vector> data = new Vector>(); + + public OutputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktOutputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + boolean realok = true; + boolean fracok = true; + int numdecimals = 0; + int offset = 0; + String typeStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + String real = null, frac = null; + newValue = newValue.replaceAll(",", ""); + if(newValue.contains("-")){ + offset = 1; + } + if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal + real = newValue.substring(offset, newValue.indexOf(".")); + frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); + if(real.length()>=10){ + for (int i=0; i < 10; i++) { + char c = real.charAt(i); + if (c > '2' && i == 0) + realok = false; + if (c > '1' && i == 1) + realok = false; + if (c > '4' && i == 2) + realok = false; + if (c > '7' && i == 3) + realok = false; + if (c > '4' && i == 4) + realok = false; + if (c > '8' && i == 5) + realok = false; + if (c > '3' && i == 6) + realok = false; + if (c > '6' && i == 7) + realok = false; + if (c > '4' && i == 8) + realok = false; + if (c > '7' && i == 9 && offset==0) + realok = false; + if (c == '7' && i == 9 && offset==0 && realok){ + if(real.contains("2147483647")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + if (c > '8' && i == 9 && offset==1) // for negative numbers + realok = false; + if (c == '8' && i == 9 && offset==1 && realok){ + if(real.contains("2147483648")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + + } + } + } + + if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ + real = newValue.substring(offset, newValue.length()); + } + if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ + real = newValue.substring(offset, newValue.indexOf(".")); + int i = Math.round(Float.valueOf(newValue)); + newValue = Integer.toString(i); + } + if(real.length()<=10){ + // check for valid digits and maximum range check + for (int i=0; i < real.length(); i++) { + char c = real.charAt(i); + if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + + if(real.length()>=10){ // The check for the maximum value + if (c > '2' && i == 0) + save = false; + if (c > '1' && i == 1) + save = false; + if (c > '4' && i == 2) + save = false; + if (c > '7' && i == 3) + save = false; + if (c > '4' && i == 4) + save = false; + if (c > '8' && i == 5) + save = false; + if (c > '3' && i == 6) + save = false; + if (c > '6' && i == 7) + save = false; + if (c > '4' && i == 8) + save = false; + if (c > '7' && i == 9 && offset==0) + save = false; + if (c > '8' && i == 9 && offset==1) // for negative numbers + save = false; + } + } + } + else + { + save = false; + } + if (save && realok && fracok) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(typeStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col < 1) { + return false; + } else { + if(data.elementAt(row).toString().contains("int")) + { + OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); + }else{ + OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); + } + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + public static void main(String args[]) + { + new GTNET_SKT_UDP_GUI(); + + fillInputData(IPtable,numInPoints,gtnetSktInputName,gtnetSktInputType); //Server Data Point File + + fillOutputData(OPtable, numOutPoints, gtnetSktOutputName, gtnetSktOutputType); //Client Data Point File + } + + //simple function to initialize parameters from the data file to variables + public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) + { + FileInputStream fileInputStream = null; + InputStreamReader inputStreamReader = null; + BufferedReader bufferedReader = null; + String[] var = null; + int points = 0; + + try { + String[] result = fileChooser(false,fname); + if (result != null){ + fileInputStream = new FileInputStream(result[1]); + inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); + bufferedReader = new BufferedReader(inputStreamReader); + + // use BufferedReader here + String s; + + while((s = bufferedReader.readLine()) != null){ + var = s.split("\t");//\t ,\n\r + gtnetSktName[points] = var[0]; + gtnetSktType[points] = var[1]; + points++; + } + } + } + catch (IOException e) { + e.printStackTrace(); + } + finally + { + try { + if (fileInputStream != null){ + fileInputStream.close(); + inputStreamReader.close(); + bufferedReader.close(); + } + } + catch (IOException e) { + e.printStackTrace(); + } + } + return points; + } + + //simple function to fill data to table + public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + OutputTableModel a = (OutputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + if(gtnetSktType[i].contains("int")){ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; + a.insertData(values); + }else{ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; + a.insertData(values); + } + } + + } + + //simple function to fill data to table + public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + InputTableModel a = (InputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; + a.insertData(values); + } + + } + + + //simple function to echo data to terminal + public static void echo(String msg) + { + if (DEBUG) { + System.out.println(msg); + } + + textArea.append(msg + newline); + + //Make sure the new text is visible, even if there + //was a selection in the text area. + textArea.setCaretPosition(textArea.getDocument().getLength()); + + } + + //simple function to save the file name and path + private static String[] fileChooser(boolean folderOnly, String fname) + { + String[] filePath = null; +// JFileChooser c = new JFileChooser(); + myJFileChooser = new JFileChooser(); + File myfile = new File(fname); + + if(folderOnly) + { + myJFileChooser.setDialogTitle("Select Folder..."); + myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File folder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = ""; + filePath[1] = folder.getAbsolutePath(); + } + } + else + { + myJFileChooser.setDialogTitle("Select File"); + myJFileChooser.setSelectedFile(myfile); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File fileFolder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = myJFileChooser.getSelectedFile().getName(); + filePath[1] = fileFolder.getAbsolutePath(); + } + } + + return filePath; + }//end saveAsChooser + + public static byte[] convertToByteArray(int value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putInt(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(float value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putFloat(value); + return buffer.array(); + } + + +} // End of Class + + +/* + * CancelListener + */ +class CancelListener implements ActionListener +{ + public void actionPerformed(ActionEvent e) + { + System.exit(0); + } + } + + +class UDP_ServerTask extends SwingWorker +{ + int npoints = 0; + int ival[] = null; + float fval[] = null; + + public UDP_ServerTask(int numPoints) throws SocketException { + this.npoints = numPoints; + ival = new int[numPoints]; + fval = new float[numPoints]; + } + public void closeTask() { + GTNET_SKT_UDP_GUI.inSocket.close(); + System.out.println("UDP_ServerTask Closed Now"); + GTNET_SKT_UDP_GUI.echo("UDP_ServerTask Closed Now"); + } + @Override + protected Object doInBackground() throws Exception { + ByteBuffer buf; + byte[] data = null; + byte[] inBuf; + + + try + { + //1. creating a server socket, parameter is local port number + GTNET_SKT_UDP_GUI.inSocket = new DatagramSocket(null); + GTNET_SKT_UDP_GUI.inSocket.setReuseAddress(true); + + String ipAddr = GTNET_SKT_UDP_GUI.jTextFieldLocalIp.getText(); + int localPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldLocalPort.getText()); + GTNET_SKT_UDP_GUI.inSocket.bind(new InetSocketAddress(ipAddr, localPort)); + + //buffer to receive incoming data + inBuf = new byte[(npoints) * 4]; + DatagramPacket inPacket = new DatagramPacket(inBuf, inBuf.length); + + //2. Wait for an incoming data + GTNET_SKT_UDP_GUI.echo("Server socket created. Waiting for incoming data..."); + + //communication loop + int rxCnt = 0; + while(!isCancelled()) + { + rxCnt++; + + GTNET_SKT_UDP_GUI.inSocket.receive(inPacket); + data = inPacket.getData(); + buf = ByteBuffer.wrap(data); + for (int i = 0; i comboBox = new JComboBox(options); - comboBox.setMaximumRowCount(4); - TableCellEditor editorType = new DefaultCellEditor(comboBox); - - // The Server Table - String columnNames[] = {"Point #","Variable","Type","Value"}; - IPtable = new JTable(new InputTableModel(columnNames));//Create JTable - IPtable.setCellSelectionEnabled(true); - IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - IPtable.setFillsViewportHeight(true); - IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - IPtable.setRowSelectionAllowed(true); - IPtable.setColumnSelectionAllowed(false); - IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - JTableHeader header = IPtable.getTableHeader(); - header.setBackground(Color.LIGHT_GRAY); - IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - // The Client Table - OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable - OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - OPtable.setFillsViewportHeight(true); - OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - OPtable.setRowSelectionAllowed(true); - OPtable.setColumnSelectionAllowed(false); - OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); - OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - setup(); // The GUI - - setSize(520,745); - setLayout(new FlowLayout()); - setDefaultCloseOperation(EXIT_ON_CLOSE); - this.getContentPane().add(MainPnl); - setVisible(true); - - } - - public static void setup() - { - try { - host = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - - // Main Panel - MainPnl = new JPanel(new GridBagLayout()); - GridBagConstraints gbc = new GridBagConstraints(); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.gridwidth = 1; - MainPnl.add(createTCP_Pnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 1; - gbc.gridwidth = 1; - MainPnl.add(createInputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 2; - gbc.gridwidth = 1; - MainPnl.add(createOutputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 3; - gbc.gridwidth = 1; - MainPnl.add(createMsgPnl(), gbc); - - } - - private static JPanel createTCP_Pnl() { - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Communication Mode"); - JPanel pnlTCP = new JPanel(new GridBagLayout()); - pnlTCP.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(2,2,2,2))); - Object options[] = { "Client", "Server" }; - final JComboBox comboBox = new JComboBox(options); - btnTCP= new SoftEdgeButton("Connect"); - - lblLocalIp = new JLabel("Local Server, IP Address:"); - jTextFieldLocalIp = new JTextField("", 10); - jTextFieldLocalIp.setText(host.getHostAddress()); - jTextFieldLocalIp.setEditable(true); - - lblLocalPort = new JLabel("Port"); - jTextFieldLocalPort = new JTextField("", 6); - jTextFieldLocalPort.setText("12345"); - - jTextFieldLocalIp.setVisible(false); - jTextFieldLocalPort.setVisible(false); - lblLocalIp.setVisible(false); - lblLocalPort.setVisible(false); - - lblRemoteIp = new JLabel("Remote Server, IP Address:"); - jTextFieldRemoteIp = new JTextField("", 9); - jTextFieldRemoteIp.setText(host.getHostAddress()); - if (DEBUG) { - jTextFieldRemoteIp.setText("172.24.9.185"); - } - jTextFieldRemoteIp.setEditable(true); - - lblRemotePort = new JLabel("Port"); - jTextFieldRemotePort = new JTextField("", 5); - jTextFieldRemotePort.setText("12345"); - - - comboBox.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(comboBox.getSelectedIndex()==0) - { - btnTCP.setText("Connect"); - jTextFieldLocalIp.setVisible(false); - jTextFieldLocalPort.setVisible(false); - lblLocalIp.setVisible(false); - lblLocalPort.setVisible(false); - lblRemoteIp.setVisible(true); - jTextFieldRemoteIp.setVisible(true); - lblRemotePort.setVisible(true); - jTextFieldRemotePort.setVisible(true); - } - else - { - btnTCP.setText("Listen"); - jTextFieldLocalIp.setVisible(true); - jTextFieldLocalPort.setVisible(true); - lblLocalIp.setVisible(true); - lblLocalPort.setVisible(true); - lblRemoteIp.setVisible(false); - jTextFieldRemoteIp.setVisible(false); - lblRemotePort.setVisible(false); - jTextFieldRemotePort.setVisible(false); - } - - } - - }); - - btnTCP.addActionListener(new ActionListener() { - @SuppressWarnings("deprecation") - @Override - public void actionPerformed(ActionEvent e) { - if(btnTCP.getText()=="Listen") - { - echo("Server socket opening..."); - try { - serverProcess = new TCP_ListenTask(main_inst , numInPoints); - serverProcess.start(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - - return; - } - if(btnTCP.getText()=="StopServer") - { - btnTCP.setText("Listen"); - btnAddIp.setEnabled(true); - btnDeleteIp.setEnabled(true); - btnSaveIp.setEnabled(true); - btnLoadIp.setEnabled(true); - jTextFieldLocalIp.setEnabled(true); - jTextFieldLocalPort.setEnabled(true); - btnSend.setEnabled(false); - echo("Server socket closed..."); - serverProcess.closeTask(); - serverProcess.stop(); - return; - } - if(btnTCP.getText()=="Connect") - { - echo("Client socket opening..."); - try { - clientProcess = new TCP_ConnectTask(main_inst , numOutPoints); - clientProcess.start(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - return; - } - if(btnTCP.getText()=="StopClient") - { - clientProcess.closeTask(); - echo("Client socket closed..."); - return; - } - } - }); - - GridBagConstraints gbc = new GridBagConstraints(); - JPanel TCPoptions = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - TCPoptions.add(comboBox, gbc); - TCPoptions.add(btnTCP, gbc); - - JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - LocalPanel.add(comboBox, gbc); - LocalPanel.add(btnTCP, gbc); - LocalPanel.add(lblLocalIp, gbc); - LocalPanel.add(jTextFieldLocalIp, gbc); - LocalPanel.add(lblLocalPort, gbc); - LocalPanel.add(jTextFieldLocalPort, gbc); - - JPanel RemotePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - - RemotePanel.add(lblRemoteIp, gbc); - RemotePanel.add(jTextFieldRemoteIp, gbc); - RemotePanel.add(lblRemotePort, gbc); - RemotePanel.add(jTextFieldRemotePort, gbc); - - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 1; - gbc.gridy = 0; - pnlTCP.add(TCPoptions, gbc); - gbc.gridx = 2; - gbc.gridy = 0; - pnlTCP.add(LocalPanel, gbc); - gbc.gridx = 3; - gbc.gridy = 0; - pnlTCP.add(RemotePanel, gbc); - return pnlTCP; - - } - - private static JPanel createInputPointPnl() { - - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Server"); - JPanel pnlPoint = new JPanel(new GridBagLayout()); - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(IPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - btnStart= new SoftEdgeButton("Start"); - btnAddIp = new SoftEdgeButton("Add") ; - btnDeleteIp = new SoftEdgeButton("Delete") ; - btnSaveIp = new SoftEdgeButton("Save Table"); - btnLoadIp = new SoftEdgeButton("Load Table"); - - btnAddIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) - { - if(numInPoints< GTNETSKT_MAX_INPUTS){ - int i = numInPoints++; - InputTableModel a = (InputTableModel) IPtable.getModel(); - gtnetSktInputName[i] = "POINTin" + Integer.toString(i); - gtnetSktInputType[i] = "float"; - Object[] values = {i, gtnetSktInputName[i], gtnetSktInputType[i], ""}; - a.insertData(values); - }else{ - echo("Number of Server Points is at maximum of:" + GTNETSKT_MAX_INPUTS); - } - } - }); - - btnDeleteIp.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(IPtable.getSelectedRow() != -1){ - InputTableModel a = (InputTableModel) IPtable.getModel(); - a.removeRow(IPtable.getSelectedRow()); - numInPoints--; - for (int i=0; i < numInPoints; i++) { - a.setValueAt((Object) i, i, 0); - } - } - } - }); - - btnSaveIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - saveIPTable(); - } - }); - - btnLoadIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - loadIPTable(); - } - }); - - JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - tableButtonPanel.add(btnAddIp, gbc); - tableButtonPanel.add(btnDeleteIp, gbc); - tableButtonPanel.add(btnSaveIp, gbc); - tableButtonPanel.add(btnLoadIp, gbc); - - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 1; - pnlPoint.add(tableButtonPanel, gbc); - - return pnlPoint; - - } - - private static JPanel createOutputPointPnl() { - - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Client"); - - //Points to GTNET-SKT - JPanel pnlPoint = new JPanel(new GridBagLayout()); - - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(OPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - btnSend= new SoftEdgeButton("Send"); - btnSend.setEnabled(false); - SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; - SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; - SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); - SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); - - btnSend.addActionListener(new ActionListener() { - int txCnt = 0; - @Override - public void actionPerformed(ActionEvent e) { - - int size = numOutPoints * 4; - - try { - byte[] buffer = new byte[size]; - ByteBuffer outbuff = ByteBuffer.wrap(buffer); - txCnt++; - for (int i = 0; i> data = new Vector>(); - - public InputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktInputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - int numdecimals = 0; -// int offset = 0; - String tempStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - newValue = newValue.replaceAll(",", ""); - - // check for valid digits, decimal places, and range check - for (int i=0; i < newValue.length(); i++) { - char c = newValue.charAt(i); -// if(c == '-' && i == 0){ -// offset = 1; -// } - if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - } - if (save) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(tempStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col != 2) { - return false; - }else if(btnStart.getText()=="Stop"){ - return false; - } else { - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - class OutputTableModel extends AbstractTableModel { - - /** - * - */ - private static final long serialVersionUID = 8248501194260208975L; - private String[] columnNames; - private Vector> data = new Vector>(); - - public OutputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktOutputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - boolean realok = true; - boolean fracok = true; - int numdecimals = 0; - int offset = 0; - String typeStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - String real = null, frac = null; - newValue = newValue.replaceAll(",", ""); - if(newValue.contains("-")){ - offset = 1; - } - if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal - real = newValue.substring(offset, newValue.indexOf(".")); - frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); - if(real.length()>=10){ - for (int i=0; i < 10; i++) { - char c = real.charAt(i); - if (c > '2' && i == 0) - realok = false; - if (c > '1' && i == 1) - realok = false; - if (c > '4' && i == 2) - realok = false; - if (c > '7' && i == 3) - realok = false; - if (c > '4' && i == 4) - realok = false; - if (c > '8' && i == 5) - realok = false; - if (c > '3' && i == 6) - realok = false; - if (c > '6' && i == 7) - realok = false; - if (c > '4' && i == 8) - realok = false; - if (c > '7' && i == 9 && offset==0) - realok = false; - if (c == '7' && i == 9 && offset==0 && realok){ - if(real.contains("2147483647")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - if (c > '8' && i == 9 && offset==1) // for negative numbers - realok = false; - if (c == '8' && i == 9 && offset==1 && realok){ - if(real.contains("2147483648")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - - } - } - } - - if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ - real = newValue.substring(offset, newValue.length()); - } - if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ - real = newValue.substring(offset, newValue.indexOf(".")); - int i = Math.round(Float.valueOf(newValue)); - newValue = Integer.toString(i); - } - if(real.length()<=10){ - // check for valid digits and maximum range check - for (int i=0; i < real.length(); i++) { - char c = real.charAt(i); - if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - - if(real.length()>=10){ // The check for the maximum value - if (c > '2' && i == 0) - save = false; - if (c > '1' && i == 1) - save = false; - if (c > '4' && i == 2) - save = false; - if (c > '7' && i == 3) - save = false; - if (c > '4' && i == 4) - save = false; - if (c > '8' && i == 5) - save = false; - if (c > '3' && i == 6) - save = false; - if (c > '6' && i == 7) - save = false; - if (c > '4' && i == 8) - save = false; - if (c > '7' && i == 9 && offset==0) - save = false; - if (c > '8' && i == 9 && offset==1) // for negative numbers - save = false; - } - } - } - else - { - save = false; - } - if (save && realok && fracok) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(typeStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col < 1) { - return false; - } else { - if(data.elementAt(row).toString().contains("int")) - { - OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); - }else{ - OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); - } - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - //simple function to initialize parameters from the data file to variables - public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) - { - FileInputStream fileInputStream = null; - InputStreamReader inputStreamReader = null; - BufferedReader bufferedReader = null; - String[] var = null; - int points = 0; - - try { - String[] result = fileChooser(false,fname); - if (result != null){ - fileInputStream = new FileInputStream(result[1]); - inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); - bufferedReader = new BufferedReader(inputStreamReader); - - // use BufferedReader here - String s; - - while((s = bufferedReader.readLine()) != null){ - var = s.split(delim);//\t ,\n\r - gtnetSktName[points] = var[0]; - gtnetSktType[points] = var[1]; - points++; - } - } - } - catch (IOException e) { - e.printStackTrace(); - } - finally - { - try { - if (fileInputStream != null){ - fileInputStream.close(); - inputStreamReader.close(); - bufferedReader.close(); - } - } - catch (IOException e) { - e.printStackTrace(); - } - } - return points; - } - - //simple function to fill data to table - public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - OutputTableModel a = (OutputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - if(gtnetSktType[i].contains("int")){ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; - a.insertData(values); - }else{ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; - a.insertData(values); - } - } - - } - - //simple function to fill data to table - public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - InputTableModel a = (InputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; - a.insertData(values); - } - - } - - - //simple function to echo data to terminal - public static void echo(String msg) - { - if (DEBUG) { - System.out.println(msg); - } - - textArea.append(msg + newline); - - //Make sure the new text is visible, even if there - //was a selection in the text area. - textArea.setCaretPosition(textArea.getDocument().getLength()); - - } - - //simple function to save the file name and path - private static String[] fileChooser(boolean folderOnly, String fname) - { - String[] filePath = null; -// JFileChooser c = new JFileChooser(); - myJFileChooser = new JFileChooser(); - File myfile = new File(fname); - - if(folderOnly) - { - myJFileChooser.setDialogTitle("Select Folder..."); - myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File folder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = ""; - filePath[1] = folder.getAbsolutePath(); - } - } - else - { - myJFileChooser.setDialogTitle("Select File"); - myJFileChooser.setSelectedFile(myfile); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File fileFolder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = myJFileChooser.getSelectedFile().getName(); - filePath[1] = fileFolder.getAbsolutePath(); - } - } - - return filePath; - }//end saveAsChooser - - public static byte[] convertToByteArray(int value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putInt(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(float value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putFloat(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(byte value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.put(value); - return buffer.array(); - } - -} // End of Class - -class TCP_ListenTask extends Thread -{ - private volatile boolean stop = false; - int npoints = 0; - int ival[] = null; - float fval[] = null; -// ServerSocket serverSocket = null; -// Socket connectionSocket = null; - GTNET_SKT_TCP_GUI myskt = null; - - public TCP_ListenTask(GTNET_SKT_TCP_GUI myinst, int numPoints) throws SocketException { - this.npoints = numPoints; - ival = new int[numPoints]; - fval = new float[numPoints]; - this.myskt = myinst; - } - public void closeTask() { - try { - stop = true; - myskt.serverSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - public void run() { - while (!stop) { - ByteBuffer buf; - try - { - //1. creating a server socket, parameter is local port number - myskt.serverSocket = new ServerSocket(); - myskt.serverSocket.setReuseAddress(true); - // inSocket.setSoTimeout(10000); // DO NOT USE TIMEOUTS - myskt.connectionSocket = new Socket(); - - String ipAddr = GTNET_SKT_TCP_GUI.jTextFieldLocalIp.getText(); - int ipPort = Integer.parseInt(GTNET_SKT_TCP_GUI.jTextFieldLocalPort.getText()); - myskt.serverSocket.bind(new InetSocketAddress(ipAddr, ipPort)); - - //2. Wait for an incoming data - GTNET_SKT_TCP_GUI.echo("Server socket created. Waiting for incoming data..."); - - GTNET_SKT_TCP_GUI.btnTCP.setText("StopServer"); - GTNET_SKT_TCP_GUI.btnAddIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnDeleteIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnSaveIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnLoadIp.setEnabled(false); - GTNET_SKT_TCP_GUI.jTextFieldLocalIp.setEnabled(false); - GTNET_SKT_TCP_GUI.jTextFieldLocalPort.setEnabled(false); - - //communication loop - int rxCnt = 0; - while (!(myskt.serverSocket.isClosed())) - { - rxCnt++; - - myskt.connectionSocket = myskt.serverSocket.accept(); - GTNET_SKT_TCP_GUI.echo("Connection received from " + myskt.connectionSocket.getInetAddress().getHostName() + " : " + myskt.connectionSocket.getPort()); - GTNET_SKT_TCP_GUI.btnSend.setEnabled(true); - InputStream insktStream = myskt.connectionSocket.getInputStream(); - byte[] buff = new byte[(npoints) * 4]; // Buffer - int num = -1; // Bytes read - while( (num = insktStream.read(buff)) >= 0 ){ // Not EOS yet - // System.out.print(new String(buff,0,num) ); // Echo to console - // out.write( buff, 0, num ); // Echo to source - // out.flush(); // Flush stream - if (num==(npoints) * 4) - insktStream.close(); // This is necessary in Server mode to read new packets - break; - } // end while - if (num==(npoints) * 4){ - buf = ByteBuffer.wrap(buff); - for (int i = 0; i= 0 ){ // Not EOS yet -// // System.out.print(new String(buff,0,num) ); // Echo to console -// // out.write( buff, 0, num ); // Echo to source -// // out.flush(); // Flush stream -// if (num==(npoints) * 4) -// // inskt.close(); -// break; -// } // end while - - if (num==(npoints) * 4){ - ByteBuffer buf = ByteBuffer.wrap(buff); - for (int i = 0; i comboBox = new JComboBox(options); + comboBox.setMaximumRowCount(4); + TableCellEditor editorType = new DefaultCellEditor(comboBox); + + // The Server Table + String columnNames[] = {"Point #","Variable","Type","Value"}; + IPtable = new JTable(new InputTableModel(columnNames));//Create JTable + IPtable.setCellSelectionEnabled(true); + IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + IPtable.setFillsViewportHeight(true); + IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + IPtable.setRowSelectionAllowed(true); + IPtable.setColumnSelectionAllowed(false); + IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + JTableHeader header = IPtable.getTableHeader(); + header.setBackground(Color.LIGHT_GRAY); + IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + // The Client Table + OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable + OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + OPtable.setFillsViewportHeight(true); + OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + OPtable.setRowSelectionAllowed(true); + OPtable.setColumnSelectionAllowed(false); + OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); + OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + setup(); // The GUI + + setSize(520,745); + setLayout(new FlowLayout()); + setDefaultCloseOperation(EXIT_ON_CLOSE); + this.getContentPane().add(MainPnl); + setVisible(true); + + } + + public static void setup() + { + try { + host = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + // Main Panel + MainPnl = new JPanel(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.gridwidth = 1; + MainPnl.add(createTCP_Pnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 1; + gbc.gridwidth = 1; + MainPnl.add(createInputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 2; + gbc.gridwidth = 1; + MainPnl.add(createOutputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 3; + gbc.gridwidth = 1; + MainPnl.add(createMsgPnl(), gbc); + + } + + private static JPanel createTCP_Pnl() { + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Communication Mode"); + JPanel pnlTCP = new JPanel(new GridBagLayout()); + pnlTCP.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(2,2,2,2))); + Object options[] = { "Client", "Server" }; + final JComboBox comboBox = new JComboBox(options); + btnTCP= new SoftEdgeButton("Connect"); + + lblLocalIp = new JLabel("Local Server, IP Address:"); + jTextFieldLocalIp = new JTextField("", 10); + jTextFieldLocalIp.setText(host.getHostAddress()); + jTextFieldLocalIp.setEditable(true); + + lblLocalPort = new JLabel("Port"); + jTextFieldLocalPort = new JTextField("", 6); + jTextFieldLocalPort.setText("12345"); + + jTextFieldLocalIp.setVisible(false); + jTextFieldLocalPort.setVisible(false); + lblLocalIp.setVisible(false); + lblLocalPort.setVisible(false); + + lblRemoteIp = new JLabel("Remote Server, IP Address:"); + jTextFieldRemoteIp = new JTextField("", 9); + jTextFieldRemoteIp.setText(host.getHostAddress()); + if (DEBUG) { + jTextFieldRemoteIp.setText("172.24.9.185"); + } + jTextFieldRemoteIp.setEditable(true); + + lblRemotePort = new JLabel("Port"); + jTextFieldRemotePort = new JTextField("", 5); + jTextFieldRemotePort.setText("12345"); + + + comboBox.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(comboBox.getSelectedIndex()==0) + { + btnTCP.setText("Connect"); + jTextFieldLocalIp.setVisible(false); + jTextFieldLocalPort.setVisible(false); + lblLocalIp.setVisible(false); + lblLocalPort.setVisible(false); + lblRemoteIp.setVisible(true); + jTextFieldRemoteIp.setVisible(true); + lblRemotePort.setVisible(true); + jTextFieldRemotePort.setVisible(true); + } + else + { + btnTCP.setText("Listen"); + jTextFieldLocalIp.setVisible(true); + jTextFieldLocalPort.setVisible(true); + lblLocalIp.setVisible(true); + lblLocalPort.setVisible(true); + lblRemoteIp.setVisible(false); + jTextFieldRemoteIp.setVisible(false); + lblRemotePort.setVisible(false); + jTextFieldRemotePort.setVisible(false); + } + + } + + }); + + btnTCP.addActionListener(new ActionListener() { + @SuppressWarnings("deprecation") + @Override + public void actionPerformed(ActionEvent e) { + if(btnTCP.getText()=="Listen") + { + echo("Server socket opening..."); + try { + serverProcess = new TCP_ListenTask(main_inst , numInPoints); + serverProcess.start(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + + return; + } + if(btnTCP.getText()=="StopServer") + { + btnTCP.setText("Listen"); + btnAddIp.setEnabled(true); + btnDeleteIp.setEnabled(true); + btnSaveIp.setEnabled(true); + btnLoadIp.setEnabled(true); + jTextFieldLocalIp.setEnabled(true); + jTextFieldLocalPort.setEnabled(true); + btnSend.setEnabled(false); + echo("Server socket closed..."); + serverProcess.closeTask(); + serverProcess.stop(); + return; + } + if(btnTCP.getText()=="Connect") + { + echo("Client socket opening..."); + try { + clientProcess = new TCP_ConnectTask(main_inst , numOutPoints); + clientProcess.start(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + return; + } + if(btnTCP.getText()=="StopClient") + { + clientProcess.closeTask(); + echo("Client socket closed..."); + return; + } + } + }); + + GridBagConstraints gbc = new GridBagConstraints(); + JPanel TCPoptions = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + TCPoptions.add(comboBox, gbc); + TCPoptions.add(btnTCP, gbc); + + JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + LocalPanel.add(comboBox, gbc); + LocalPanel.add(btnTCP, gbc); + LocalPanel.add(lblLocalIp, gbc); + LocalPanel.add(jTextFieldLocalIp, gbc); + LocalPanel.add(lblLocalPort, gbc); + LocalPanel.add(jTextFieldLocalPort, gbc); + + JPanel RemotePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + + RemotePanel.add(lblRemoteIp, gbc); + RemotePanel.add(jTextFieldRemoteIp, gbc); + RemotePanel.add(lblRemotePort, gbc); + RemotePanel.add(jTextFieldRemotePort, gbc); + + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 1; + gbc.gridy = 0; + pnlTCP.add(TCPoptions, gbc); + gbc.gridx = 2; + gbc.gridy = 0; + pnlTCP.add(LocalPanel, gbc); + gbc.gridx = 3; + gbc.gridy = 0; + pnlTCP.add(RemotePanel, gbc); + return pnlTCP; + + } + + private static JPanel createInputPointPnl() { + + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Server"); + JPanel pnlPoint = new JPanel(new GridBagLayout()); + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(IPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + btnStart= new SoftEdgeButton("Start"); + btnAddIp = new SoftEdgeButton("Add") ; + btnDeleteIp = new SoftEdgeButton("Delete") ; + btnSaveIp = new SoftEdgeButton("Save Table"); + btnLoadIp = new SoftEdgeButton("Load Table"); + + btnAddIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + if(numInPoints< GTNETSKT_MAX_INPUTS){ + int i = numInPoints++; + InputTableModel a = (InputTableModel) IPtable.getModel(); + gtnetSktInputName[i] = "POINTin" + Integer.toString(i); + gtnetSktInputType[i] = "float"; + Object[] values = {i, gtnetSktInputName[i], gtnetSktInputType[i], ""}; + a.insertData(values); + }else{ + echo("Number of Server Points is at maximum of:" + GTNETSKT_MAX_INPUTS); + } + } + }); + + btnDeleteIp.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(IPtable.getSelectedRow() != -1){ + InputTableModel a = (InputTableModel) IPtable.getModel(); + a.removeRow(IPtable.getSelectedRow()); + numInPoints--; + for (int i=0; i < numInPoints; i++) { + a.setValueAt((Object) i, i, 0); + } + } + } + }); + + btnSaveIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + saveIPTable(); + } + }); + + btnLoadIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + loadIPTable(); + } + }); + + JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + tableButtonPanel.add(btnAddIp, gbc); + tableButtonPanel.add(btnDeleteIp, gbc); + tableButtonPanel.add(btnSaveIp, gbc); + tableButtonPanel.add(btnLoadIp, gbc); + + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 1; + pnlPoint.add(tableButtonPanel, gbc); + + return pnlPoint; + + } + + private static JPanel createOutputPointPnl() { + + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Client"); + + //Points to GTNET-SKT + JPanel pnlPoint = new JPanel(new GridBagLayout()); + + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(OPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + btnSend= new SoftEdgeButton("Send"); + btnSend.setEnabled(false); + SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; + SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; + SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); + SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); + + btnSend.addActionListener(new ActionListener() { + int txCnt = 0; + @Override + public void actionPerformed(ActionEvent e) { + + int size = numOutPoints * 4; + + try { + byte[] buffer = new byte[size]; + ByteBuffer outbuff = ByteBuffer.wrap(buffer); + txCnt++; + for (int i = 0; i> data = new Vector>(); + + public InputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktInputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + int numdecimals = 0; +// int offset = 0; + String tempStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + newValue = newValue.replaceAll(",", ""); + + // check for valid digits, decimal places, and range check + for (int i=0; i < newValue.length(); i++) { + char c = newValue.charAt(i); +// if(c == '-' && i == 0){ +// offset = 1; +// } + if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + } + if (save) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(tempStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col != 2) { + return false; + }else if(btnStart.getText()=="Stop"){ + return false; + } else { + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + class OutputTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 8248501194260208975L; + private String[] columnNames; + private Vector> data = new Vector>(); + + public OutputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktOutputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + boolean realok = true; + boolean fracok = true; + int numdecimals = 0; + int offset = 0; + String typeStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + String real = null, frac = null; + newValue = newValue.replaceAll(",", ""); + if(newValue.contains("-")){ + offset = 1; + } + if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal + real = newValue.substring(offset, newValue.indexOf(".")); + frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); + if(real.length()>=10){ + for (int i=0; i < 10; i++) { + char c = real.charAt(i); + if (c > '2' && i == 0) + realok = false; + if (c > '1' && i == 1) + realok = false; + if (c > '4' && i == 2) + realok = false; + if (c > '7' && i == 3) + realok = false; + if (c > '4' && i == 4) + realok = false; + if (c > '8' && i == 5) + realok = false; + if (c > '3' && i == 6) + realok = false; + if (c > '6' && i == 7) + realok = false; + if (c > '4' && i == 8) + realok = false; + if (c > '7' && i == 9 && offset==0) + realok = false; + if (c == '7' && i == 9 && offset==0 && realok){ + if(real.contains("2147483647")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + if (c > '8' && i == 9 && offset==1) // for negative numbers + realok = false; + if (c == '8' && i == 9 && offset==1 && realok){ + if(real.contains("2147483648")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + + } + } + } + + if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ + real = newValue.substring(offset, newValue.length()); + } + if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ + real = newValue.substring(offset, newValue.indexOf(".")); + int i = Math.round(Float.valueOf(newValue)); + newValue = Integer.toString(i); + } + if(real.length()<=10){ + // check for valid digits and maximum range check + for (int i=0; i < real.length(); i++) { + char c = real.charAt(i); + if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + + if(real.length()>=10){ // The check for the maximum value + if (c > '2' && i == 0) + save = false; + if (c > '1' && i == 1) + save = false; + if (c > '4' && i == 2) + save = false; + if (c > '7' && i == 3) + save = false; + if (c > '4' && i == 4) + save = false; + if (c > '8' && i == 5) + save = false; + if (c > '3' && i == 6) + save = false; + if (c > '6' && i == 7) + save = false; + if (c > '4' && i == 8) + save = false; + if (c > '7' && i == 9 && offset==0) + save = false; + if (c > '8' && i == 9 && offset==1) // for negative numbers + save = false; + } + } + } + else + { + save = false; + } + if (save && realok && fracok) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(typeStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col < 1) { + return false; + } else { + if(data.elementAt(row).toString().contains("int")) + { + OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); + }else{ + OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); + } + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + //simple function to initialize parameters from the data file to variables + public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) + { + FileInputStream fileInputStream = null; + InputStreamReader inputStreamReader = null; + BufferedReader bufferedReader = null; + String[] var = null; + int points = 0; + + try { + String[] result = fileChooser(false,fname); + if (result != null){ + fileInputStream = new FileInputStream(result[1]); + inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); + bufferedReader = new BufferedReader(inputStreamReader); + + // use BufferedReader here + String s; + + while((s = bufferedReader.readLine()) != null){ + var = s.split(delim);//\t ,\n\r + gtnetSktName[points] = var[0]; + gtnetSktType[points] = var[1]; + points++; + } + } + } + catch (IOException e) { + e.printStackTrace(); + } + finally + { + try { + if (fileInputStream != null){ + fileInputStream.close(); + inputStreamReader.close(); + bufferedReader.close(); + } + } + catch (IOException e) { + e.printStackTrace(); + } + } + return points; + } + + //simple function to fill data to table + public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + OutputTableModel a = (OutputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + if(gtnetSktType[i].contains("int")){ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; + a.insertData(values); + }else{ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; + a.insertData(values); + } + } + + } + + //simple function to fill data to table + public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + InputTableModel a = (InputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; + a.insertData(values); + } + + } + + + //simple function to echo data to terminal + public static void echo(String msg) + { + if (DEBUG) { + System.out.println(msg); + } + + textArea.append(msg + newline); + + //Make sure the new text is visible, even if there + //was a selection in the text area. + textArea.setCaretPosition(textArea.getDocument().getLength()); + + } + + //simple function to save the file name and path + private static String[] fileChooser(boolean folderOnly, String fname) + { + String[] filePath = null; +// JFileChooser c = new JFileChooser(); + myJFileChooser = new JFileChooser(); + File myfile = new File(fname); + + if(folderOnly) + { + myJFileChooser.setDialogTitle("Select Folder..."); + myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File folder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = ""; + filePath[1] = folder.getAbsolutePath(); + } + } + else + { + myJFileChooser.setDialogTitle("Select File"); + myJFileChooser.setSelectedFile(myfile); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File fileFolder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = myJFileChooser.getSelectedFile().getName(); + filePath[1] = fileFolder.getAbsolutePath(); + } + } + + return filePath; + }//end saveAsChooser + + public static byte[] convertToByteArray(int value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putInt(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(float value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putFloat(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(byte value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.put(value); + return buffer.array(); + } + +} // End of Class + +class TCP_ListenTask extends Thread +{ + private volatile boolean stop = false; + int npoints = 0; + int ival[] = null; + float fval[] = null; +// ServerSocket serverSocket = null; +// Socket connectionSocket = null; + GTNET_SKT_TCP_GUI myskt = null; + + public TCP_ListenTask(GTNET_SKT_TCP_GUI myinst, int numPoints) throws SocketException { + this.npoints = numPoints; + ival = new int[numPoints]; + fval = new float[numPoints]; + this.myskt = myinst; + } + public void closeTask() { + try { + stop = true; + myskt.serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void run() { + while (!stop) { + ByteBuffer buf; + try + { + //1. creating a server socket, parameter is local port number + myskt.serverSocket = new ServerSocket(); + myskt.serverSocket.setReuseAddress(true); + // inSocket.setSoTimeout(10000); // DO NOT USE TIMEOUTS + myskt.connectionSocket = new Socket(); + + String ipAddr = GTNET_SKT_TCP_GUI.jTextFieldLocalIp.getText(); + int ipPort = Integer.parseInt(GTNET_SKT_TCP_GUI.jTextFieldLocalPort.getText()); + myskt.serverSocket.bind(new InetSocketAddress(ipAddr, ipPort)); + + //2. Wait for an incoming data + GTNET_SKT_TCP_GUI.echo("Server socket created. Waiting for incoming data..."); + + GTNET_SKT_TCP_GUI.btnTCP.setText("StopServer"); + GTNET_SKT_TCP_GUI.btnAddIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnDeleteIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnSaveIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnLoadIp.setEnabled(false); + GTNET_SKT_TCP_GUI.jTextFieldLocalIp.setEnabled(false); + GTNET_SKT_TCP_GUI.jTextFieldLocalPort.setEnabled(false); + + //communication loop + int rxCnt = 0; + while (!(myskt.serverSocket.isClosed())) + { + rxCnt++; + + myskt.connectionSocket = myskt.serverSocket.accept(); + GTNET_SKT_TCP_GUI.echo("Connection received from " + myskt.connectionSocket.getInetAddress().getHostName() + " : " + myskt.connectionSocket.getPort()); + GTNET_SKT_TCP_GUI.btnSend.setEnabled(true); + InputStream insktStream = myskt.connectionSocket.getInputStream(); + byte[] buff = new byte[(npoints) * 4]; // Buffer + int num = -1; // Bytes read + while( (num = insktStream.read(buff)) >= 0 ){ // Not EOS yet + // System.out.print(new String(buff,0,num) ); // Echo to console + // out.write( buff, 0, num ); // Echo to source + // out.flush(); // Flush stream + if (num==(npoints) * 4) + insktStream.close(); // This is necessary in Server mode to read new packets + break; + } // end while + if (num==(npoints) * 4){ + buf = ByteBuffer.wrap(buff); + for (int i = 0; i= 0 ){ // Not EOS yet +// // System.out.print(new String(buff,0,num) ); // Echo to console +// // out.write( buff, 0, num ); // Echo to source +// // out.flush(); // Flush stream +// if (num==(npoints) * 4) +// // inskt.close(); +// break; +// } // end while + + if (num==(npoints) * 4){ + ByteBuffer buf = ByteBuffer.wrap(buff); + for (int i = 0; i comboBox = new JComboBox(options); - comboBox.setMaximumRowCount(4); - TableCellEditor editorType = new DefaultCellEditor(comboBox); - - // The Server Table - String columnNames[] = {"Point #","Variable","Type","Value"}; - IPtable = new JTable(new InputTableModel(columnNames));//Create JTable - IPtable.setCellSelectionEnabled(true); - IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - IPtable.setFillsViewportHeight(true); - IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - IPtable.setRowSelectionAllowed(true); - IPtable.setColumnSelectionAllowed(false); - IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - JTableHeader header = IPtable.getTableHeader(); - header.setBackground(Color.LIGHT_GRAY); - IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - // The Client Table - OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable - OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - OPtable.setFillsViewportHeight(true); - OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - OPtable.setRowSelectionAllowed(true); - OPtable.setColumnSelectionAllowed(false); - OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); - OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - setup(); // The GUI - - setSize(555,745); - setLayout(new FlowLayout()); - setDefaultCloseOperation(EXIT_ON_CLOSE); - this.getContentPane().add(MainPnl); - setVisible(true); - - } - - public static void setup() - { - try { - host = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - - // Main Panel - MainPnl = new JPanel(new GridBagLayout()); - GridBagConstraints gbc = new GridBagConstraints(); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.gridwidth = 1; - MainPnl.add(createInputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 1; - gbc.gridwidth = 1; - MainPnl.add(createOutputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 2; - gbc.gridwidth = 1; - MainPnl.add(createMsgPnl(), gbc); - - } - - private static JPanel createInputPointPnl() { - - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Server"); - JPanel pnlPoint = new JPanel(new GridBagLayout()); - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(IPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - jTextFieldLocalIp = new JTextField("", 10); - jTextFieldLocalIp.setText(host.getHostAddress()); - jTextFieldLocalIp.setEditable(true); - - jTextFieldLocalPort = new JTextField("", 6); - jTextFieldLocalPort.setText("12345"); - - btnStart= new SoftEdgeButton("Start"); - btnAddIp = new SoftEdgeButton("Add") ; - btnDeleteIp = new SoftEdgeButton("Delete") ; - btnSaveIp = new SoftEdgeButton("Save Table"); - btnLoadIp = new SoftEdgeButton("Load Table"); - - btnStart.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Start") - { - GTNET_SKT_UDP_GUI.btnStart.setText("Stop"); - GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(false); - GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(false); - GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(false); -// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(false); -// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(false); - try { - GTNET_SKT_UDP_GUI.process = new UDP_ServerTask(GTNET_SKT_UDP_GUI.numInPoints); - GTNET_SKT_UDP_GUI.process.execute(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - } - else - { - GTNET_SKT_UDP_GUI.btnStart.setText("Start"); - GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(true); - GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(true); - GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(true); -// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(true); -// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(true); - GTNET_SKT_UDP_GUI.process.closeTask(); - GTNET_SKT_UDP_GUI.process.cancel(true); - GTNET_SKT_UDP_GUI.echo("Server socket closed."); - } - } - }); - - btnAddIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) - { - if(GTNET_SKT_UDP_GUI.numInPoints< GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS){ - int i = GTNET_SKT_UDP_GUI.numInPoints++; - InputTableModel a = (InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); - GTNET_SKT_UDP_GUI.gtnetSktInputName[i] = "POINTin" + Integer.toString(i); - GTNET_SKT_UDP_GUI.gtnetSktInputType[i] = "float"; - Object[] values = {i, GTNET_SKT_UDP_GUI.gtnetSktInputName[i], GTNET_SKT_UDP_GUI.gtnetSktInputType[i], ""}; - a.insertData(values); - }else{ - GTNET_SKT_UDP_GUI.echo("Number of Server Points is at maximum of:" + GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS); - } - } - }); - - btnDeleteIp.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow() != -1){ - GTNET_SKT_UDP_GUI.InputTableModel a = (GTNET_SKT_UDP_GUI.InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); - a.removeRow(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow()); - GTNET_SKT_UDP_GUI.numInPoints--; - for (int i=0; i < GTNET_SKT_UDP_GUI.numInPoints; i++) { - a.setValueAt((Object) i, i, 0); - } - } - } - }); - - btnSaveIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - saveIPTable(); - } - }); - - btnLoadIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - loadIPTable(); - } - }); - - JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(2, 2, 2, 2); - JLabel lblLocalIp = new JLabel("Local Server Settings, IP Address:"); - LocalPanel.add(lblLocalIp, gbc); - LocalPanel.add(jTextFieldLocalIp, gbc); - LocalPanel.add(new JLabel("Port:"), gbc); - LocalPanel.add(jTextFieldLocalPort, gbc); - LocalPanel.add(btnStart, gbc); - JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - tableButtonPanel.add(btnAddIp, gbc); - tableButtonPanel.add(btnDeleteIp, gbc); - tableButtonPanel.add(btnSaveIp, gbc); - tableButtonPanel.add(btnLoadIp, gbc); - - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 1; - pnlPoint.add(LocalPanel, gbc); - gbc.gridx = 0; - gbc.gridy = 2; - pnlPoint.add(tableButtonPanel, gbc); - - return pnlPoint; - - } - - private static JPanel createOutputPointPnl() { - - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Client"); - - //Points to GTNET-SKT - JPanel pnlPoint = new JPanel(new GridBagLayout()); - - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(OPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - jTextFieldRemoteIp = new JTextField("", 9); - jTextFieldRemoteIp.setText(host.getHostAddress()); - if (DEBUG) { - jTextFieldRemoteIp.setText("172.24.9.185"); - } - jTextFieldRemoteIp.setEditable(true); - - jTextFieldRemotePort = new JTextField("", 5); - jTextFieldRemotePort.setText("12345"); - - btnSend= new SoftEdgeButton("Send"); - SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; - SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; - SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); - SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); - - btnSend.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - DatagramSocket outSocket = null; - int size = GTNET_SKT_UDP_GUI.numOutPoints * 4; - try { - InetAddress gtnetIp = InetAddress.getByName(GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.getText()); - int gtnetPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldRemotePort.getText()); - byte[] buffer = new byte[size]; - ByteBuffer outbuff = ByteBuffer.wrap(buffer); - - for (int i = 0; i> data = new Vector>(); - - public InputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktInputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - int numdecimals = 0; -// int offset = 0; - String tempStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - newValue = newValue.replaceAll(",", ""); - - // check for valid digits, decimal places, and range check - for (int i=0; i < newValue.length(); i++) { - char c = newValue.charAt(i); -// if(c == '-' && i == 0){ -// offset = 1; -// } - if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - } - if (save) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(tempStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col != 2) { - return false; - }else if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Stop"){ - return false; - } else { - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - class OutputTableModel extends AbstractTableModel { - - /** - * - */ - private static final long serialVersionUID = 8248501194260208975L; - private String[] columnNames; - private Vector> data = new Vector>(); - - public OutputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktOutputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - boolean realok = true; - boolean fracok = true; - int numdecimals = 0; - int offset = 0; - String typeStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - String real = null, frac = null; - newValue = newValue.replaceAll(",", ""); - if(newValue.contains("-")){ - offset = 1; - } - if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal - real = newValue.substring(offset, newValue.indexOf(".")); - frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); - if(real.length()>=10){ - for (int i=0; i < 10; i++) { - char c = real.charAt(i); - if (c > '2' && i == 0) - realok = false; - if (c > '1' && i == 1) - realok = false; - if (c > '4' && i == 2) - realok = false; - if (c > '7' && i == 3) - realok = false; - if (c > '4' && i == 4) - realok = false; - if (c > '8' && i == 5) - realok = false; - if (c > '3' && i == 6) - realok = false; - if (c > '6' && i == 7) - realok = false; - if (c > '4' && i == 8) - realok = false; - if (c > '7' && i == 9 && offset==0) - realok = false; - if (c == '7' && i == 9 && offset==0 && realok){ - if(real.contains("2147483647")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - if (c > '8' && i == 9 && offset==1) // for negative numbers - realok = false; - if (c == '8' && i == 9 && offset==1 && realok){ - if(real.contains("2147483648")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - - } - } - } - - if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ - real = newValue.substring(offset, newValue.length()); - } - if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ - real = newValue.substring(offset, newValue.indexOf(".")); - int i = Math.round(Float.valueOf(newValue)); - newValue = Integer.toString(i); - } - if(real.length()<=10){ - // check for valid digits and maximum range check - for (int i=0; i < real.length(); i++) { - char c = real.charAt(i); - if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - - if(real.length()>=10){ // The check for the maximum value - if (c > '2' && i == 0) - save = false; - if (c > '1' && i == 1) - save = false; - if (c > '4' && i == 2) - save = false; - if (c > '7' && i == 3) - save = false; - if (c > '4' && i == 4) - save = false; - if (c > '8' && i == 5) - save = false; - if (c > '3' && i == 6) - save = false; - if (c > '6' && i == 7) - save = false; - if (c > '4' && i == 8) - save = false; - if (c > '7' && i == 9 && offset==0) - save = false; - if (c > '8' && i == 9 && offset==1) // for negative numbers - save = false; - } - } - } - else - { - save = false; - } - if (save && realok && fracok) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(typeStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col < 1) { - return false; - } else { - if(data.elementAt(row).toString().contains("int")) - { - OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); - }else{ - OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); - } - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - public static void main(String args[]) - { - new GTNET_SKT_UDP_GUI(); - - fillInputData(IPtable,numInPoints,gtnetSktInputName,gtnetSktInputType); //Server Data Point File - - fillOutputData(OPtable, numOutPoints, gtnetSktOutputName, gtnetSktOutputType); //Client Data Point File - } - - //simple function to initialize parameters from the data file to variables - public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) - { - FileInputStream fileInputStream = null; - InputStreamReader inputStreamReader = null; - BufferedReader bufferedReader = null; - String[] var = null; - int points = 0; - - try { - String[] result = fileChooser(false,fname); - if (result != null){ - fileInputStream = new FileInputStream(result[1]); - inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); - bufferedReader = new BufferedReader(inputStreamReader); - - // use BufferedReader here - String s; - - while((s = bufferedReader.readLine()) != null){ - var = s.split("\t");//\t ,\n\r - gtnetSktName[points] = var[0]; - gtnetSktType[points] = var[1]; - points++; - } - } - } - catch (IOException e) { - e.printStackTrace(); - } - finally - { - try { - if (fileInputStream != null){ - fileInputStream.close(); - inputStreamReader.close(); - bufferedReader.close(); - } - } - catch (IOException e) { - e.printStackTrace(); - } - } - return points; - } - - //simple function to fill data to table - public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - OutputTableModel a = (OutputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - if(gtnetSktType[i].contains("int")){ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; - a.insertData(values); - }else{ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; - a.insertData(values); - } - } - - } - - //simple function to fill data to table - public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - InputTableModel a = (InputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; - a.insertData(values); - } - - } - - - //simple function to echo data to terminal - public static void echo(String msg) - { - if (DEBUG) { - System.out.println(msg); - } - - textArea.append(msg + newline); - - //Make sure the new text is visible, even if there - //was a selection in the text area. - textArea.setCaretPosition(textArea.getDocument().getLength()); - - } - - //simple function to save the file name and path - private static String[] fileChooser(boolean folderOnly, String fname) - { - String[] filePath = null; -// JFileChooser c = new JFileChooser(); - myJFileChooser = new JFileChooser(); - File myfile = new File(fname); - - if(folderOnly) - { - myJFileChooser.setDialogTitle("Select Folder..."); - myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File folder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = ""; - filePath[1] = folder.getAbsolutePath(); - } - } - else - { - myJFileChooser.setDialogTitle("Select File"); - myJFileChooser.setSelectedFile(myfile); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File fileFolder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = myJFileChooser.getSelectedFile().getName(); - filePath[1] = fileFolder.getAbsolutePath(); - } - } - - return filePath; - }//end saveAsChooser - - public static byte[] convertToByteArray(int value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putInt(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(float value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putFloat(value); - return buffer.array(); - } - - -} // End of Class - - -/* - * CancelListener - */ -class CancelListener implements ActionListener -{ - public void actionPerformed(ActionEvent e) - { - System.exit(0); - } - } - - -class UDP_ServerTask extends SwingWorker -{ - int npoints = 0; - int ival[] = null; - float fval[] = null; - - public UDP_ServerTask(int numPoints) throws SocketException { - this.npoints = numPoints; - ival = new int[numPoints]; - fval = new float[numPoints]; - } - public void closeTask() { - GTNET_SKT_UDP_GUI.inSocket.close(); - System.out.println("UDP_ServerTask Closed Now"); - GTNET_SKT_UDP_GUI.echo("UDP_ServerTask Closed Now"); - } - @Override - protected Object doInBackground() throws Exception { - ByteBuffer buf; - byte[] data = null; - byte[] inBuf; - - - try - { - //1. creating a server socket, parameter is local port number - GTNET_SKT_UDP_GUI.inSocket = new DatagramSocket(null); - GTNET_SKT_UDP_GUI.inSocket.setReuseAddress(true); - - String ipAddr = GTNET_SKT_UDP_GUI.jTextFieldLocalIp.getText(); - int localPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldLocalPort.getText()); - GTNET_SKT_UDP_GUI.inSocket.bind(new InetSocketAddress(ipAddr, localPort)); - - //buffer to receive incoming data - inBuf = new byte[(npoints) * 4]; - DatagramPacket inPacket = new DatagramPacket(inBuf, inBuf.length); - - //2. Wait for an incoming data - GTNET_SKT_UDP_GUI.echo("Server socket created. Waiting for incoming data..."); - - //communication loop - int rxCnt = 0; - while(!isCancelled()) - { - rxCnt++; - - GTNET_SKT_UDP_GUI.inSocket.receive(inPacket); - data = inPacket.getData(); - buf = ByteBuffer.wrap(data); - for (int i = 0; i comboBox = new JComboBox(options); + comboBox.setMaximumRowCount(4); + TableCellEditor editorType = new DefaultCellEditor(comboBox); + + // The Server Table + String columnNames[] = {"Point #","Variable","Type","Value"}; + IPtable = new JTable(new InputTableModel(columnNames));//Create JTable + IPtable.setCellSelectionEnabled(true); + IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + IPtable.setFillsViewportHeight(true); + IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + IPtable.setRowSelectionAllowed(true); + IPtable.setColumnSelectionAllowed(false); + IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + JTableHeader header = IPtable.getTableHeader(); + header.setBackground(Color.LIGHT_GRAY); + IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + // The Client Table + OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable + OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + OPtable.setFillsViewportHeight(true); + OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + OPtable.setRowSelectionAllowed(true); + OPtable.setColumnSelectionAllowed(false); + OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); + OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + setup(); // The GUI + + setSize(555,745); + setLayout(new FlowLayout()); + setDefaultCloseOperation(EXIT_ON_CLOSE); + this.getContentPane().add(MainPnl); + setVisible(true); + + } + + public static void setup() + { + try { + host = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + // Main Panel + MainPnl = new JPanel(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.gridwidth = 1; + MainPnl.add(createInputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 1; + gbc.gridwidth = 1; + MainPnl.add(createOutputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 2; + gbc.gridwidth = 1; + MainPnl.add(createMsgPnl(), gbc); + + } + + private static JPanel createInputPointPnl() { + + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Server"); + JPanel pnlPoint = new JPanel(new GridBagLayout()); + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(IPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + jTextFieldLocalIp = new JTextField("", 10); + jTextFieldLocalIp.setText(host.getHostAddress()); + jTextFieldLocalIp.setEditable(true); + + jTextFieldLocalPort = new JTextField("", 6); + jTextFieldLocalPort.setText("12345"); + + btnStart= new SoftEdgeButton("Start"); + btnAddIp = new SoftEdgeButton("Add") ; + btnDeleteIp = new SoftEdgeButton("Delete") ; + btnSaveIp = new SoftEdgeButton("Save Table"); + btnLoadIp = new SoftEdgeButton("Load Table"); + + btnStart.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Start") + { + GTNET_SKT_UDP_GUI.btnStart.setText("Stop"); + GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(false); + GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(false); + GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(false); +// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(false); +// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(false); + try { + GTNET_SKT_UDP_GUI.process = new UDP_ServerTask(GTNET_SKT_UDP_GUI.numInPoints); + GTNET_SKT_UDP_GUI.process.execute(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + } + else + { + GTNET_SKT_UDP_GUI.btnStart.setText("Start"); + GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(true); + GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(true); + GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(true); +// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(true); +// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(true); + GTNET_SKT_UDP_GUI.process.closeTask(); + GTNET_SKT_UDP_GUI.process.cancel(true); + GTNET_SKT_UDP_GUI.echo("Server socket closed."); + } + } + }); + + btnAddIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + if(GTNET_SKT_UDP_GUI.numInPoints< GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS){ + int i = GTNET_SKT_UDP_GUI.numInPoints++; + InputTableModel a = (InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); + GTNET_SKT_UDP_GUI.gtnetSktInputName[i] = "POINTin" + Integer.toString(i); + GTNET_SKT_UDP_GUI.gtnetSktInputType[i] = "float"; + Object[] values = {i, GTNET_SKT_UDP_GUI.gtnetSktInputName[i], GTNET_SKT_UDP_GUI.gtnetSktInputType[i], ""}; + a.insertData(values); + }else{ + GTNET_SKT_UDP_GUI.echo("Number of Server Points is at maximum of:" + GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS); + } + } + }); + + btnDeleteIp.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow() != -1){ + GTNET_SKT_UDP_GUI.InputTableModel a = (GTNET_SKT_UDP_GUI.InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); + a.removeRow(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow()); + GTNET_SKT_UDP_GUI.numInPoints--; + for (int i=0; i < GTNET_SKT_UDP_GUI.numInPoints; i++) { + a.setValueAt((Object) i, i, 0); + } + } + } + }); + + btnSaveIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + saveIPTable(); + } + }); + + btnLoadIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + loadIPTable(); + } + }); + + JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(2, 2, 2, 2); + JLabel lblLocalIp = new JLabel("Local Server Settings, IP Address:"); + LocalPanel.add(lblLocalIp, gbc); + LocalPanel.add(jTextFieldLocalIp, gbc); + LocalPanel.add(new JLabel("Port:"), gbc); + LocalPanel.add(jTextFieldLocalPort, gbc); + LocalPanel.add(btnStart, gbc); + JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + tableButtonPanel.add(btnAddIp, gbc); + tableButtonPanel.add(btnDeleteIp, gbc); + tableButtonPanel.add(btnSaveIp, gbc); + tableButtonPanel.add(btnLoadIp, gbc); + + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 1; + pnlPoint.add(LocalPanel, gbc); + gbc.gridx = 0; + gbc.gridy = 2; + pnlPoint.add(tableButtonPanel, gbc); + + return pnlPoint; + + } + + private static JPanel createOutputPointPnl() { + + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Client"); + + //Points to GTNET-SKT + JPanel pnlPoint = new JPanel(new GridBagLayout()); + + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(OPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + jTextFieldRemoteIp = new JTextField("", 9); + jTextFieldRemoteIp.setText(host.getHostAddress()); + if (DEBUG) { + jTextFieldRemoteIp.setText("172.24.9.185"); + } + jTextFieldRemoteIp.setEditable(true); + + jTextFieldRemotePort = new JTextField("", 5); + jTextFieldRemotePort.setText("12345"); + + btnSend= new SoftEdgeButton("Send"); + SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; + SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; + SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); + SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); + + btnSend.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + DatagramSocket outSocket = null; + int size = GTNET_SKT_UDP_GUI.numOutPoints * 4; + try { + InetAddress gtnetIp = InetAddress.getByName(GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.getText()); + int gtnetPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldRemotePort.getText()); + byte[] buffer = new byte[size]; + ByteBuffer outbuff = ByteBuffer.wrap(buffer); + + for (int i = 0; i> data = new Vector>(); + + public InputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktInputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + int numdecimals = 0; +// int offset = 0; + String tempStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + newValue = newValue.replaceAll(",", ""); + + // check for valid digits, decimal places, and range check + for (int i=0; i < newValue.length(); i++) { + char c = newValue.charAt(i); +// if(c == '-' && i == 0){ +// offset = 1; +// } + if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + } + if (save) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(tempStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col != 2) { + return false; + }else if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Stop"){ + return false; + } else { + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + class OutputTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 8248501194260208975L; + private String[] columnNames; + private Vector> data = new Vector>(); + + public OutputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktOutputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + boolean realok = true; + boolean fracok = true; + int numdecimals = 0; + int offset = 0; + String typeStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + String real = null, frac = null; + newValue = newValue.replaceAll(",", ""); + if(newValue.contains("-")){ + offset = 1; + } + if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal + real = newValue.substring(offset, newValue.indexOf(".")); + frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); + if(real.length()>=10){ + for (int i=0; i < 10; i++) { + char c = real.charAt(i); + if (c > '2' && i == 0) + realok = false; + if (c > '1' && i == 1) + realok = false; + if (c > '4' && i == 2) + realok = false; + if (c > '7' && i == 3) + realok = false; + if (c > '4' && i == 4) + realok = false; + if (c > '8' && i == 5) + realok = false; + if (c > '3' && i == 6) + realok = false; + if (c > '6' && i == 7) + realok = false; + if (c > '4' && i == 8) + realok = false; + if (c > '7' && i == 9 && offset==0) + realok = false; + if (c == '7' && i == 9 && offset==0 && realok){ + if(real.contains("2147483647")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + if (c > '8' && i == 9 && offset==1) // for negative numbers + realok = false; + if (c == '8' && i == 9 && offset==1 && realok){ + if(real.contains("2147483648")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + + } + } + } + + if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ + real = newValue.substring(offset, newValue.length()); + } + if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ + real = newValue.substring(offset, newValue.indexOf(".")); + int i = Math.round(Float.valueOf(newValue)); + newValue = Integer.toString(i); + } + if(real.length()<=10){ + // check for valid digits and maximum range check + for (int i=0; i < real.length(); i++) { + char c = real.charAt(i); + if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + + if(real.length()>=10){ // The check for the maximum value + if (c > '2' && i == 0) + save = false; + if (c > '1' && i == 1) + save = false; + if (c > '4' && i == 2) + save = false; + if (c > '7' && i == 3) + save = false; + if (c > '4' && i == 4) + save = false; + if (c > '8' && i == 5) + save = false; + if (c > '3' && i == 6) + save = false; + if (c > '6' && i == 7) + save = false; + if (c > '4' && i == 8) + save = false; + if (c > '7' && i == 9 && offset==0) + save = false; + if (c > '8' && i == 9 && offset==1) // for negative numbers + save = false; + } + } + } + else + { + save = false; + } + if (save && realok && fracok) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(typeStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col < 1) { + return false; + } else { + if(data.elementAt(row).toString().contains("int")) + { + OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); + }else{ + OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); + } + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + public static void main(String args[]) + { + new GTNET_SKT_UDP_GUI(); + + fillInputData(IPtable,numInPoints,gtnetSktInputName,gtnetSktInputType); //Server Data Point File + + fillOutputData(OPtable, numOutPoints, gtnetSktOutputName, gtnetSktOutputType); //Client Data Point File + } + + //simple function to initialize parameters from the data file to variables + public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) + { + FileInputStream fileInputStream = null; + InputStreamReader inputStreamReader = null; + BufferedReader bufferedReader = null; + String[] var = null; + int points = 0; + + try { + String[] result = fileChooser(false,fname); + if (result != null){ + fileInputStream = new FileInputStream(result[1]); + inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); + bufferedReader = new BufferedReader(inputStreamReader); + + // use BufferedReader here + String s; + + while((s = bufferedReader.readLine()) != null){ + var = s.split("\t");//\t ,\n\r + gtnetSktName[points] = var[0]; + gtnetSktType[points] = var[1]; + points++; + } + } + } + catch (IOException e) { + e.printStackTrace(); + } + finally + { + try { + if (fileInputStream != null){ + fileInputStream.close(); + inputStreamReader.close(); + bufferedReader.close(); + } + } + catch (IOException e) { + e.printStackTrace(); + } + } + return points; + } + + //simple function to fill data to table + public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + OutputTableModel a = (OutputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + if(gtnetSktType[i].contains("int")){ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; + a.insertData(values); + }else{ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; + a.insertData(values); + } + } + + } + + //simple function to fill data to table + public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + InputTableModel a = (InputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; + a.insertData(values); + } + + } + + + //simple function to echo data to terminal + public static void echo(String msg) + { + if (DEBUG) { + System.out.println(msg); + } + + textArea.append(msg + newline); + + //Make sure the new text is visible, even if there + //was a selection in the text area. + textArea.setCaretPosition(textArea.getDocument().getLength()); + + } + + //simple function to save the file name and path + private static String[] fileChooser(boolean folderOnly, String fname) + { + String[] filePath = null; +// JFileChooser c = new JFileChooser(); + myJFileChooser = new JFileChooser(); + File myfile = new File(fname); + + if(folderOnly) + { + myJFileChooser.setDialogTitle("Select Folder..."); + myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File folder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = ""; + filePath[1] = folder.getAbsolutePath(); + } + } + else + { + myJFileChooser.setDialogTitle("Select File"); + myJFileChooser.setSelectedFile(myfile); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File fileFolder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = myJFileChooser.getSelectedFile().getName(); + filePath[1] = fileFolder.getAbsolutePath(); + } + } + + return filePath; + }//end saveAsChooser + + public static byte[] convertToByteArray(int value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putInt(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(float value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putFloat(value); + return buffer.array(); + } + + +} // End of Class + + +/* + * CancelListener + */ +class CancelListener implements ActionListener +{ + public void actionPerformed(ActionEvent e) + { + System.exit(0); + } + } + + +class UDP_ServerTask extends SwingWorker +{ + int npoints = 0; + int ival[] = null; + float fval[] = null; + + public UDP_ServerTask(int numPoints) throws SocketException { + this.npoints = numPoints; + ival = new int[numPoints]; + fval = new float[numPoints]; + } + public void closeTask() { + GTNET_SKT_UDP_GUI.inSocket.close(); + System.out.println("UDP_ServerTask Closed Now"); + GTNET_SKT_UDP_GUI.echo("UDP_ServerTask Closed Now"); + } + @Override + protected Object doInBackground() throws Exception { + ByteBuffer buf; + byte[] data = null; + byte[] inBuf; + + + try + { + //1. creating a server socket, parameter is local port number + GTNET_SKT_UDP_GUI.inSocket = new DatagramSocket(null); + GTNET_SKT_UDP_GUI.inSocket.setReuseAddress(true); + + String ipAddr = GTNET_SKT_UDP_GUI.jTextFieldLocalIp.getText(); + int localPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldLocalPort.getText()); + GTNET_SKT_UDP_GUI.inSocket.bind(new InetSocketAddress(ipAddr, localPort)); + + //buffer to receive incoming data + inBuf = new byte[(npoints) * 4]; + DatagramPacket inPacket = new DatagramPacket(inBuf, inBuf.length); + + //2. Wait for an incoming data + GTNET_SKT_UDP_GUI.echo("Server socket created. Waiting for incoming data..."); + + //communication loop + int rxCnt = 0; + while(!isCancelled()) + { + rxCnt++; + + GTNET_SKT_UDP_GUI.inSocket.receive(inPacket); + data = inPacket.getData(); + buf = ByteBuffer.wrap(data); + for (int i = 0; i comboBox = new JComboBox(options); - comboBox.setMaximumRowCount(4); - TableCellEditor editorType = new DefaultCellEditor(comboBox); - - // The Server Table - String columnNames[] = {"Point #","Variable","Type","Value"}; - IPtable = new JTable(new InputTableModel(columnNames));//Create JTable - IPtable.setCellSelectionEnabled(true); - IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - IPtable.setFillsViewportHeight(true); - IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - IPtable.setRowSelectionAllowed(true); - IPtable.setColumnSelectionAllowed(false); - IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - JTableHeader header = IPtable.getTableHeader(); - header.setBackground(Color.LIGHT_GRAY); - IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - // The Client Table - OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable - OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - OPtable.setFillsViewportHeight(true); - OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - OPtable.setRowSelectionAllowed(true); - OPtable.setColumnSelectionAllowed(false); - OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); - OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - setup(); // The GUI - - setSize(520,745); - setLayout(new FlowLayout()); - setDefaultCloseOperation(EXIT_ON_CLOSE); - this.getContentPane().add(MainPnl); - setVisible(true); - - } - - public static void setup() - { - try { - host = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - - // Main Panel - MainPnl = new JPanel(new GridBagLayout()); - GridBagConstraints gbc = new GridBagConstraints(); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.gridwidth = 1; - MainPnl.add(createTCP_Pnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 1; - gbc.gridwidth = 1; - MainPnl.add(createInputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 2; - gbc.gridwidth = 1; - MainPnl.add(createOutputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 3; - gbc.gridwidth = 1; - MainPnl.add(createMsgPnl(), gbc); - - } - - private static JPanel createTCP_Pnl() { - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Communication Mode"); - JPanel pnlTCP = new JPanel(new GridBagLayout()); - pnlTCP.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(2,2,2,2))); - Object options[] = { "Client", "Server" }; - final JComboBox comboBox = new JComboBox(options); - btnTCP= new SoftEdgeButton("Connect"); - - lblLocalIp = new JLabel("Local Server, IP Address:"); - jTextFieldLocalIp = new JTextField("", 10); - jTextFieldLocalIp.setText(host.getHostAddress()); - jTextFieldLocalIp.setEditable(true); - - lblLocalPort = new JLabel("Port"); - jTextFieldLocalPort = new JTextField("", 6); - jTextFieldLocalPort.setText("12345"); - - jTextFieldLocalIp.setVisible(false); - jTextFieldLocalPort.setVisible(false); - lblLocalIp.setVisible(false); - lblLocalPort.setVisible(false); - - lblRemoteIp = new JLabel("Remote Server, IP Address:"); - jTextFieldRemoteIp = new JTextField("", 9); - jTextFieldRemoteIp.setText(host.getHostAddress()); - if (DEBUG) { - jTextFieldRemoteIp.setText("172.24.9.185"); - } - jTextFieldRemoteIp.setEditable(true); - - lblRemotePort = new JLabel("Port"); - jTextFieldRemotePort = new JTextField("", 5); - jTextFieldRemotePort.setText("12345"); - - - comboBox.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(comboBox.getSelectedIndex()==0) - { - btnTCP.setText("Connect"); - jTextFieldLocalIp.setVisible(false); - jTextFieldLocalPort.setVisible(false); - lblLocalIp.setVisible(false); - lblLocalPort.setVisible(false); - lblRemoteIp.setVisible(true); - jTextFieldRemoteIp.setVisible(true); - lblRemotePort.setVisible(true); - jTextFieldRemotePort.setVisible(true); - } - else - { - btnTCP.setText("Listen"); - jTextFieldLocalIp.setVisible(true); - jTextFieldLocalPort.setVisible(true); - lblLocalIp.setVisible(true); - lblLocalPort.setVisible(true); - lblRemoteIp.setVisible(false); - jTextFieldRemoteIp.setVisible(false); - lblRemotePort.setVisible(false); - jTextFieldRemotePort.setVisible(false); - } - - } - - }); - - btnTCP.addActionListener(new ActionListener() { - @SuppressWarnings("deprecation") - @Override - public void actionPerformed(ActionEvent e) { - if(btnTCP.getText()=="Listen") - { - echo("Server socket opening..."); - try { - serverProcess = new TCP_ListenTask(main_inst , numInPoints); - serverProcess.start(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - - return; - } - if(btnTCP.getText()=="StopServer") - { - btnTCP.setText("Listen"); - btnAddIp.setEnabled(true); - btnDeleteIp.setEnabled(true); - btnSaveIp.setEnabled(true); - btnLoadIp.setEnabled(true); - jTextFieldLocalIp.setEnabled(true); - jTextFieldLocalPort.setEnabled(true); - btnSend.setEnabled(false); - echo("Server socket closed..."); - serverProcess.closeTask(); - serverProcess.stop(); - return; - } - if(btnTCP.getText()=="Connect") - { - echo("Client socket opening..."); - try { - clientProcess = new TCP_ConnectTask(main_inst , numOutPoints); - clientProcess.start(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - return; - } - if(btnTCP.getText()=="StopClient") - { - clientProcess.closeTask(); - echo("Client socket closed..."); - return; - } - } - }); - - GridBagConstraints gbc = new GridBagConstraints(); - JPanel TCPoptions = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - TCPoptions.add(comboBox, gbc); - TCPoptions.add(btnTCP, gbc); - - JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - LocalPanel.add(comboBox, gbc); - LocalPanel.add(btnTCP, gbc); - LocalPanel.add(lblLocalIp, gbc); - LocalPanel.add(jTextFieldLocalIp, gbc); - LocalPanel.add(lblLocalPort, gbc); - LocalPanel.add(jTextFieldLocalPort, gbc); - - JPanel RemotePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - - RemotePanel.add(lblRemoteIp, gbc); - RemotePanel.add(jTextFieldRemoteIp, gbc); - RemotePanel.add(lblRemotePort, gbc); - RemotePanel.add(jTextFieldRemotePort, gbc); - - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 1; - gbc.gridy = 0; - pnlTCP.add(TCPoptions, gbc); - gbc.gridx = 2; - gbc.gridy = 0; - pnlTCP.add(LocalPanel, gbc); - gbc.gridx = 3; - gbc.gridy = 0; - pnlTCP.add(RemotePanel, gbc); - return pnlTCP; - - } - - private static JPanel createInputPointPnl() { - - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Server"); - JPanel pnlPoint = new JPanel(new GridBagLayout()); - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(IPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - btnStart= new SoftEdgeButton("Start"); - btnAddIp = new SoftEdgeButton("Add") ; - btnDeleteIp = new SoftEdgeButton("Delete") ; - btnSaveIp = new SoftEdgeButton("Save Table"); - btnLoadIp = new SoftEdgeButton("Load Table"); - - btnAddIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) - { - if(numInPoints< GTNETSKT_MAX_INPUTS){ - int i = numInPoints++; - InputTableModel a = (InputTableModel) IPtable.getModel(); - gtnetSktInputName[i] = "POINTin" + Integer.toString(i); - gtnetSktInputType[i] = "float"; - Object[] values = {i, gtnetSktInputName[i], gtnetSktInputType[i], ""}; - a.insertData(values); - }else{ - echo("Number of Server Points is at maximum of:" + GTNETSKT_MAX_INPUTS); - } - } - }); - - btnDeleteIp.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(IPtable.getSelectedRow() != -1){ - InputTableModel a = (InputTableModel) IPtable.getModel(); - a.removeRow(IPtable.getSelectedRow()); - numInPoints--; - for (int i=0; i < numInPoints; i++) { - a.setValueAt((Object) i, i, 0); - } - } - } - }); - - btnSaveIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - saveIPTable(); - } - }); - - btnLoadIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - loadIPTable(); - } - }); - - JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - tableButtonPanel.add(btnAddIp, gbc); - tableButtonPanel.add(btnDeleteIp, gbc); - tableButtonPanel.add(btnSaveIp, gbc); - tableButtonPanel.add(btnLoadIp, gbc); - - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 1; - pnlPoint.add(tableButtonPanel, gbc); - - return pnlPoint; - - } - - private static JPanel createOutputPointPnl() { - - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Client"); - - //Points to GTNET-SKT - JPanel pnlPoint = new JPanel(new GridBagLayout()); - - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(OPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - btnSend= new SoftEdgeButton("Send"); - btnSend.setEnabled(false); - SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; - SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; - SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); - SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); - - btnSend.addActionListener(new ActionListener() { - int txCnt = 0; - @Override - public void actionPerformed(ActionEvent e) { - - int size = numOutPoints * 4; - - try { - byte[] buffer = new byte[size]; - ByteBuffer outbuff = ByteBuffer.wrap(buffer); - txCnt++; - for (int i = 0; i> data = new Vector>(); - - public InputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktInputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - int numdecimals = 0; -// int offset = 0; - String tempStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - newValue = newValue.replaceAll(",", ""); - - // check for valid digits, decimal places, and range check - for (int i=0; i < newValue.length(); i++) { - char c = newValue.charAt(i); -// if(c == '-' && i == 0){ -// offset = 1; -// } - if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - } - if (save) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(tempStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col != 2) { - return false; - }else if(btnStart.getText()=="Stop"){ - return false; - } else { - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - class OutputTableModel extends AbstractTableModel { - - /** - * - */ - private static final long serialVersionUID = 8248501194260208975L; - private String[] columnNames; - private Vector> data = new Vector>(); - - public OutputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktOutputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - boolean realok = true; - boolean fracok = true; - int numdecimals = 0; - int offset = 0; - String typeStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - String real = null, frac = null; - newValue = newValue.replaceAll(",", ""); - if(newValue.contains("-")){ - offset = 1; - } - if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal - real = newValue.substring(offset, newValue.indexOf(".")); - frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); - if(real.length()>=10){ - for (int i=0; i < 10; i++) { - char c = real.charAt(i); - if (c > '2' && i == 0) - realok = false; - if (c > '1' && i == 1) - realok = false; - if (c > '4' && i == 2) - realok = false; - if (c > '7' && i == 3) - realok = false; - if (c > '4' && i == 4) - realok = false; - if (c > '8' && i == 5) - realok = false; - if (c > '3' && i == 6) - realok = false; - if (c > '6' && i == 7) - realok = false; - if (c > '4' && i == 8) - realok = false; - if (c > '7' && i == 9 && offset==0) - realok = false; - if (c == '7' && i == 9 && offset==0 && realok){ - if(real.contains("2147483647")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - if (c > '8' && i == 9 && offset==1) // for negative numbers - realok = false; - if (c == '8' && i == 9 && offset==1 && realok){ - if(real.contains("2147483648")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - - } - } - } - - if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ - real = newValue.substring(offset, newValue.length()); - } - if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ - real = newValue.substring(offset, newValue.indexOf(".")); - int i = Math.round(Float.valueOf(newValue)); - newValue = Integer.toString(i); - } - if(real.length()<=10){ - // check for valid digits and maximum range check - for (int i=0; i < real.length(); i++) { - char c = real.charAt(i); - if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - - if(real.length()>=10){ // The check for the maximum value - if (c > '2' && i == 0) - save = false; - if (c > '1' && i == 1) - save = false; - if (c > '4' && i == 2) - save = false; - if (c > '7' && i == 3) - save = false; - if (c > '4' && i == 4) - save = false; - if (c > '8' && i == 5) - save = false; - if (c > '3' && i == 6) - save = false; - if (c > '6' && i == 7) - save = false; - if (c > '4' && i == 8) - save = false; - if (c > '7' && i == 9 && offset==0) - save = false; - if (c > '8' && i == 9 && offset==1) // for negative numbers - save = false; - } - } - } - else - { - save = false; - } - if (save && realok && fracok) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(typeStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col < 1) { - return false; - } else { - if(data.elementAt(row).toString().contains("int")) - { - OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); - }else{ - OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); - } - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - //simple function to initialize parameters from the data file to variables - public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) - { - FileInputStream fileInputStream = null; - InputStreamReader inputStreamReader = null; - BufferedReader bufferedReader = null; - String[] var = null; - int points = 0; - - try { - String[] result = fileChooser(false,fname); - if (result != null){ - fileInputStream = new FileInputStream(result[1]); - inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); - bufferedReader = new BufferedReader(inputStreamReader); - - // use BufferedReader here - String s; - - while((s = bufferedReader.readLine()) != null){ - var = s.split(delim);//\t ,\n\r - gtnetSktName[points] = var[0]; - gtnetSktType[points] = var[1]; - points++; - } - } - } - catch (IOException e) { - e.printStackTrace(); - } - finally - { - try { - if (fileInputStream != null){ - fileInputStream.close(); - inputStreamReader.close(); - bufferedReader.close(); - } - } - catch (IOException e) { - e.printStackTrace(); - } - } - return points; - } - - //simple function to fill data to table - public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - OutputTableModel a = (OutputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - if(gtnetSktType[i].contains("int")){ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; - a.insertData(values); - }else{ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; - a.insertData(values); - } - } - - } - - //simple function to fill data to table - public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - InputTableModel a = (InputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; - a.insertData(values); - } - - } - - - //simple function to echo data to terminal - public static void echo(String msg) - { - if (DEBUG) { - System.out.println(msg); - } - - textArea.append(msg + newline); - - //Make sure the new text is visible, even if there - //was a selection in the text area. - textArea.setCaretPosition(textArea.getDocument().getLength()); - - } - - //simple function to save the file name and path - private static String[] fileChooser(boolean folderOnly, String fname) - { - String[] filePath = null; -// JFileChooser c = new JFileChooser(); - myJFileChooser = new JFileChooser(); - File myfile = new File(fname); - - if(folderOnly) - { - myJFileChooser.setDialogTitle("Select Folder..."); - myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File folder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = ""; - filePath[1] = folder.getAbsolutePath(); - } - } - else - { - myJFileChooser.setDialogTitle("Select File"); - myJFileChooser.setSelectedFile(myfile); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File fileFolder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = myJFileChooser.getSelectedFile().getName(); - filePath[1] = fileFolder.getAbsolutePath(); - } - } - - return filePath; - }//end saveAsChooser - - public static byte[] convertToByteArray(int value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putInt(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(float value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putFloat(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(byte value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.put(value); - return buffer.array(); - } - -} // End of Class - -class TCP_ListenTask extends Thread -{ - private volatile boolean stop = false; - int npoints = 0; - int ival[] = null; - float fval[] = null; -// ServerSocket serverSocket = null; -// Socket connectionSocket = null; - GTNET_SKT_TCP_GUI myskt = null; - - public TCP_ListenTask(GTNET_SKT_TCP_GUI myinst, int numPoints) throws SocketException { - this.npoints = numPoints; - ival = new int[numPoints]; - fval = new float[numPoints]; - this.myskt = myinst; - } - public void closeTask() { - try { - stop = true; - myskt.serverSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - public void run() { - while (!stop) { - ByteBuffer buf; - try - { - //1. creating a server socket, parameter is local port number - myskt.serverSocket = new ServerSocket(); - myskt.serverSocket.setReuseAddress(true); - // inSocket.setSoTimeout(10000); // DO NOT USE TIMEOUTS - myskt.connectionSocket = new Socket(); - - String ipAddr = GTNET_SKT_TCP_GUI.jTextFieldLocalIp.getText(); - int ipPort = Integer.parseInt(GTNET_SKT_TCP_GUI.jTextFieldLocalPort.getText()); - myskt.serverSocket.bind(new InetSocketAddress(ipAddr, ipPort)); - - //2. Wait for an incoming data - GTNET_SKT_TCP_GUI.echo("Server socket created. Waiting for incoming data..."); - - GTNET_SKT_TCP_GUI.btnTCP.setText("StopServer"); - GTNET_SKT_TCP_GUI.btnAddIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnDeleteIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnSaveIp.setEnabled(false); - GTNET_SKT_TCP_GUI.btnLoadIp.setEnabled(false); - GTNET_SKT_TCP_GUI.jTextFieldLocalIp.setEnabled(false); - GTNET_SKT_TCP_GUI.jTextFieldLocalPort.setEnabled(false); - - //communication loop - int rxCnt = 0; - while (!(myskt.serverSocket.isClosed())) - { - rxCnt++; - - myskt.connectionSocket = myskt.serverSocket.accept(); - GTNET_SKT_TCP_GUI.echo("Connection received from " + myskt.connectionSocket.getInetAddress().getHostName() + " : " + myskt.connectionSocket.getPort()); - GTNET_SKT_TCP_GUI.btnSend.setEnabled(true); - InputStream insktStream = myskt.connectionSocket.getInputStream(); - byte[] buff = new byte[(npoints) * 4]; // Buffer - int num = -1; // Bytes read - while( (num = insktStream.read(buff)) >= 0 ){ // Not EOS yet - // System.out.print(new String(buff,0,num) ); // Echo to console - // out.write( buff, 0, num ); // Echo to source - // out.flush(); // Flush stream - if (num==(npoints) * 4) - insktStream.close(); // This is necessary in Server mode to read new packets - break; - } // end while - if (num==(npoints) * 4){ - buf = ByteBuffer.wrap(buff); - for (int i = 0; i= 0 ){ // Not EOS yet -// // System.out.print(new String(buff,0,num) ); // Echo to console -// // out.write( buff, 0, num ); // Echo to source -// // out.flush(); // Flush stream -// if (num==(npoints) * 4) -// // inskt.close(); -// break; -// } // end while - - if (num==(npoints) * 4){ - ByteBuffer buf = ByteBuffer.wrap(buff); - for (int i = 0; i comboBox = new JComboBox(options); + comboBox.setMaximumRowCount(4); + TableCellEditor editorType = new DefaultCellEditor(comboBox); + + // The Server Table + String columnNames[] = {"Point #","Variable","Type","Value"}; + IPtable = new JTable(new InputTableModel(columnNames));//Create JTable + IPtable.setCellSelectionEnabled(true); + IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + IPtable.setFillsViewportHeight(true); + IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + IPtable.setRowSelectionAllowed(true); + IPtable.setColumnSelectionAllowed(false); + IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + JTableHeader header = IPtable.getTableHeader(); + header.setBackground(Color.LIGHT_GRAY); + IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + // The Client Table + OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable + OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + OPtable.setFillsViewportHeight(true); + OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + OPtable.setRowSelectionAllowed(true); + OPtable.setColumnSelectionAllowed(false); + OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); + OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + setup(); // The GUI + + setSize(520,745); + setLayout(new FlowLayout()); + setDefaultCloseOperation(EXIT_ON_CLOSE); + this.getContentPane().add(MainPnl); + setVisible(true); + + } + + public static void setup() + { + try { + host = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + // Main Panel + MainPnl = new JPanel(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.gridwidth = 1; + MainPnl.add(createTCP_Pnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 1; + gbc.gridwidth = 1; + MainPnl.add(createInputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 2; + gbc.gridwidth = 1; + MainPnl.add(createOutputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 3; + gbc.gridwidth = 1; + MainPnl.add(createMsgPnl(), gbc); + + } + + private static JPanel createTCP_Pnl() { + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Communication Mode"); + JPanel pnlTCP = new JPanel(new GridBagLayout()); + pnlTCP.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(2,2,2,2))); + Object options[] = { "Client", "Server" }; + final JComboBox comboBox = new JComboBox(options); + btnTCP= new SoftEdgeButton("Connect"); + + lblLocalIp = new JLabel("Local Server, IP Address:"); + jTextFieldLocalIp = new JTextField("", 10); + jTextFieldLocalIp.setText(host.getHostAddress()); + jTextFieldLocalIp.setEditable(true); + + lblLocalPort = new JLabel("Port"); + jTextFieldLocalPort = new JTextField("", 6); + jTextFieldLocalPort.setText("12345"); + + jTextFieldLocalIp.setVisible(false); + jTextFieldLocalPort.setVisible(false); + lblLocalIp.setVisible(false); + lblLocalPort.setVisible(false); + + lblRemoteIp = new JLabel("Remote Server, IP Address:"); + jTextFieldRemoteIp = new JTextField("", 9); + jTextFieldRemoteIp.setText(host.getHostAddress()); + if (DEBUG) { + jTextFieldRemoteIp.setText("172.24.9.185"); + } + jTextFieldRemoteIp.setEditable(true); + + lblRemotePort = new JLabel("Port"); + jTextFieldRemotePort = new JTextField("", 5); + jTextFieldRemotePort.setText("12345"); + + + comboBox.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(comboBox.getSelectedIndex()==0) + { + btnTCP.setText("Connect"); + jTextFieldLocalIp.setVisible(false); + jTextFieldLocalPort.setVisible(false); + lblLocalIp.setVisible(false); + lblLocalPort.setVisible(false); + lblRemoteIp.setVisible(true); + jTextFieldRemoteIp.setVisible(true); + lblRemotePort.setVisible(true); + jTextFieldRemotePort.setVisible(true); + } + else + { + btnTCP.setText("Listen"); + jTextFieldLocalIp.setVisible(true); + jTextFieldLocalPort.setVisible(true); + lblLocalIp.setVisible(true); + lblLocalPort.setVisible(true); + lblRemoteIp.setVisible(false); + jTextFieldRemoteIp.setVisible(false); + lblRemotePort.setVisible(false); + jTextFieldRemotePort.setVisible(false); + } + + } + + }); + + btnTCP.addActionListener(new ActionListener() { + @SuppressWarnings("deprecation") + @Override + public void actionPerformed(ActionEvent e) { + if(btnTCP.getText()=="Listen") + { + echo("Server socket opening..."); + try { + serverProcess = new TCP_ListenTask(main_inst , numInPoints); + serverProcess.start(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + + return; + } + if(btnTCP.getText()=="StopServer") + { + btnTCP.setText("Listen"); + btnAddIp.setEnabled(true); + btnDeleteIp.setEnabled(true); + btnSaveIp.setEnabled(true); + btnLoadIp.setEnabled(true); + jTextFieldLocalIp.setEnabled(true); + jTextFieldLocalPort.setEnabled(true); + btnSend.setEnabled(false); + echo("Server socket closed..."); + serverProcess.closeTask(); + serverProcess.stop(); + return; + } + if(btnTCP.getText()=="Connect") + { + echo("Client socket opening..."); + try { + clientProcess = new TCP_ConnectTask(main_inst , numOutPoints); + clientProcess.start(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + return; + } + if(btnTCP.getText()=="StopClient") + { + clientProcess.closeTask(); + echo("Client socket closed..."); + return; + } + } + }); + + GridBagConstraints gbc = new GridBagConstraints(); + JPanel TCPoptions = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + TCPoptions.add(comboBox, gbc); + TCPoptions.add(btnTCP, gbc); + + JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + LocalPanel.add(comboBox, gbc); + LocalPanel.add(btnTCP, gbc); + LocalPanel.add(lblLocalIp, gbc); + LocalPanel.add(jTextFieldLocalIp, gbc); + LocalPanel.add(lblLocalPort, gbc); + LocalPanel.add(jTextFieldLocalPort, gbc); + + JPanel RemotePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + + RemotePanel.add(lblRemoteIp, gbc); + RemotePanel.add(jTextFieldRemoteIp, gbc); + RemotePanel.add(lblRemotePort, gbc); + RemotePanel.add(jTextFieldRemotePort, gbc); + + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 1; + gbc.gridy = 0; + pnlTCP.add(TCPoptions, gbc); + gbc.gridx = 2; + gbc.gridy = 0; + pnlTCP.add(LocalPanel, gbc); + gbc.gridx = 3; + gbc.gridy = 0; + pnlTCP.add(RemotePanel, gbc); + return pnlTCP; + + } + + private static JPanel createInputPointPnl() { + + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Server"); + JPanel pnlPoint = new JPanel(new GridBagLayout()); + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(IPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + btnStart= new SoftEdgeButton("Start"); + btnAddIp = new SoftEdgeButton("Add") ; + btnDeleteIp = new SoftEdgeButton("Delete") ; + btnSaveIp = new SoftEdgeButton("Save Table"); + btnLoadIp = new SoftEdgeButton("Load Table"); + + btnAddIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + if(numInPoints< GTNETSKT_MAX_INPUTS){ + int i = numInPoints++; + InputTableModel a = (InputTableModel) IPtable.getModel(); + gtnetSktInputName[i] = "POINTin" + Integer.toString(i); + gtnetSktInputType[i] = "float"; + Object[] values = {i, gtnetSktInputName[i], gtnetSktInputType[i], ""}; + a.insertData(values); + }else{ + echo("Number of Server Points is at maximum of:" + GTNETSKT_MAX_INPUTS); + } + } + }); + + btnDeleteIp.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(IPtable.getSelectedRow() != -1){ + InputTableModel a = (InputTableModel) IPtable.getModel(); + a.removeRow(IPtable.getSelectedRow()); + numInPoints--; + for (int i=0; i < numInPoints; i++) { + a.setValueAt((Object) i, i, 0); + } + } + } + }); + + btnSaveIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + saveIPTable(); + } + }); + + btnLoadIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + loadIPTable(); + } + }); + + JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + tableButtonPanel.add(btnAddIp, gbc); + tableButtonPanel.add(btnDeleteIp, gbc); + tableButtonPanel.add(btnSaveIp, gbc); + tableButtonPanel.add(btnLoadIp, gbc); + + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 1; + pnlPoint.add(tableButtonPanel, gbc); + + return pnlPoint; + + } + + private static JPanel createOutputPointPnl() { + + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "TCP Client"); + + //Points to GTNET-SKT + JPanel pnlPoint = new JPanel(new GridBagLayout()); + + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(OPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + btnSend= new SoftEdgeButton("Send"); + btnSend.setEnabled(false); + SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; + SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; + SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); + SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); + + btnSend.addActionListener(new ActionListener() { + int txCnt = 0; + @Override + public void actionPerformed(ActionEvent e) { + + int size = numOutPoints * 4; + + try { + byte[] buffer = new byte[size]; + ByteBuffer outbuff = ByteBuffer.wrap(buffer); + txCnt++; + for (int i = 0; i> data = new Vector>(); + + public InputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktInputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + int numdecimals = 0; +// int offset = 0; + String tempStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + newValue = newValue.replaceAll(",", ""); + + // check for valid digits, decimal places, and range check + for (int i=0; i < newValue.length(); i++) { + char c = newValue.charAt(i); +// if(c == '-' && i == 0){ +// offset = 1; +// } + if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + } + if (save) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(tempStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col != 2) { + return false; + }else if(btnStart.getText()=="Stop"){ + return false; + } else { + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + class OutputTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 8248501194260208975L; + private String[] columnNames; + private Vector> data = new Vector>(); + + public OutputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktOutputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + boolean realok = true; + boolean fracok = true; + int numdecimals = 0; + int offset = 0; + String typeStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + String real = null, frac = null; + newValue = newValue.replaceAll(",", ""); + if(newValue.contains("-")){ + offset = 1; + } + if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal + real = newValue.substring(offset, newValue.indexOf(".")); + frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); + if(real.length()>=10){ + for (int i=0; i < 10; i++) { + char c = real.charAt(i); + if (c > '2' && i == 0) + realok = false; + if (c > '1' && i == 1) + realok = false; + if (c > '4' && i == 2) + realok = false; + if (c > '7' && i == 3) + realok = false; + if (c > '4' && i == 4) + realok = false; + if (c > '8' && i == 5) + realok = false; + if (c > '3' && i == 6) + realok = false; + if (c > '6' && i == 7) + realok = false; + if (c > '4' && i == 8) + realok = false; + if (c > '7' && i == 9 && offset==0) + realok = false; + if (c == '7' && i == 9 && offset==0 && realok){ + if(real.contains("2147483647")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + if (c > '8' && i == 9 && offset==1) // for negative numbers + realok = false; + if (c == '8' && i == 9 && offset==1 && realok){ + if(real.contains("2147483648")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + + } + } + } + + if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ + real = newValue.substring(offset, newValue.length()); + } + if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ + real = newValue.substring(offset, newValue.indexOf(".")); + int i = Math.round(Float.valueOf(newValue)); + newValue = Integer.toString(i); + } + if(real.length()<=10){ + // check for valid digits and maximum range check + for (int i=0; i < real.length(); i++) { + char c = real.charAt(i); + if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + + if(real.length()>=10){ // The check for the maximum value + if (c > '2' && i == 0) + save = false; + if (c > '1' && i == 1) + save = false; + if (c > '4' && i == 2) + save = false; + if (c > '7' && i == 3) + save = false; + if (c > '4' && i == 4) + save = false; + if (c > '8' && i == 5) + save = false; + if (c > '3' && i == 6) + save = false; + if (c > '6' && i == 7) + save = false; + if (c > '4' && i == 8) + save = false; + if (c > '7' && i == 9 && offset==0) + save = false; + if (c > '8' && i == 9 && offset==1) // for negative numbers + save = false; + } + } + } + else + { + save = false; + } + if (save && realok && fracok) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(typeStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col < 1) { + return false; + } else { + if(data.elementAt(row).toString().contains("int")) + { + OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); + }else{ + OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); + } + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + //simple function to initialize parameters from the data file to variables + public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) + { + FileInputStream fileInputStream = null; + InputStreamReader inputStreamReader = null; + BufferedReader bufferedReader = null; + String[] var = null; + int points = 0; + + try { + String[] result = fileChooser(false,fname); + if (result != null){ + fileInputStream = new FileInputStream(result[1]); + inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); + bufferedReader = new BufferedReader(inputStreamReader); + + // use BufferedReader here + String s; + + while((s = bufferedReader.readLine()) != null){ + var = s.split(delim);//\t ,\n\r + gtnetSktName[points] = var[0]; + gtnetSktType[points] = var[1]; + points++; + } + } + } + catch (IOException e) { + e.printStackTrace(); + } + finally + { + try { + if (fileInputStream != null){ + fileInputStream.close(); + inputStreamReader.close(); + bufferedReader.close(); + } + } + catch (IOException e) { + e.printStackTrace(); + } + } + return points; + } + + //simple function to fill data to table + public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + OutputTableModel a = (OutputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + if(gtnetSktType[i].contains("int")){ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; + a.insertData(values); + }else{ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; + a.insertData(values); + } + } + + } + + //simple function to fill data to table + public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + InputTableModel a = (InputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; + a.insertData(values); + } + + } + + + //simple function to echo data to terminal + public static void echo(String msg) + { + if (DEBUG) { + System.out.println(msg); + } + + textArea.append(msg + newline); + + //Make sure the new text is visible, even if there + //was a selection in the text area. + textArea.setCaretPosition(textArea.getDocument().getLength()); + + } + + //simple function to save the file name and path + private static String[] fileChooser(boolean folderOnly, String fname) + { + String[] filePath = null; +// JFileChooser c = new JFileChooser(); + myJFileChooser = new JFileChooser(); + File myfile = new File(fname); + + if(folderOnly) + { + myJFileChooser.setDialogTitle("Select Folder..."); + myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File folder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = ""; + filePath[1] = folder.getAbsolutePath(); + } + } + else + { + myJFileChooser.setDialogTitle("Select File"); + myJFileChooser.setSelectedFile(myfile); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File fileFolder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = myJFileChooser.getSelectedFile().getName(); + filePath[1] = fileFolder.getAbsolutePath(); + } + } + + return filePath; + }//end saveAsChooser + + public static byte[] convertToByteArray(int value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putInt(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(float value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putFloat(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(byte value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.put(value); + return buffer.array(); + } + +} // End of Class + +class TCP_ListenTask extends Thread +{ + private volatile boolean stop = false; + int npoints = 0; + int ival[] = null; + float fval[] = null; +// ServerSocket serverSocket = null; +// Socket connectionSocket = null; + GTNET_SKT_TCP_GUI myskt = null; + + public TCP_ListenTask(GTNET_SKT_TCP_GUI myinst, int numPoints) throws SocketException { + this.npoints = numPoints; + ival = new int[numPoints]; + fval = new float[numPoints]; + this.myskt = myinst; + } + public void closeTask() { + try { + stop = true; + myskt.serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void run() { + while (!stop) { + ByteBuffer buf; + try + { + //1. creating a server socket, parameter is local port number + myskt.serverSocket = new ServerSocket(); + myskt.serverSocket.setReuseAddress(true); + // inSocket.setSoTimeout(10000); // DO NOT USE TIMEOUTS + myskt.connectionSocket = new Socket(); + + String ipAddr = GTNET_SKT_TCP_GUI.jTextFieldLocalIp.getText(); + int ipPort = Integer.parseInt(GTNET_SKT_TCP_GUI.jTextFieldLocalPort.getText()); + myskt.serverSocket.bind(new InetSocketAddress(ipAddr, ipPort)); + + //2. Wait for an incoming data + GTNET_SKT_TCP_GUI.echo("Server socket created. Waiting for incoming data..."); + + GTNET_SKT_TCP_GUI.btnTCP.setText("StopServer"); + GTNET_SKT_TCP_GUI.btnAddIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnDeleteIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnSaveIp.setEnabled(false); + GTNET_SKT_TCP_GUI.btnLoadIp.setEnabled(false); + GTNET_SKT_TCP_GUI.jTextFieldLocalIp.setEnabled(false); + GTNET_SKT_TCP_GUI.jTextFieldLocalPort.setEnabled(false); + + //communication loop + int rxCnt = 0; + while (!(myskt.serverSocket.isClosed())) + { + rxCnt++; + + myskt.connectionSocket = myskt.serverSocket.accept(); + GTNET_SKT_TCP_GUI.echo("Connection received from " + myskt.connectionSocket.getInetAddress().getHostName() + " : " + myskt.connectionSocket.getPort()); + GTNET_SKT_TCP_GUI.btnSend.setEnabled(true); + InputStream insktStream = myskt.connectionSocket.getInputStream(); + byte[] buff = new byte[(npoints) * 4]; // Buffer + int num = -1; // Bytes read + while( (num = insktStream.read(buff)) >= 0 ){ // Not EOS yet + // System.out.print(new String(buff,0,num) ); // Echo to console + // out.write( buff, 0, num ); // Echo to source + // out.flush(); // Flush stream + if (num==(npoints) * 4) + insktStream.close(); // This is necessary in Server mode to read new packets + break; + } // end while + if (num==(npoints) * 4){ + buf = ByteBuffer.wrap(buff); + for (int i = 0; i= 0 ){ // Not EOS yet +// // System.out.print(new String(buff,0,num) ); // Echo to console +// // out.write( buff, 0, num ); // Echo to source +// // out.flush(); // Flush stream +// if (num==(npoints) * 4) +// // inskt.close(); +// break; +// } // end while + + if (num==(npoints) * 4){ + ByteBuffer buf = ByteBuffer.wrap(buff); + for (int i = 0; i comboBox = new JComboBox(options); - comboBox.setMaximumRowCount(4); - TableCellEditor editorType = new DefaultCellEditor(comboBox); - - // The Server Table - String columnNames[] = {"Point #","Variable","Type","Value"}; - IPtable = new JTable(new InputTableModel(columnNames));//Create JTable - IPtable.setCellSelectionEnabled(true); - IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - IPtable.setFillsViewportHeight(true); - IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - IPtable.setRowSelectionAllowed(true); - IPtable.setColumnSelectionAllowed(false); - IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - JTableHeader header = IPtable.getTableHeader(); - header.setBackground(Color.LIGHT_GRAY); - IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - // The Client Table - OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable - OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); - OPtable.setFillsViewportHeight(true); - OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging - OPtable.setRowSelectionAllowed(true); - OPtable.setColumnSelectionAllowed(false); - OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); - OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); - - setup(); // The GUI - - setSize(555,745); - setLayout(new FlowLayout()); - setDefaultCloseOperation(EXIT_ON_CLOSE); - this.getContentPane().add(MainPnl); - setVisible(true); - - } - - public static void setup() - { - try { - host = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - - // Main Panel - MainPnl = new JPanel(new GridBagLayout()); - GridBagConstraints gbc = new GridBagConstraints(); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.gridwidth = 1; - MainPnl.add(createInputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 1; - gbc.gridwidth = 1; - MainPnl.add(createOutputPointPnl(), gbc); - gbc.gridx = 0; - gbc.gridy = 2; - gbc.gridwidth = 1; - MainPnl.add(createMsgPnl(), gbc); - - } - - private static JPanel createInputPointPnl() { - - //Points from GTNET-SKT - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Server"); - JPanel pnlPoint = new JPanel(new GridBagLayout()); - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(IPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - jTextFieldLocalIp = new JTextField("", 10); - jTextFieldLocalIp.setText(host.getHostAddress()); - jTextFieldLocalIp.setEditable(true); - - jTextFieldLocalPort = new JTextField("", 6); - jTextFieldLocalPort.setText("12345"); - - btnStart= new SoftEdgeButton("Start"); - btnAddIp = new SoftEdgeButton("Add") ; - btnDeleteIp = new SoftEdgeButton("Delete") ; - btnSaveIp = new SoftEdgeButton("Save Table"); - btnLoadIp = new SoftEdgeButton("Load Table"); - - btnStart.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Start") - { - GTNET_SKT_UDP_GUI.btnStart.setText("Stop"); - GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(false); - GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(false); - GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(false); - GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(false); -// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(false); -// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(false); - try { - GTNET_SKT_UDP_GUI.process = new UDP_ServerTask(GTNET_SKT_UDP_GUI.numInPoints); - GTNET_SKT_UDP_GUI.process.execute(); - } - catch (Exception e1) - { - echo(e1.getMessage()); - } - } - else - { - GTNET_SKT_UDP_GUI.btnStart.setText("Start"); - GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(true); - GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(true); - GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(true); - GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(true); -// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(true); -// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(true); - GTNET_SKT_UDP_GUI.process.closeTask(); - GTNET_SKT_UDP_GUI.process.cancel(true); - GTNET_SKT_UDP_GUI.echo("Server socket closed."); - } - } - }); - - btnAddIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) - { - if(GTNET_SKT_UDP_GUI.numInPoints< GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS){ - int i = GTNET_SKT_UDP_GUI.numInPoints++; - InputTableModel a = (InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); - GTNET_SKT_UDP_GUI.gtnetSktInputName[i] = "POINTin" + Integer.toString(i); - GTNET_SKT_UDP_GUI.gtnetSktInputType[i] = "float"; - Object[] values = {i, GTNET_SKT_UDP_GUI.gtnetSktInputName[i], GTNET_SKT_UDP_GUI.gtnetSktInputType[i], ""}; - a.insertData(values); - }else{ - GTNET_SKT_UDP_GUI.echo("Number of Server Points is at maximum of:" + GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS); - } - } - }); - - btnDeleteIp.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) { - if(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow() != -1){ - GTNET_SKT_UDP_GUI.InputTableModel a = (GTNET_SKT_UDP_GUI.InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); - a.removeRow(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow()); - GTNET_SKT_UDP_GUI.numInPoints--; - for (int i=0; i < GTNET_SKT_UDP_GUI.numInPoints; i++) { - a.setValueAt((Object) i, i, 0); - } - } - } - }); - - btnSaveIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - saveIPTable(); - } - }); - - btnLoadIp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - loadIPTable(); - } - }); - - JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(2, 2, 2, 2); - JLabel lblLocalIp = new JLabel("Local Server Settings, IP Address:"); - LocalPanel.add(lblLocalIp, gbc); - LocalPanel.add(jTextFieldLocalIp, gbc); - LocalPanel.add(new JLabel("Port:"), gbc); - LocalPanel.add(jTextFieldLocalPort, gbc); - LocalPanel.add(btnStart, gbc); - JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - gbc = new GridBagConstraints(); - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 0; - gbc.insets = new Insets(1, 1, 1, 1); - tableButtonPanel.add(btnAddIp, gbc); - tableButtonPanel.add(btnDeleteIp, gbc); - tableButtonPanel.add(btnSaveIp, gbc); - tableButtonPanel.add(btnLoadIp, gbc); - - gbc.fill = GridBagConstraints.NONE; - gbc.gridx = 0; - gbc.gridy = 1; - pnlPoint.add(LocalPanel, gbc); - gbc.gridx = 0; - gbc.gridy = 2; - pnlPoint.add(tableButtonPanel, gbc); - - return pnlPoint; - - } - - private static JPanel createOutputPointPnl() { - - TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Client"); - - //Points to GTNET-SKT - JPanel pnlPoint = new JPanel(new GridBagLayout()); - - pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); - - GridBagConstraints gbc = new GridBagConstraints(); - - //Create the scroll pane and add the table to it. - JScrollPane scrollPane = new JScrollPane(OPtable); - gbc.gridx = 0; - gbc.gridy = 0; - gbc.anchor = GridBagConstraints.WEST; - gbc.weightx = 1; - gbc.fill = GridBagConstraints.BOTH; - pnlPoint.add(scrollPane,gbc); - - jTextFieldRemoteIp = new JTextField("", 9); - jTextFieldRemoteIp.setText(host.getHostAddress()); - if (DEBUG) { - jTextFieldRemoteIp.setText("172.24.9.185"); - } - jTextFieldRemoteIp.setEditable(true); - - jTextFieldRemotePort = new JTextField("", 5); - jTextFieldRemotePort.setText("12345"); - - btnSend= new SoftEdgeButton("Send"); - SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; - SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; - SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); - SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); - - btnSend.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - DatagramSocket outSocket = null; - int size = GTNET_SKT_UDP_GUI.numOutPoints * 4; - try { - InetAddress gtnetIp = InetAddress.getByName(GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.getText()); - int gtnetPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldRemotePort.getText()); - byte[] buffer = new byte[size]; - ByteBuffer outbuff = ByteBuffer.wrap(buffer); - - for (int i = 0; i> data = new Vector>(); - - public InputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktInputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - int numdecimals = 0; -// int offset = 0; - String tempStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - newValue = newValue.replaceAll(",", ""); - - // check for valid digits, decimal places, and range check - for (int i=0; i < newValue.length(); i++) { - char c = newValue.charAt(i); -// if(c == '-' && i == 0){ -// offset = 1; -// } - if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - } - if (save) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(tempStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col != 2) { - return false; - }else if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Stop"){ - return false; - } else { - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - class OutputTableModel extends AbstractTableModel { - - /** - * - */ - private static final long serialVersionUID = 8248501194260208975L; - private String[] columnNames; - private Vector> data = new Vector>(); - - public OutputTableModel(String[] cNames) - { - columnNames = cNames; - } - - @Override - public int getColumnCount() { - return columnNames.length; - } - - @Override - public int getRowCount() { - return data.size(); - } - - @Override - public Object getValueAt(int row, int col) { - return ((Vector) data.get(row)).get(col); - } - - public String getColumnName(int col){ - return columnNames[col]; - } - - public Class getColumnClass(int c){ - return getValueAt(0,c).getClass(); - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col){ - if (DEBUG) { - System.out.println("Setting value at " + row + "," + col - + " to " + value - + " (an instance of " - + value.getClass() + ")"); - } - - if (value instanceof Object && col == 0) { - ((Vector) data.get(row)).setElementAt(value, col); - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 1) { - String newValue = (String) value; - // check for valid length - if (newValue.length()<=10) { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); - return; - } - } - - if (value instanceof String && col == 2) { - ((Vector) data.get(row)).setElementAt(value, col); - gtnetSktOutputType[row]=(String) value; - fireTableCellUpdated(row,col); - } - - if (value instanceof String && col == 3) { - boolean save = false; - boolean realok = true; - boolean fracok = true; - int numdecimals = 0; - int offset = 0; - String typeStr = (String) ((Vector) data.get(row)).elementAt(2); - String newValue = (String) value; - String real = null, frac = null; - newValue = newValue.replaceAll(",", ""); - if(newValue.contains("-")){ - offset = 1; - } - if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal - real = newValue.substring(offset, newValue.indexOf(".")); - frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); - if(real.length()>=10){ - for (int i=0; i < 10; i++) { - char c = real.charAt(i); - if (c > '2' && i == 0) - realok = false; - if (c > '1' && i == 1) - realok = false; - if (c > '4' && i == 2) - realok = false; - if (c > '7' && i == 3) - realok = false; - if (c > '4' && i == 4) - realok = false; - if (c > '8' && i == 5) - realok = false; - if (c > '3' && i == 6) - realok = false; - if (c > '6' && i == 7) - realok = false; - if (c > '4' && i == 8) - realok = false; - if (c > '7' && i == 9 && offset==0) - realok = false; - if (c == '7' && i == 9 && offset==0 && realok){ - if(real.contains("2147483647")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - if (c > '8' && i == 9 && offset==1) // for negative numbers - realok = false; - if (c == '8' && i == 9 && offset==1 && realok){ - if(real.contains("2147483648")){ - for (int j=0; j < frac.length(); j++) { - char c1 = frac.charAt(j); - if(c1>'0'){ - fracok = false; - echo("This is larger than a signed 16 bit float: " + real + "." + frac); - } - } - } - } - - } - } - } - - if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ - real = newValue.substring(offset, newValue.length()); - } - if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ - real = newValue.substring(offset, newValue.indexOf(".")); - int i = Math.round(Float.valueOf(newValue)); - newValue = Integer.toString(i); - } - if(real.length()<=10){ - // check for valid digits and maximum range check - for (int i=0; i < real.length(); i++) { - char c = real.charAt(i); - if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ - numdecimals ++; - } - if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) - { - save = true; - } - - if(real.length()>=10){ // The check for the maximum value - if (c > '2' && i == 0) - save = false; - if (c > '1' && i == 1) - save = false; - if (c > '4' && i == 2) - save = false; - if (c > '7' && i == 3) - save = false; - if (c > '4' && i == 4) - save = false; - if (c > '8' && i == 5) - save = false; - if (c > '3' && i == 6) - save = false; - if (c > '6' && i == 7) - save = false; - if (c > '4' && i == 8) - save = false; - if (c > '7' && i == 9 && offset==0) - save = false; - if (c > '8' && i == 9 && offset==1) // for negative numbers - save = false; - } - } - } - else - { - save = false; - } - if (save && realok && fracok) - { - ((Vector) data.get(row)).setElementAt(newValue, col); - fireTableCellUpdated(row,col); - if (DEBUG) { - System.out.println("New value of data:"); - printDebugData(); - } - } - else - { - if(typeStr.equalsIgnoreCase("int")) - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); - } - else - { - JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); - } - - return; - } - } - } - - public boolean isCellEditable(int row, int col){ - if (col < 1) { - return false; - } else { - if(data.elementAt(row).toString().contains("int")) - { - OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); - }else{ - OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); - } - return true; - } - } - - @SuppressWarnings("unchecked") - public void insertData(Object[] values){ - data.add(new Vector()); - for(int i =0; i) data.get(data.size()-1)).add(values[i]); - } - fireTableDataChanged(); - } - - public void removeRow(int row){ - data.removeElementAt(row); - fireTableDataChanged(); - } - - private void printDebugData() { - int numRows = getRowCount(); - int numCols = getColumnCount(); - - for (int i=0; i < numRows; i++) { - System.out.print(" row " + i + ":"); - for (int j=0; j < numCols; j++) { - System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); - } - System.out.println(); - } - System.out.println("----------------------------------------------------"); - } - } // end of tableModel - - public static void main(String args[]) - { - new GTNET_SKT_UDP_GUI(); - - fillInputData(IPtable,numInPoints,gtnetSktInputName,gtnetSktInputType); //Server Data Point File - - fillOutputData(OPtable, numOutPoints, gtnetSktOutputName, gtnetSktOutputType); //Client Data Point File - } - - //simple function to initialize parameters from the data file to variables - public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) - { - FileInputStream fileInputStream = null; - InputStreamReader inputStreamReader = null; - BufferedReader bufferedReader = null; - String[] var = null; - int points = 0; - - try { - String[] result = fileChooser(false,fname); - if (result != null){ - fileInputStream = new FileInputStream(result[1]); - inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); - bufferedReader = new BufferedReader(inputStreamReader); - - // use BufferedReader here - String s; - - while((s = bufferedReader.readLine()) != null){ - var = s.split("\t");//\t ,\n\r - gtnetSktName[points] = var[0]; - gtnetSktType[points] = var[1]; - points++; - } - } - } - catch (IOException e) { - e.printStackTrace(); - } - finally - { - try { - if (fileInputStream != null){ - fileInputStream.close(); - inputStreamReader.close(); - bufferedReader.close(); - } - } - catch (IOException e) { - e.printStackTrace(); - } - } - return points; - } - - //simple function to fill data to table - public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - OutputTableModel a = (OutputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - if(gtnetSktType[i].contains("int")){ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; - a.insertData(values); - }else{ - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; - a.insertData(values); - } - } - - } - - //simple function to fill data to table - public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) - { - InputTableModel a = (InputTableModel) pointTable.getModel(); - for (int i=0; i < numPoint; i++) { - Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; - a.insertData(values); - } - - } - - - //simple function to echo data to terminal - public static void echo(String msg) - { - if (DEBUG) { - System.out.println(msg); - } - - textArea.append(msg + newline); - - //Make sure the new text is visible, even if there - //was a selection in the text area. - textArea.setCaretPosition(textArea.getDocument().getLength()); - - } - - //simple function to save the file name and path - private static String[] fileChooser(boolean folderOnly, String fname) - { - String[] filePath = null; -// JFileChooser c = new JFileChooser(); - myJFileChooser = new JFileChooser(); - File myfile = new File(fname); - - if(folderOnly) - { - myJFileChooser.setDialogTitle("Select Folder..."); - myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File folder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = ""; - filePath[1] = folder.getAbsolutePath(); - } - } - else - { - myJFileChooser.setDialogTitle("Select File"); - myJFileChooser.setSelectedFile(myfile); - - int rVal = myJFileChooser.showOpenDialog(null); - - if(rVal == JFileChooser.APPROVE_OPTION) - { - File fileFolder = myJFileChooser.getSelectedFile(); - - filePath = new String[2]; - - filePath[0] = myJFileChooser.getSelectedFile().getName(); - filePath[1] = fileFolder.getAbsolutePath(); - } - } - - return filePath; - }//end saveAsChooser - - public static byte[] convertToByteArray(int value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putInt(value); - return buffer.array(); - } - - public static byte[] convertToByteArray(float value) { - byte[] bytes = new byte[4]; - ByteBuffer buffer = ByteBuffer.allocate(bytes.length); - buffer.putFloat(value); - return buffer.array(); - } - - -} // End of Class - - -/* - * CancelListener - */ -class CancelListener implements ActionListener -{ - public void actionPerformed(ActionEvent e) - { - System.exit(0); - } - } - - -class UDP_ServerTask extends SwingWorker -{ - int npoints = 0; - int ival[] = null; - float fval[] = null; - - public UDP_ServerTask(int numPoints) throws SocketException { - this.npoints = numPoints; - ival = new int[numPoints]; - fval = new float[numPoints]; - } - public void closeTask() { - GTNET_SKT_UDP_GUI.inSocket.close(); - System.out.println("UDP_ServerTask Closed Now"); - GTNET_SKT_UDP_GUI.echo("UDP_ServerTask Closed Now"); - } - @Override - protected Object doInBackground() throws Exception { - ByteBuffer buf; - byte[] data = null; - byte[] inBuf; - - - try - { - //1. creating a server socket, parameter is local port number - GTNET_SKT_UDP_GUI.inSocket = new DatagramSocket(null); - GTNET_SKT_UDP_GUI.inSocket.setReuseAddress(true); - - String ipAddr = GTNET_SKT_UDP_GUI.jTextFieldLocalIp.getText(); - int localPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldLocalPort.getText()); - GTNET_SKT_UDP_GUI.inSocket.bind(new InetSocketAddress(ipAddr, localPort)); - - //buffer to receive incoming data - inBuf = new byte[(npoints) * 4]; - DatagramPacket inPacket = new DatagramPacket(inBuf, inBuf.length); - - //2. Wait for an incoming data - GTNET_SKT_UDP_GUI.echo("Server socket created. Waiting for incoming data..."); - - //communication loop - int rxCnt = 0; - while(!isCancelled()) - { - rxCnt++; - - GTNET_SKT_UDP_GUI.inSocket.receive(inPacket); - data = inPacket.getData(); - buf = ByteBuffer.wrap(data); - for (int i = 0; i comboBox = new JComboBox(options); + comboBox.setMaximumRowCount(4); + TableCellEditor editorType = new DefaultCellEditor(comboBox); + + // The Server Table + String columnNames[] = {"Point #","Variable","Type","Value"}; + IPtable = new JTable(new InputTableModel(columnNames));//Create JTable + IPtable.setCellSelectionEnabled(true); + IPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + IPtable.setFillsViewportHeight(true); + IPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + IPtable.setRowSelectionAllowed(true); + IPtable.setColumnSelectionAllowed(false); + IPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + JTableHeader header = IPtable.getTableHeader(); + header.setBackground(Color.LIGHT_GRAY); + IPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + // The Client Table + OPtable = new JTable(new OutputTableModel(columnNames));//Create JTable + OPtable.setPreferredScrollableViewportSize(new Dimension(200, 150)); + OPtable.setFillsViewportHeight(true); + OPtable.getTableHeader().setReorderingAllowed(false); //no column dragging + OPtable.setRowSelectionAllowed(true); + OPtable.setColumnSelectionAllowed(false); + OPtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + OPtable.getTableHeader().setBackground(Color.LIGHT_GRAY); + OPtable.getColumnModel().getColumn(2).setCellEditor(editorType); + + setup(); // The GUI + + setSize(555,745); + setLayout(new FlowLayout()); + setDefaultCloseOperation(EXIT_ON_CLOSE); + this.getContentPane().add(MainPnl); + setVisible(true); + + } + + public static void setup() + { + try { + host = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + // Main Panel + MainPnl = new JPanel(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.gridwidth = 1; + MainPnl.add(createInputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 1; + gbc.gridwidth = 1; + MainPnl.add(createOutputPointPnl(), gbc); + gbc.gridx = 0; + gbc.gridy = 2; + gbc.gridwidth = 1; + MainPnl.add(createMsgPnl(), gbc); + + } + + private static JPanel createInputPointPnl() { + + //Points from GTNET-SKT + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Server"); + JPanel pnlPoint = new JPanel(new GridBagLayout()); + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(IPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + jTextFieldLocalIp = new JTextField("", 10); + jTextFieldLocalIp.setText(host.getHostAddress()); + jTextFieldLocalIp.setEditable(true); + + jTextFieldLocalPort = new JTextField("", 6); + jTextFieldLocalPort.setText("12345"); + + btnStart= new SoftEdgeButton("Start"); + btnAddIp = new SoftEdgeButton("Add") ; + btnDeleteIp = new SoftEdgeButton("Delete") ; + btnSaveIp = new SoftEdgeButton("Save Table"); + btnLoadIp = new SoftEdgeButton("Load Table"); + + btnStart.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Start") + { + GTNET_SKT_UDP_GUI.btnStart.setText("Stop"); + GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(false); + GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(false); + GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(false); + GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(false); +// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(false); +// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(false); + try { + GTNET_SKT_UDP_GUI.process = new UDP_ServerTask(GTNET_SKT_UDP_GUI.numInPoints); + GTNET_SKT_UDP_GUI.process.execute(); + } + catch (Exception e1) + { + echo(e1.getMessage()); + } + } + else + { + GTNET_SKT_UDP_GUI.btnStart.setText("Start"); + GTNET_SKT_UDP_GUI.btnAddIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnDeleteIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnSaveIp.setEnabled(true); + GTNET_SKT_UDP_GUI.btnLoadIp.setEnabled(true); + GTNET_SKT_UDP_GUI.jTextFieldLocalIp.setEnabled(true); + GTNET_SKT_UDP_GUI.jTextFieldLocalPort.setEnabled(true); +// GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.setEnabled(true); +// GTNET_SKT_UDP_GUI.jTextFieldRemotePort.setEnabled(true); + GTNET_SKT_UDP_GUI.process.closeTask(); + GTNET_SKT_UDP_GUI.process.cancel(true); + GTNET_SKT_UDP_GUI.echo("Server socket closed."); + } + } + }); + + btnAddIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + if(GTNET_SKT_UDP_GUI.numInPoints< GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS){ + int i = GTNET_SKT_UDP_GUI.numInPoints++; + InputTableModel a = (InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); + GTNET_SKT_UDP_GUI.gtnetSktInputName[i] = "POINTin" + Integer.toString(i); + GTNET_SKT_UDP_GUI.gtnetSktInputType[i] = "float"; + Object[] values = {i, GTNET_SKT_UDP_GUI.gtnetSktInputName[i], GTNET_SKT_UDP_GUI.gtnetSktInputType[i], ""}; + a.insertData(values); + }else{ + GTNET_SKT_UDP_GUI.echo("Number of Server Points is at maximum of:" + GTNET_SKT_UDP_GUI.GTNETSKT_MAX_INPUTS); + } + } + }); + + btnDeleteIp.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow() != -1){ + GTNET_SKT_UDP_GUI.InputTableModel a = (GTNET_SKT_UDP_GUI.InputTableModel) GTNET_SKT_UDP_GUI.IPtable.getModel(); + a.removeRow(GTNET_SKT_UDP_GUI.IPtable.getSelectedRow()); + GTNET_SKT_UDP_GUI.numInPoints--; + for (int i=0; i < GTNET_SKT_UDP_GUI.numInPoints; i++) { + a.setValueAt((Object) i, i, 0); + } + } + } + }); + + btnSaveIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + saveIPTable(); + } + }); + + btnLoadIp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + loadIPTable(); + } + }); + + JPanel LocalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(2, 2, 2, 2); + JLabel lblLocalIp = new JLabel("Local Server Settings, IP Address:"); + LocalPanel.add(lblLocalIp, gbc); + LocalPanel.add(jTextFieldLocalIp, gbc); + LocalPanel.add(new JLabel("Port:"), gbc); + LocalPanel.add(jTextFieldLocalPort, gbc); + LocalPanel.add(btnStart, gbc); + JPanel tableButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.insets = new Insets(1, 1, 1, 1); + tableButtonPanel.add(btnAddIp, gbc); + tableButtonPanel.add(btnDeleteIp, gbc); + tableButtonPanel.add(btnSaveIp, gbc); + tableButtonPanel.add(btnLoadIp, gbc); + + gbc.fill = GridBagConstraints.NONE; + gbc.gridx = 0; + gbc.gridy = 1; + pnlPoint.add(LocalPanel, gbc); + gbc.gridx = 0; + gbc.gridy = 2; + pnlPoint.add(tableButtonPanel, gbc); + + return pnlPoint; + + } + + private static JPanel createOutputPointPnl() { + + TitledBorder borderPoints = BorderFactory.createTitledBorder(new SoftEdgeBorder(3,3, new Color(213, 223, 229)), "GTNET-SKT UDP Client"); + + //Points to GTNET-SKT + JPanel pnlPoint = new JPanel(new GridBagLayout()); + + pnlPoint.setBorder(new CompoundBorder(borderPoints, new EmptyBorder(5,10,5,10))); + + GridBagConstraints gbc = new GridBagConstraints(); + + //Create the scroll pane and add the table to it. + JScrollPane scrollPane = new JScrollPane(OPtable); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + pnlPoint.add(scrollPane,gbc); + + jTextFieldRemoteIp = new JTextField("", 9); + jTextFieldRemoteIp.setText(host.getHostAddress()); + if (DEBUG) { + jTextFieldRemoteIp.setText("172.24.9.185"); + } + jTextFieldRemoteIp.setEditable(true); + + jTextFieldRemotePort = new JTextField("", 5); + jTextFieldRemotePort.setText("12345"); + + btnSend= new SoftEdgeButton("Send"); + SoftEdgeButton btnAddOp = new SoftEdgeButton("Add") ; + SoftEdgeButton btnDeleteOp = new SoftEdgeButton("Delete") ; + SoftEdgeButton btnSaveOp = new SoftEdgeButton("Save Table"); + SoftEdgeButton btnLoadOp = new SoftEdgeButton("Load Table"); + + btnSend.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + DatagramSocket outSocket = null; + int size = GTNET_SKT_UDP_GUI.numOutPoints * 4; + try { + InetAddress gtnetIp = InetAddress.getByName(GTNET_SKT_UDP_GUI.jTextFieldRemoteIp.getText()); + int gtnetPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldRemotePort.getText()); + byte[] buffer = new byte[size]; + ByteBuffer outbuff = ByteBuffer.wrap(buffer); + + for (int i = 0; i> data = new Vector>(); + + public InputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktInputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + int numdecimals = 0; +// int offset = 0; + String tempStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + newValue = newValue.replaceAll(",", ""); + + // check for valid digits, decimal places, and range check + for (int i=0; i < newValue.length(); i++) { + char c = newValue.charAt(i); +// if(c == '-' && i == 0){ +// offset = 1; +// } + if(i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && tempStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + } + if (save) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(tempStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Value at " + row + "," + col + " Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col != 2) { + return false; + }else if(GTNET_SKT_UDP_GUI.btnStart.getText()=="Stop"){ + return false; + } else { + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + class OutputTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 8248501194260208975L; + private String[] columnNames; + private Vector> data = new Vector>(); + + public OutputTableModel(String[] cNames) + { + columnNames = cNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public Object getValueAt(int row, int col) { + return ((Vector) data.get(row)).get(col); + } + + public String getColumnName(int col){ + return columnNames[col]; + } + + public Class getColumnClass(int c){ + return getValueAt(0,c).getClass(); + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col){ + if (DEBUG) { + System.out.println("Setting value at " + row + "," + col + + " to " + value + + " (an instance of " + + value.getClass() + ")"); + } + + if (value instanceof Object && col == 0) { + ((Vector) data.get(row)).setElementAt(value, col); + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 1) { + String newValue = (String) value; + // check for valid length + if (newValue.length()<=10) { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + JOptionPane.showMessageDialog(null, "Must be 10 characters or less", "Input Error", JOptionPane.ERROR_MESSAGE); + return; + } + } + + if (value instanceof String && col == 2) { + ((Vector) data.get(row)).setElementAt(value, col); + gtnetSktOutputType[row]=(String) value; + fireTableCellUpdated(row,col); + } + + if (value instanceof String && col == 3) { + boolean save = false; + boolean realok = true; + boolean fracok = true; + int numdecimals = 0; + int offset = 0; + String typeStr = (String) ((Vector) data.get(row)).elementAt(2); + String newValue = (String) value; + String real = null, frac = null; + newValue = newValue.replaceAll(",", ""); + if(newValue.contains("-")){ + offset = 1; + } + if(typeStr.equalsIgnoreCase("float") && newValue.contains(".")){ // handles the decimal + real = newValue.substring(offset, newValue.indexOf(".")); + frac = newValue.substring(newValue.indexOf(".")+1, newValue.length()); + if(real.length()>=10){ + for (int i=0; i < 10; i++) { + char c = real.charAt(i); + if (c > '2' && i == 0) + realok = false; + if (c > '1' && i == 1) + realok = false; + if (c > '4' && i == 2) + realok = false; + if (c > '7' && i == 3) + realok = false; + if (c > '4' && i == 4) + realok = false; + if (c > '8' && i == 5) + realok = false; + if (c > '3' && i == 6) + realok = false; + if (c > '6' && i == 7) + realok = false; + if (c > '4' && i == 8) + realok = false; + if (c > '7' && i == 9 && offset==0) + realok = false; + if (c == '7' && i == 9 && offset==0 && realok){ + if(real.contains("2147483647")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + if (c > '8' && i == 9 && offset==1) // for negative numbers + realok = false; + if (c == '8' && i == 9 && offset==1 && realok){ + if(real.contains("2147483648")){ + for (int j=0; j < frac.length(); j++) { + char c1 = frac.charAt(j); + if(c1>'0'){ + fracok = false; + echo("This is larger than a signed 16 bit float: " + real + "." + frac); + } + } + } + } + + } + } + } + + if(typeStr.equalsIgnoreCase("int") | typeStr.equalsIgnoreCase("float") && !newValue.contains(".")){ + real = newValue.substring(offset, newValue.length()); + } + if(typeStr.equalsIgnoreCase("int") && newValue.contains(".")){ + real = newValue.substring(offset, newValue.indexOf(".")); + int i = Math.round(Float.valueOf(newValue)); + newValue = Integer.toString(i); + } + if(real.length()<=10){ + // check for valid digits and maximum range check + for (int i=0; i < real.length(); i++) { + char c = real.charAt(i); + if(i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")){ + numdecimals ++; + } + if ( (c == '-' && i == 0) | (c >= '0' && c <= '9') | (i > 0 && c == '.' && typeStr.equalsIgnoreCase("float")) && numdecimals<=1) + { + save = true; + } + + if(real.length()>=10){ // The check for the maximum value + if (c > '2' && i == 0) + save = false; + if (c > '1' && i == 1) + save = false; + if (c > '4' && i == 2) + save = false; + if (c > '7' && i == 3) + save = false; + if (c > '4' && i == 4) + save = false; + if (c > '8' && i == 5) + save = false; + if (c > '3' && i == 6) + save = false; + if (c > '6' && i == 7) + save = false; + if (c > '4' && i == 8) + save = false; + if (c > '7' && i == 9 && offset==0) + save = false; + if (c > '8' && i == 9 && offset==1) // for negative numbers + save = false; + } + } + } + else + { + save = false; + } + if (save && realok && fracok) + { + ((Vector) data.get(row)).setElementAt(newValue, col); + fireTableCellUpdated(row,col); + if (DEBUG) { + System.out.println("New value of data:"); + printDebugData(); + } + } + else + { + if(typeStr.equalsIgnoreCase("int")) + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit integer number from -2,147,483,648 to +2,147,483,647", "Input Error", JOptionPane.ERROR_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Must be a 32 bit float number from -2,147,483,648.0 to +2,147,483,647.0", "Input Error", JOptionPane.ERROR_MESSAGE); + } + + return; + } + } + } + + public boolean isCellEditable(int row, int col){ + if (col < 1) { + return false; + } else { + if(data.elementAt(row).toString().contains("int")) + { + OPtable.getColumnModel().getColumn(3).setCellEditor(editorInt); + }else{ + OPtable.getColumnModel().getColumn(3).setCellEditor(editorFloat); + } + return true; + } + } + + @SuppressWarnings("unchecked") + public void insertData(Object[] values){ + data.add(new Vector()); + for(int i =0; i) data.get(data.size()-1)).add(values[i]); + } + fireTableDataChanged(); + } + + public void removeRow(int row){ + data.removeElementAt(row); + fireTableDataChanged(); + } + + private void printDebugData() { + int numRows = getRowCount(); + int numCols = getColumnCount(); + + for (int i=0; i < numRows; i++) { + System.out.print(" row " + i + ":"); + for (int j=0; j < numCols; j++) { + System.out.print(" " + ((Vector) data.get(i)).elementAt(j) ); + } + System.out.println(); + } + System.out.println("----------------------------------------------------"); + } + } // end of tableModel + + public static void main(String args[]) + { + new GTNET_SKT_UDP_GUI(); + + fillInputData(IPtable,numInPoints,gtnetSktInputName,gtnetSktInputType); //Server Data Point File + + fillOutputData(OPtable, numOutPoints, gtnetSktOutputName, gtnetSktOutputType); //Client Data Point File + } + + //simple function to initialize parameters from the data file to variables + public static int InitParamsFromFile(String fname, String[] gtnetSktName, String[] gtnetSktType) + { + FileInputStream fileInputStream = null; + InputStreamReader inputStreamReader = null; + BufferedReader bufferedReader = null; + String[] var = null; + int points = 0; + + try { + String[] result = fileChooser(false,fname); + if (result != null){ + fileInputStream = new FileInputStream(result[1]); + inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); + bufferedReader = new BufferedReader(inputStreamReader); + + // use BufferedReader here + String s; + + while((s = bufferedReader.readLine()) != null){ + var = s.split("\t");//\t ,\n\r + gtnetSktName[points] = var[0]; + gtnetSktType[points] = var[1]; + points++; + } + } + } + catch (IOException e) { + e.printStackTrace(); + } + finally + { + try { + if (fileInputStream != null){ + fileInputStream.close(); + inputStreamReader.close(); + bufferedReader.close(); + } + } + catch (IOException e) { + e.printStackTrace(); + } + } + return points; + } + + //simple function to fill data to table + public static void fillOutputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + OutputTableModel a = (OutputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + if(gtnetSktType[i].contains("int")){ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "1"}; + a.insertData(values); + }else{ + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], "9.9"}; + a.insertData(values); + } + } + + } + + //simple function to fill data to table + public static void fillInputData(JTable pointTable, int numPoint, String[] gtnetSktName, String[] gtnetSktType) + { + InputTableModel a = (InputTableModel) pointTable.getModel(); + for (int i=0; i < numPoint; i++) { + Object[] values = {i, gtnetSktName[i], gtnetSktType[i], ""}; + a.insertData(values); + } + + } + + + //simple function to echo data to terminal + public static void echo(String msg) + { + if (DEBUG) { + System.out.println(msg); + } + + textArea.append(msg + newline); + + //Make sure the new text is visible, even if there + //was a selection in the text area. + textArea.setCaretPosition(textArea.getDocument().getLength()); + + } + + //simple function to save the file name and path + private static String[] fileChooser(boolean folderOnly, String fname) + { + String[] filePath = null; +// JFileChooser c = new JFileChooser(); + myJFileChooser = new JFileChooser(); + File myfile = new File(fname); + + if(folderOnly) + { + myJFileChooser.setDialogTitle("Select Folder..."); + myJFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File folder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = ""; + filePath[1] = folder.getAbsolutePath(); + } + } + else + { + myJFileChooser.setDialogTitle("Select File"); + myJFileChooser.setSelectedFile(myfile); + + int rVal = myJFileChooser.showOpenDialog(null); + + if(rVal == JFileChooser.APPROVE_OPTION) + { + File fileFolder = myJFileChooser.getSelectedFile(); + + filePath = new String[2]; + + filePath[0] = myJFileChooser.getSelectedFile().getName(); + filePath[1] = fileFolder.getAbsolutePath(); + } + } + + return filePath; + }//end saveAsChooser + + public static byte[] convertToByteArray(int value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putInt(value); + return buffer.array(); + } + + public static byte[] convertToByteArray(float value) { + byte[] bytes = new byte[4]; + ByteBuffer buffer = ByteBuffer.allocate(bytes.length); + buffer.putFloat(value); + return buffer.array(); + } + + +} // End of Class + + +/* + * CancelListener + */ +class CancelListener implements ActionListener +{ + public void actionPerformed(ActionEvent e) + { + System.exit(0); + } + } + + +class UDP_ServerTask extends SwingWorker +{ + int npoints = 0; + int ival[] = null; + float fval[] = null; + + public UDP_ServerTask(int numPoints) throws SocketException { + this.npoints = numPoints; + ival = new int[numPoints]; + fval = new float[numPoints]; + } + public void closeTask() { + GTNET_SKT_UDP_GUI.inSocket.close(); + System.out.println("UDP_ServerTask Closed Now"); + GTNET_SKT_UDP_GUI.echo("UDP_ServerTask Closed Now"); + } + @Override + protected Object doInBackground() throws Exception { + ByteBuffer buf; + byte[] data = null; + byte[] inBuf; + + + try + { + //1. creating a server socket, parameter is local port number + GTNET_SKT_UDP_GUI.inSocket = new DatagramSocket(null); + GTNET_SKT_UDP_GUI.inSocket.setReuseAddress(true); + + String ipAddr = GTNET_SKT_UDP_GUI.jTextFieldLocalIp.getText(); + int localPort = Integer.parseInt(GTNET_SKT_UDP_GUI.jTextFieldLocalPort.getText()); + GTNET_SKT_UDP_GUI.inSocket.bind(new InetSocketAddress(ipAddr, localPort)); + + //buffer to receive incoming data + inBuf = new byte[(npoints) * 4]; + DatagramPacket inPacket = new DatagramPacket(inBuf, inBuf.length); + + //2. Wait for an incoming data + GTNET_SKT_UDP_GUI.echo("Server socket created. Waiting for incoming data..."); + + //communication loop + int rxCnt = 0; + while(!isCancelled()) + { + rxCnt++; + + GTNET_SKT_UDP_GUI.inSocket.receive(inPacket); + data = inPacket.getData(); + buf = ByteBuffer.wrap(data); + for (int i = 0; i 1 + OV :1 + prtyp :2 + Proc :1 + Pri :2 + cmv :1 diff --git a/clients/rtds/gtnet_skt/gtnet_skt_2point_udp/gtnet_skt_2point_udp.sib b/clients/rtds/gtnet_skt/gtnet_skt_2point_udp/gtnet_skt_2point_udp.sib new file mode 100644 index 000000000..01856a79a --- /dev/null +++ b/clients/rtds/gtnet_skt/gtnet_skt_2point_udp/gtnet_skt_2point_udp.sib @@ -0,0 +1,242 @@ +RSCAD 5.000.6 +INFORMATION FILE: gtnet_skt_2point_udp.inf +FILE TO DOWNLOAD: gtnet_skt_2point_udp +FINISH TIME: 0.2 SECONDS +PRE-TRIGGER: 20% +PLOT DENSITY: EVERY POINT +METER UPDATE FREQUENCY: 1000 +COMTRADE PLOT SAVE FREQUENCY: 50.0 +COMPONENT: SLIDER + BOX AT (20,12), DIMENSIONS 84 x 150 + NAME: Point + ICON: NONE + ICON AT: (176,99) + GROUP: (NONE) + GROUP: Subsystem #1|CTLs|Inputs + DESC: Point0 + UNITS: + MIN: -21474.83647 + MAX: 21474.83647 + VALUE: -3865.0 +COMPONENT: METER + BOX AT (324,12), DIMENSIONS 115 x 150 + NAME: + ICON: ACTIVE + ICON AT: (176,108) + GROUP: (NONE) + GROUP: Subsystem #1|CTLs|Vars + DESC: rxCnt + UNITS: + MIN: 0.0 + MAX: 10000.0 + FONT_SIZE: 16 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: BUTTON + BOX AT (108,12), DIMENSIONS 50 x 70 + NAME: + ICON: NONE + ICON AT: (291,133) + GROUP: (NONE) + GROUP: Subsystem #1|CTLs|Inputs + DESC: Send +COMPONENT: BUTTON + BOX AT (108,88), DIMENSIONS 50 x 70 + NAME: + ICON: NONE + ICON AT: (812,110) + GROUP: (NONE) + GROUP: Subsystem #1|CTLs|Inputs + DESC: Send2 +COMPONENT: METER + BOX AT (316,168), DIMENSIONS 115 x 150 + NAME: + ICON: ACTIVE + ICON AT: (176,60) + GROUP: (NONE) + GROUP: Subsystem #1|CTLs|Vars + DESC: txCnt + UNITS: + MIN: 0.0 + MAX: 10000.0 + FONT_SIZE: 16 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: METER + BOX AT (556,12), DIMENSIONS 108 x 150 + NAME: + ICON: ACTIVE + ICON AT: (176,8) + GROUP: (NONE) + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTIn0 + UNITS: units + MIN: -100.0 + MAX: 100.0 + FONT_SIZE: 16 + PRECISION: 3 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: METER + BOX AT (664,12), DIMENSIONS 108 x 150 + NAME: + ICON: ACTIVE + ICON AT: (244,8) + GROUP: (NONE) + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin1 + UNITS: units + MIN: 0.0 + MAX: 1.0 + FONT_SIZE: 16 + PRECISION: 3 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: METER + BOX AT (304,196), DIMENSIONS 108 x 150 + NAME: + ICON: ACTIVE + ICON AT: (312,8) + GROUP: (NONE) + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin2 + UNITS: units + MIN: 0.0 + MAX: 1.0 + FONT_SIZE: 16 + PRECISION: 3 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: METER + BOX AT (312,196), DIMENSIONS 108 x 150 + NAME: + ICON: ACTIVE + ICON AT: (380,8) + GROUP: (NONE) + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin3 + UNITS: units + MIN: 0.0 + MAX: 1.0 + FONT_SIZE: 16 + PRECISION: 3 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: METER + BOX AT (384,196), DIMENSIONS 108 x 150 + NAME: + ICON: ACTIVE + ICON AT: (448,8) + GROUP: (NONE) + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin4 + UNITS: units + MIN: 0.0 + MAX: 1.0 + FONT_SIZE: 16 + PRECISION: 3 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: PLOT + BOX AT (8,240), DIMENSIONS 1252 x 380 + NAME: + ICON: EXISTS + ICON AT: (476,344) + GROUP: (NONE) + MIN: 0.0 + MAX: 1.0 + UNLOCKED + NUMBER OF GRAPHS: 1 + X RANGE: DEFAULT + X_DIGITS_OF_PRECISION: 6 + X_AXIS_NOTATION: FIXED + GRAPH 1: 1 CURVE + Y MIN: 0.0 + Y MAX: 1.0 + Y LABEL: units + Y_AXIS_VISIBLE: true + Y_DIGITS_OF_PRECISION: 6 + MAX_CURVE_LABELS: 6 + X_GRID_LINES: 5 + Y_GRID_LINES: 5 + Y_AXIS_NOTATION: FIXED + SHOW CURVE LABELS + SHOW GRID LINES + SMART SCALE + CURVE 1: + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin1 + COLOR: BLACK + LABEL: POINTin1 + PAGE HEIGHT: 0.0 + PAGE WIDTH: 0.0 + TOP MARGIN: 0.0 + BOTTOM MARGIN: 0.0 + LEFT MARGIN: 0.0 + RIGHT MARGIN: 0.0 + GRAPH SPACING: 0.0 +COMPONENT: PLOT + BOX AT (20,172), DIMENSIONS 1252 x 380 + NAME: + ICON: ACTIVE + ICON AT: (354,343) + GROUP: (NONE) + MIN: 0.0 + MAX: 1.0 + UNLOCKED + NUMBER OF GRAPHS: 1 + X RANGE: DEFAULT + X_DIGITS_OF_PRECISION: 6 + X_AXIS_NOTATION: FIXED + GRAPH 1: 5 CURVE + Y MIN: 0.0 + Y MAX: 1.0 + Y LABEL: units + Y_AXIS_VISIBLE: true + Y_DIGITS_OF_PRECISION: 6 + MAX_CURVE_LABELS: 6 + X_GRID_LINES: 5 + Y_GRID_LINES: 5 + Y_AXIS_NOTATION: FIXED + SHOW CURVE LABELS + SHOW GRID LINES + SMART SCALE + CURVE 1: + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTIn0 + COLOR: BLACK + LABEL: POINTIn0 + CURVE 2: + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin1 + COLOR: RED + LABEL: POINTin1 + CURVE 3: + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin2 + COLOR: BLUE + LABEL: POINTin2 + CURVE 4: + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin3 + COLOR: GREEN + LABEL: POINTin3 + CURVE 5: + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: POINTin4 + COLOR: CYAN + LABEL: POINTin4 + PAGE HEIGHT: 0.0 + PAGE WIDTH: 0.0 + TOP MARGIN: 0.0 + BOTTOM MARGIN: 0.0 + LEFT MARGIN: 0.0 + RIGHT MARGIN: 0.0 + GRAPH SPACING: 0.0 diff --git a/clients/rtds/gtnet_skt/gtnet_skt_udp_loopback_rtt/gtnet_skt_udp_loopback_rtt.dft b/clients/rtds/gtnet_skt/gtnet_skt_udp_loopback_rtt/gtnet_skt_udp_loopback_rtt.dft new file mode 100644 index 000000000..d9cbb0eb1 --- /dev/null +++ b/clients/rtds/gtnet_skt/gtnet_skt_udp_loopback_rtt/gtnet_skt_udp_loopback_rtt.dft @@ -0,0 +1,2866 @@ +DRAFT 5.000.6 +RTDS +TITLE: Test Circuit +CREATED: Mar 21, 2014 (jss) +LAST-MODIFIED: May 8, 2017 (svg) +TIME-STEP: 5.0E-5 +CALC_TIME_STEP: OFF +FINISH-TIME: 0.2 +PRINT-STEP: 5.0E-4 +RTDS-RACK: 3 +COMPILE-MODE: AUTO +PROCESSOR-ASSIGNMENT: ADVANCED +DISTRIBUTION_MODE: 0 +RTDS REAL-TIME: Yes +1 SUBSYSTEMS +SUBSYSTEM-TAB-NAME: SS #1 +SUBSYSTEM-TITLE: +SUBSYSTEM-COMMENT: +SUBSYSTEM-PRINTMODE: PRINT-LAYOUT:CUSTOM PAPER-DIMENSIONS:8.5x11 +12 COMPONENTS +WIRE + 1584 80 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +wirelabel + 1616 80 0 0 3 + Name :POINT0 + COL :BLUE + Monitor :Yes +GROUP + 144 176 0 0 0 + 4 +wirelabel + 16 208 0 0 3 + Name :Send + COL :BLUE + Monitor :Yes +wirelabel + 272 240 0 0 3 + Name :Recv1 + COL :BLUE + Monitor :Yes +wirelabel + 272 304 0 0 3 + Name :ReadyToSend1 + COL :BLUE + Monitor :Yes +_rtds_GTNET_SKT.def + 144 80 0 0 1223 + Name :GTNETSKT1 + Mode :UDP + DataDirection :Send/Receive + Port :1 + Card :1 + Proc :1 + Pri :6 + prtyp :2 + gtnettype :GTNETx2 + sfx : + FromFile :NO + note : + ToFile :NO + note1 : + numVarsToGTNETSKT :1 + out0 :dtc + TypeToGTNETSKT0 :Int + out1 :POINT1 + TypeToGTNETSKT1 :Float + out2 :POINT2 + TypeToGTNETSKT2 :Int + out3 :POINT3 + TypeToGTNETSKT3 :Int + out4 :POINT4 + TypeToGTNETSKT4 :Int + out5 :POINT5 + TypeToGTNETSKT5 :Int + out6 :POINT6 + TypeToGTNETSKT6 :Int + out7 :POINT7 + TypeToGTNETSKT7 :Int + out8 :POINT8 + TypeToGTNETSKT8 :Int + out9 :POINT9 + TypeToGTNETSKT9 :Int + out10 :POINT10 + TypeToGTNETSKT10 :Int + out11 :POINT11 + TypeToGTNETSKT11 :Int + out12 :POINT12 + TypeToGTNETSKT12 :Int + out13 :POINT13 + TypeToGTNETSKT13 :Int + out14 :POINT14 + TypeToGTNETSKT14 :Int + out15 :POINT15 + TypeToGTNETSKT15 :Int + out16 :POINT16 + TypeToGTNETSKT16 :Int + out17 :POINT17 + TypeToGTNETSKT17 :Int + out18 :POINT18 + TypeToGTNETSKT18 :Int + out19 :POINT19 + TypeToGTNETSKT19 :Int + out20 :POINT20 + TypeToGTNETSKT20 :Int + out21 :POINT21 + TypeToGTNETSKT21 :Int + out22 :POINT22 + TypeToGTNETSKT22 :Int + out23 :POINT23 + TypeToGTNETSKT23 :Int + out24 :POINT24 + TypeToGTNETSKT24 :Int + out25 :POINT25 + TypeToGTNETSKT25 :Int + out26 :POINT26 + TypeToGTNETSKT26 :Int + out27 :POINT27 + TypeToGTNETSKT27 :Int + out28 :POINT28 + TypeToGTNETSKT28 :Int + out29 :POINT29 + TypeToGTNETSKT29 :Int + out30 :POINT30 + TypeToGTNETSKT30 :Int + out31 :POINT31 + TypeToGTNETSKT31 :Int + out32 :POINT32 + TypeToGTNETSKT32 :Int + out33 :POINT33 + TypeToGTNETSKT33 :Int + out34 :POINT34 + TypeToGTNETSKT34 :Int + out35 :POINT35 + TypeToGTNETSKT35 :Int + out36 :POINT36 + TypeToGTNETSKT36 :Int + out37 :POINT37 + TypeToGTNETSKT37 :Int + out38 :POINT38 + TypeToGTNETSKT38 :Int + out39 :POINT39 + TypeToGTNETSKT39 :Int + out40 :POINT40 + TypeToGTNETSKT40 :Int + out41 :POINT41 + TypeToGTNETSKT41 :Int + out42 :POINT42 + TypeToGTNETSKT42 :Int + out43 :POINT43 + TypeToGTNETSKT43 :Int + out44 :POINT44 + TypeToGTNETSKT44 :Int + out45 :POINT45 + TypeToGTNETSKT45 :Int + out46 :POINT46 + TypeToGTNETSKT46 :Int + out47 :POINT47 + TypeToGTNETSKT47 :Int + out48 :POINT48 + TypeToGTNETSKT48 :Int + out49 :POINT49 + TypeToGTNETSKT49 :Int + out50 :POINT50 + TypeToGTNETSKT50 :Int + out51 :POINT51 + TypeToGTNETSKT51 :Int + out52 :POINT52 + TypeToGTNETSKT52 :Int + out53 :POINT53 + TypeToGTNETSKT53 :Int + out54 :POINT54 + TypeToGTNETSKT54 :Int + out55 :POINT55 + TypeToGTNETSKT55 :Int + out56 :POINT56 + TypeToGTNETSKT56 :Int + out57 :POINT57 + TypeToGTNETSKT57 :Int + out58 :POINT58 + TypeToGTNETSKT58 :Int + out59 :POINT59 + TypeToGTNETSKT59 :Int + out60 :POINT60 + TypeToGTNETSKT60 :Int + out61 :POINT61 + TypeToGTNETSKT61 :Int + out62 :POINT62 + TypeToGTNETSKT62 :Int + out63 :POINT63 + TypeToGTNETSKT63 :Int + out64 :POINT64 + TypeToGTNETSKT64 :Int + out65 :POINT65 + TypeToGTNETSKT65 :Int + out66 :POINT66 + TypeToGTNETSKT66 :Int + out67 :POINT67 + TypeToGTNETSKT67 :Int + out68 :POINT68 + TypeToGTNETSKT68 :Int + out69 :POINT69 + TypeToGTNETSKT69 :Int + out70 :POINT70 + TypeToGTNETSKT70 :Int + out71 :POINT71 + TypeToGTNETSKT71 :Int + out72 :POINT72 + TypeToGTNETSKT72 :Int + out73 :POINT73 + TypeToGTNETSKT73 :Int + out74 :POINT74 + TypeToGTNETSKT74 :Int + out75 :POINT75 + TypeToGTNETSKT75 :Int + out76 :POINT76 + TypeToGTNETSKT76 :Int + out77 :POINT77 + TypeToGTNETSKT77 :Int + out78 :POINT78 + TypeToGTNETSKT78 :Int + out79 :POINT79 + TypeToGTNETSKT79 :Int + out80 :POINT80 + TypeToGTNETSKT80 :Int + out81 :POINT81 + TypeToGTNETSKT81 :Int + out82 :POINT82 + TypeToGTNETSKT82 :Int + out83 :POINT83 + TypeToGTNETSKT83 :Int + out84 :POINT84 + TypeToGTNETSKT84 :Int + out85 :POINT85 + TypeToGTNETSKT85 :Int + out86 :POINT86 + TypeToGTNETSKT86 :Int + out87 :POINT87 + TypeToGTNETSKT87 :Int + out88 :POINT88 + TypeToGTNETSKT88 :Int + out89 :POINT89 + TypeToGTNETSKT89 :Int + out90 :POINT90 + TypeToGTNETSKT90 :Int + out91 :POINT91 + TypeToGTNETSKT91 :Int + out92 :POINT92 + TypeToGTNETSKT92 :Int + out93 :POINT93 + TypeToGTNETSKT93 :Int + out94 :POINT94 + TypeToGTNETSKT94 :Int + out95 :POINT95 + TypeToGTNETSKT95 :Int + out96 :POINT96 + TypeToGTNETSKT96 :Int + out97 :POINT97 + TypeToGTNETSKT97 :Int + out98 :POINT98 + TypeToGTNETSKT98 :Int + out99 :POINT99 + TypeToGTNETSKT99 :Int + out100 :POINT100 + TypeToGTNETSKT100 :Int + out101 :POINT101 + TypeToGTNETSKT101 :Int + out102 :POINT102 + TypeToGTNETSKT102 :Int + out103 :POINT103 + TypeToGTNETSKT103 :Int + out104 :POINT104 + TypeToGTNETSKT104 :Int + out105 :POINT105 + TypeToGTNETSKT105 :Int + out106 :POINT106 + TypeToGTNETSKT106 :Int + out107 :POINT107 + TypeToGTNETSKT107 :Int + out108 :POINT108 + TypeToGTNETSKT108 :Int + out109 :POINT109 + TypeToGTNETSKT109 :Int + out110 :POINT110 + TypeToGTNETSKT110 :Int + out111 :POINT111 + TypeToGTNETSKT111 :Int + out112 :POINT112 + TypeToGTNETSKT112 :Int + out113 :POINT113 + TypeToGTNETSKT113 :Int + out114 :POINT114 + TypeToGTNETSKT114 :Int + out115 :POINT115 + TypeToGTNETSKT115 :Int + out116 :POINT116 + TypeToGTNETSKT116 :Int + out117 :POINT117 + TypeToGTNETSKT117 :Int + out118 :POINT118 + TypeToGTNETSKT118 :Int + out119 :POINT119 + TypeToGTNETSKT119 :Int + out120 :POINT120 + TypeToGTNETSKT120 :Int + out121 :POINT121 + TypeToGTNETSKT121 :Int + out122 :POINT122 + TypeToGTNETSKT122 :Int + out123 :POINT123 + TypeToGTNETSKT123 :Int + out124 :POINT124 + TypeToGTNETSKT124 :Int + out125 :POINT125 + TypeToGTNETSKT125 :Int + out126 :POINT126 + TypeToGTNETSKT126 :Int + out127 :POINT127 + TypeToGTNETSKT127 :Int + out128 :POINT128 + TypeToGTNETSKT128 :Int + out129 :POINT129 + TypeToGTNETSKT129 :Int + out130 :POINT130 + TypeToGTNETSKT130 :Int + out131 :POINT131 + TypeToGTNETSKT131 :Int + out132 :POINT132 + TypeToGTNETSKT132 :Int + out133 :POINT133 + TypeToGTNETSKT133 :Int + out134 :POINT134 + TypeToGTNETSKT134 :Int + out135 :POINT135 + TypeToGTNETSKT135 :Int + out136 :POINT136 + TypeToGTNETSKT136 :Int + out137 :POINT137 + TypeToGTNETSKT137 :Int + out138 :POINT138 + TypeToGTNETSKT138 :Int + out139 :POINT139 + TypeToGTNETSKT139 :Int + out140 :POINT140 + TypeToGTNETSKT140 :Int + out141 :POINT141 + TypeToGTNETSKT141 :Int + out142 :POINT142 + TypeToGTNETSKT142 :Int + out143 :POINT143 + TypeToGTNETSKT143 :Int + out144 :POINT144 + TypeToGTNETSKT144 :Int + out145 :POINT145 + TypeToGTNETSKT145 :Int + out146 :POINT146 + TypeToGTNETSKT146 :Int + out147 :POINT147 + TypeToGTNETSKT147 :Int + out148 :POINT148 + TypeToGTNETSKT148 :Int + out149 :POINT149 + TypeToGTNETSKT149 :Int + out150 :POINT150 + TypeToGTNETSKT150 :Int + out151 :POINT151 + TypeToGTNETSKT151 :Int + out152 :POINT152 + TypeToGTNETSKT152 :Int + out153 :POINT153 + TypeToGTNETSKT153 :Int + out154 :POINT154 + TypeToGTNETSKT154 :Int + out155 :POINT155 + TypeToGTNETSKT155 :Int + out156 :POINT156 + TypeToGTNETSKT156 :Int + out157 :POINT157 + TypeToGTNETSKT157 :Int + out158 :POINT158 + TypeToGTNETSKT158 :Int + out159 :POINT159 + TypeToGTNETSKT159 :Int + out160 :POINT160 + TypeToGTNETSKT160 :Int + out161 :POINT161 + TypeToGTNETSKT161 :Int + out162 :POINT162 + TypeToGTNETSKT162 :Int + out163 :POINT163 + TypeToGTNETSKT163 :Int + out164 :POINT164 + TypeToGTNETSKT164 :Int + out165 :POINT165 + TypeToGTNETSKT165 :Int + out166 :POINT166 + TypeToGTNETSKT166 :Int + out167 :POINT167 + TypeToGTNETSKT167 :Int + out168 :POINT168 + TypeToGTNETSKT168 :Int + out169 :POINT169 + TypeToGTNETSKT169 :Int + out170 :POINT170 + TypeToGTNETSKT170 :Int + out171 :POINT171 + TypeToGTNETSKT171 :Int + out172 :POINT172 + TypeToGTNETSKT172 :Int + out173 :POINT173 + TypeToGTNETSKT173 :Int + out174 :POINT174 + TypeToGTNETSKT174 :Int + out175 :POINT175 + TypeToGTNETSKT175 :Int + out176 :POINT176 + TypeToGTNETSKT176 :Int + out177 :POINT177 + TypeToGTNETSKT177 :Int + out178 :POINT178 + TypeToGTNETSKT178 :Int + out179 :POINT179 + TypeToGTNETSKT179 :Int + out180 :POINT180 + TypeToGTNETSKT180 :Int + out181 :POINT181 + TypeToGTNETSKT181 :Int + out182 :POINT182 + TypeToGTNETSKT182 :Int + out183 :POINT183 + TypeToGTNETSKT183 :Int + out184 :POINT184 + TypeToGTNETSKT184 :Int + out185 :POINT185 + TypeToGTNETSKT185 :Int + out186 :POINT186 + TypeToGTNETSKT186 :Int + out187 :POINT187 + TypeToGTNETSKT187 :Int + out188 :POINT188 + TypeToGTNETSKT188 :Int + out189 :POINT189 + TypeToGTNETSKT189 :Int + out190 :POINT190 + TypeToGTNETSKT190 :Int + out191 :POINT191 + TypeToGTNETSKT191 :Int + out192 :POINT192 + TypeToGTNETSKT192 :Int + out193 :POINT193 + TypeToGTNETSKT193 :Int + out194 :POINT194 + TypeToGTNETSKT194 :Int + out195 :POINT195 + TypeToGTNETSKT195 :Int + out196 :POINT196 + TypeToGTNETSKT196 :Int + out197 :POINT197 + TypeToGTNETSKT197 :Int + out198 :POINT198 + TypeToGTNETSKT198 :Int + out199 :POINT199 + TypeToGTNETSKT199 :Int + out200 :POINT200 + TypeToGTNETSKT200 :Int + out201 :POINT201 + TypeToGTNETSKT201 :Int + out202 :POINT202 + TypeToGTNETSKT202 :Int + out203 :POINT203 + TypeToGTNETSKT203 :Int + out204 :POINT204 + TypeToGTNETSKT204 :Int + out205 :POINT205 + TypeToGTNETSKT205 :Int + out206 :POINT206 + TypeToGTNETSKT206 :Int + out207 :POINT207 + TypeToGTNETSKT207 :Int + out208 :POINT208 + TypeToGTNETSKT208 :Int + out209 :POINT209 + TypeToGTNETSKT209 :Int + out210 :POINT210 + TypeToGTNETSKT210 :Int + out211 :POINT211 + TypeToGTNETSKT211 :Int + out212 :POINT212 + TypeToGTNETSKT212 :Int + out213 :POINT213 + TypeToGTNETSKT213 :Int + out214 :POINT214 + TypeToGTNETSKT214 :Int + out215 :POINT215 + TypeToGTNETSKT215 :Int + out216 :POINT216 + TypeToGTNETSKT216 :Int + out217 :POINT217 + TypeToGTNETSKT217 :Int + out218 :POINT218 + TypeToGTNETSKT218 :Int + out219 :POINT219 + TypeToGTNETSKT219 :Int + out220 :POINT220 + TypeToGTNETSKT220 :Int + out221 :POINT221 + TypeToGTNETSKT221 :Int + out222 :POINT222 + TypeToGTNETSKT222 :Int + out223 :POINT223 + TypeToGTNETSKT223 :Int + out224 :POINT224 + TypeToGTNETSKT224 :Int + out225 :POINT225 + TypeToGTNETSKT225 :Int + out226 :POINT226 + TypeToGTNETSKT226 :Int + out227 :POINT227 + TypeToGTNETSKT227 :Int + out228 :POINT228 + TypeToGTNETSKT228 :Int + out229 :POINT229 + TypeToGTNETSKT229 :Int + out230 :POINT230 + TypeToGTNETSKT230 :Int + out231 :POINT231 + TypeToGTNETSKT231 :Int + out232 :POINT232 + TypeToGTNETSKT232 :Int + out233 :POINT233 + TypeToGTNETSKT233 :Int + out234 :POINT234 + TypeToGTNETSKT234 :Int + out235 :POINT235 + TypeToGTNETSKT235 :Int + out236 :POINT236 + TypeToGTNETSKT236 :Int + out237 :POINT237 + TypeToGTNETSKT237 :Int + out238 :POINT238 + TypeToGTNETSKT238 :Int + out239 :POINT239 + TypeToGTNETSKT239 :Int + out240 :POINT240 + TypeToGTNETSKT240 :Int + out241 :POINT241 + TypeToGTNETSKT241 :Int + out242 :POINT242 + TypeToGTNETSKT242 :Int + out243 :POINT243 + TypeToGTNETSKT243 :Int + out244 :POINT244 + TypeToGTNETSKT244 :Int + out245 :POINT245 + TypeToGTNETSKT245 :Int + out246 :POINT246 + TypeToGTNETSKT246 :Int + out247 :POINT247 + TypeToGTNETSKT247 :Int + out248 :POINT248 + TypeToGTNETSKT248 :Int + out249 :POINT249 + TypeToGTNETSKT249 :Int + out250 :POINT250 + TypeToGTNETSKT250 :Int + out251 :POINT251 + TypeToGTNETSKT251 :Int + out252 :POINT252 + TypeToGTNETSKT252 :Int + out253 :POINT253 + TypeToGTNETSKT253 :Int + out254 :POINT254 + TypeToGTNETSKT254 :Int + out255 :POINT255 + TypeToGTNETSKT255 :Int + out256 :POINT256 + TypeToGTNETSKT256 :Int + out257 :POINT257 + TypeToGTNETSKT257 :Int + out258 :POINT258 + TypeToGTNETSKT258 :Int + out259 :POINT259 + TypeToGTNETSKT259 :Int + out260 :POINT260 + TypeToGTNETSKT260 :Int + out261 :POINT261 + TypeToGTNETSKT261 :Int + out262 :POINT262 + TypeToGTNETSKT262 :Int + out263 :POINT263 + TypeToGTNETSKT263 :Int + out264 :POINT264 + TypeToGTNETSKT264 :Int + out265 :POINT265 + TypeToGTNETSKT265 :Int + out266 :POINT266 + TypeToGTNETSKT266 :Int + out267 :POINT267 + TypeToGTNETSKT267 :Int + out268 :POINT268 + TypeToGTNETSKT268 :Int + out269 :POINT269 + TypeToGTNETSKT269 :Int + out270 :POINT270 + TypeToGTNETSKT270 :Int + out271 :POINT271 + TypeToGTNETSKT271 :Int + out272 :POINT272 + TypeToGTNETSKT272 :Int + out273 :POINT273 + TypeToGTNETSKT273 :Int + out274 :POINT274 + TypeToGTNETSKT274 :Int + out275 :POINT275 + TypeToGTNETSKT275 :Int + out276 :POINT276 + TypeToGTNETSKT276 :Int + out277 :POINT277 + TypeToGTNETSKT277 :Int + out278 :POINT278 + TypeToGTNETSKT278 :Int + out279 :POINT279 + TypeToGTNETSKT279 :Int + out280 :POINT280 + TypeToGTNETSKT280 :Int + out281 :POINT281 + TypeToGTNETSKT281 :Int + out282 :POINT282 + TypeToGTNETSKT282 :Int + out283 :POINT283 + TypeToGTNETSKT283 :Int + out284 :POINT284 + TypeToGTNETSKT284 :Int + out285 :POINT285 + TypeToGTNETSKT285 :Int + out286 :POINT286 + TypeToGTNETSKT286 :Int + out287 :POINT287 + TypeToGTNETSKT287 :Int + out288 :POINT288 + TypeToGTNETSKT288 :Int + out289 :POINT289 + TypeToGTNETSKT289 :Int + out290 :POINT290 + TypeToGTNETSKT290 :Int + out291 :POINT291 + TypeToGTNETSKT291 :Int + out292 :POINT292 + TypeToGTNETSKT292 :Int + out293 :POINT293 + TypeToGTNETSKT293 :Int + out294 :POINT294 + TypeToGTNETSKT294 :Int + out295 :POINT295 + TypeToGTNETSKT295 :Int + out296 :POINT296 + TypeToGTNETSKT296 :Int + out297 :POINT297 + TypeToGTNETSKT297 :Int + out298 :POINT298 + TypeToGTNETSKT298 :Int + out299 :POINT299 + TypeToGTNETSKT299 :Int + numVarsFromGTNETSKT :1 + in0 :cntr1 + TypeFrGTNETSKT0 :Int + in1 :POINTin1 + TypeFrGTNETSKT1 :Float + in2 :POINT2 + TypeFrGTNETSKT2 :Int + in3 :POINT3 + TypeFrGTNETSKT3 :Int + in4 :POINT4 + TypeFrGTNETSKT4 :Int + in5 :POINT5 + TypeFrGTNETSKT5 :Int + in6 :POINT6 + TypeFrGTNETSKT6 :Int + in7 :POINT7 + TypeFrGTNETSKT7 :Int + in8 :POINT8 + TypeFrGTNETSKT8 :Int + in9 :POINT9 + TypeFrGTNETSKT9 :Int + in10 :POINT10 + TypeFrGTNETSKT10 :Int + in11 :POINT11 + TypeFrGTNETSKT11 :Int + in12 :POINT12 + TypeFrGTNETSKT12 :Int + in13 :POINT13 + TypeFrGTNETSKT13 :Int + in14 :POINT14 + TypeFrGTNETSKT14 :Int + in15 :POINT15 + TypeFrGTNETSKT15 :Int + in16 :POINT16 + TypeFrGTNETSKT16 :Int + in17 :POINT17 + TypeFrGTNETSKT17 :Int + in18 :POINT18 + TypeFrGTNETSKT18 :Int + in19 :POINT19 + TypeFrGTNETSKT19 :Int + in20 :POINT20 + TypeFrGTNETSKT20 :Int + in21 :POINT21 + TypeFrGTNETSKT21 :Int + in22 :POINT22 + TypeFrGTNETSKT22 :Int + in23 :POINT23 + TypeFrGTNETSKT23 :Int + in24 :POINT24 + TypeFrGTNETSKT24 :Int + in25 :POINT25 + TypeFrGTNETSKT25 :Int + in26 :POINT26 + TypeFrGTNETSKT26 :Int + in27 :POINT27 + TypeFrGTNETSKT27 :Int + in28 :POINT28 + TypeFrGTNETSKT28 :Int + in29 :POINT29 + TypeFrGTNETSKT29 :Int + in30 :POINT30 + TypeFrGTNETSKT30 :Int + in31 :POINT31 + TypeFrGTNETSKT31 :Int + in32 :POINT32 + TypeFrGTNETSKT32 :Int + in33 :POINT33 + TypeFrGTNETSKT33 :Int + in34 :POINT34 + TypeFrGTNETSKT34 :Int + in35 :POINT35 + TypeFrGTNETSKT35 :Int + in36 :POINT36 + TypeFrGTNETSKT36 :Int + in37 :POINT37 + TypeFrGTNETSKT37 :Int + in38 :POINT38 + TypeFrGTNETSKT38 :Int + in39 :POINT39 + TypeFrGTNETSKT39 :Int + in40 :POINT40 + TypeFrGTNETSKT40 :Int + in41 :POINT41 + TypeFrGTNETSKT41 :Int + in42 :POINT42 + TypeFrGTNETSKT42 :Int + in43 :POINT43 + TypeFrGTNETSKT43 :Int + in44 :POINT44 + TypeFrGTNETSKT44 :Int + in45 :POINT45 + TypeFrGTNETSKT45 :Int + in46 :POINT46 + TypeFrGTNETSKT46 :Int + in47 :POINT47 + TypeFrGTNETSKT47 :Int + in48 :POINT48 + TypeFrGTNETSKT48 :Int + in49 :POINT49 + TypeFrGTNETSKT49 :Int + in50 :POINT50 + TypeFrGTNETSKT50 :Int + in51 :POINT51 + TypeFrGTNETSKT51 :Int + in52 :POINT52 + TypeFrGTNETSKT52 :Int + in53 :POINT53 + TypeFrGTNETSKT53 :Int + in54 :POINT54 + TypeFrGTNETSKT54 :Int + in55 :POINT55 + TypeFrGTNETSKT55 :Int + in56 :POINT56 + TypeFrGTNETSKT56 :Int + in57 :POINT57 + TypeFrGTNETSKT57 :Int + in58 :POINT58 + TypeFrGTNETSKT58 :Int + in59 :POINT59 + TypeFrGTNETSKT59 :Int + in60 :POINT60 + TypeFrGTNETSKT60 :Int + in61 :POINT61 + TypeFrGTNETSKT61 :Int + in62 :POINT62 + TypeFrGTNETSKT62 :Int + in63 :POINT63 + TypeFrGTNETSKT63 :Int + in64 :POINT64 + TypeFrGTNETSKT64 :Int + in65 :POINT65 + TypeFrGTNETSKT65 :Int + in66 :POINT66 + TypeFrGTNETSKT66 :Int + in67 :POINT67 + TypeFrGTNETSKT67 :Int + in68 :POINT68 + TypeFrGTNETSKT68 :Int + in69 :POINT69 + TypeFrGTNETSKT69 :Int + in70 :POINT70 + TypeFrGTNETSKT70 :Int + in71 :POINT71 + TypeFrGTNETSKT71 :Int + in72 :POINT72 + TypeFrGTNETSKT72 :Int + in73 :POINT73 + TypeFrGTNETSKT73 :Int + in74 :POINT74 + TypeFrGTNETSKT74 :Int + in75 :POINT75 + TypeFrGTNETSKT75 :Int + in76 :POINT76 + TypeFrGTNETSKT76 :Int + in77 :POINT77 + TypeFrGTNETSKT77 :Int + in78 :POINT78 + TypeFrGTNETSKT78 :Int + in79 :POINT79 + TypeFrGTNETSKT79 :Int + in80 :POINT80 + TypeFrGTNETSKT80 :Int + in81 :POINT81 + TypeFrGTNETSKT81 :Int + in82 :POINT82 + TypeFrGTNETSKT82 :Int + in83 :POINT83 + TypeFrGTNETSKT83 :Int + in84 :POINT84 + TypeFrGTNETSKT84 :Int + in85 :POINT85 + TypeFrGTNETSKT85 :Int + in86 :POINT86 + TypeFrGTNETSKT86 :Int + in87 :POINT87 + TypeFrGTNETSKT87 :Int + in88 :POINT88 + TypeFrGTNETSKT88 :Int + in89 :POINT89 + TypeFrGTNETSKT89 :Int + in90 :POINT90 + TypeFrGTNETSKT90 :Int + in91 :POINT91 + TypeFrGTNETSKT91 :Int + in92 :POINT92 + TypeFrGTNETSKT92 :Int + in93 :POINT93 + TypeFrGTNETSKT93 :Int + in94 :POINT94 + TypeFrGTNETSKT94 :Int + in95 :POINT95 + TypeFrGTNETSKT95 :Int + in96 :POINT96 + TypeFrGTNETSKT96 :Int + in97 :POINT97 + TypeFrGTNETSKT97 :Int + in98 :POINT98 + TypeFrGTNETSKT98 :Int + in99 :POINT99 + TypeFrGTNETSKT99 :Int + in100 :POINT100 + TypeFrGTNETSKT100 :Int + in101 :POINT101 + TypeFrGTNETSKT101 :Int + in102 :POINT102 + TypeFrGTNETSKT102 :Int + in103 :POINT103 + TypeFrGTNETSKT103 :Int + in104 :POINT104 + TypeFrGTNETSKT104 :Int + in105 :POINT105 + TypeFrGTNETSKT105 :Int + in106 :POINT106 + TypeFrGTNETSKT106 :Int + in107 :POINT107 + TypeFrGTNETSKT107 :Int + in108 :POINT108 + TypeFrGTNETSKT108 :Int + in109 :POINT109 + TypeFrGTNETSKT109 :Int + in110 :POINT110 + TypeFrGTNETSKT110 :Int + in111 :POINT111 + TypeFrGTNETSKT111 :Int + in112 :POINT112 + TypeFrGTNETSKT112 :Int + in113 :POINT113 + TypeFrGTNETSKT113 :Int + in114 :POINT114 + TypeFrGTNETSKT114 :Int + in115 :POINT115 + TypeFrGTNETSKT115 :Int + in116 :POINT116 + TypeFrGTNETSKT116 :Int + in117 :POINT117 + TypeFrGTNETSKT117 :Int + in118 :POINT118 + TypeFrGTNETSKT118 :Int + in119 :POINT119 + TypeFrGTNETSKT119 :Int + in120 :POINT120 + TypeFrGTNETSKT120 :Int + in121 :POINT121 + TypeFrGTNETSKT121 :Int + in122 :POINT122 + TypeFrGTNETSKT122 :Int + in123 :POINT123 + TypeFrGTNETSKT123 :Int + in124 :POINT124 + TypeFrGTNETSKT124 :Int + in125 :POINT125 + TypeFrGTNETSKT125 :Int + in126 :POINT126 + TypeFrGTNETSKT126 :Int + in127 :POINT127 + TypeFrGTNETSKT127 :Int + in128 :POINT128 + TypeFrGTNETSKT128 :Int + in129 :POINT129 + TypeFrGTNETSKT129 :Int + in130 :POINT130 + TypeFrGTNETSKT130 :Int + in131 :POINT131 + TypeFrGTNETSKT131 :Int + in132 :POINT132 + TypeFrGTNETSKT132 :Int + in133 :POINT133 + TypeFrGTNETSKT133 :Int + in134 :POINT134 + TypeFrGTNETSKT134 :Int + in135 :POINT135 + TypeFrGTNETSKT135 :Int + in136 :POINT136 + TypeFrGTNETSKT136 :Int + in137 :POINT137 + TypeFrGTNETSKT137 :Int + in138 :POINT138 + TypeFrGTNETSKT138 :Int + in139 :POINT139 + TypeFrGTNETSKT139 :Int + in140 :POINT140 + TypeFrGTNETSKT140 :Int + in141 :POINT141 + TypeFrGTNETSKT141 :Int + in142 :POINT142 + TypeFrGTNETSKT142 :Int + in143 :POINT143 + TypeFrGTNETSKT143 :Int + in144 :POINT144 + TypeFrGTNETSKT144 :Int + in145 :POINT145 + TypeFrGTNETSKT145 :Int + in146 :POINT146 + TypeFrGTNETSKT146 :Int + in147 :POINT147 + TypeFrGTNETSKT147 :Int + in148 :POINT148 + TypeFrGTNETSKT148 :Int + in149 :POINT149 + TypeFrGTNETSKT149 :Int + in150 :POINT150 + TypeFrGTNETSKT150 :Int + in151 :POINT151 + TypeFrGTNETSKT151 :Int + in152 :POINT152 + TypeFrGTNETSKT152 :Int + in153 :POINT153 + TypeFrGTNETSKT153 :Int + in154 :POINT154 + TypeFrGTNETSKT154 :Int + in155 :POINT155 + TypeFrGTNETSKT155 :Int + in156 :POINT156 + TypeFrGTNETSKT156 :Int + in157 :POINT157 + TypeFrGTNETSKT157 :Int + in158 :POINT158 + TypeFrGTNETSKT158 :Int + in159 :POINT159 + TypeFrGTNETSKT159 :Int + in160 :POINT160 + TypeFrGTNETSKT160 :Int + in161 :POINT161 + TypeFrGTNETSKT161 :Int + in162 :POINT162 + TypeFrGTNETSKT162 :Int + in163 :POINT163 + TypeFrGTNETSKT163 :Int + in164 :POINT164 + TypeFrGTNETSKT164 :Int + in165 :POINT165 + TypeFrGTNETSKT165 :Int + in166 :POINT166 + TypeFrGTNETSKT166 :Int + in167 :POINT167 + TypeFrGTNETSKT167 :Int + in168 :POINT168 + TypeFrGTNETSKT168 :Int + in169 :POINT169 + TypeFrGTNETSKT169 :Int + in170 :POINT170 + TypeFrGTNETSKT170 :Int + in171 :POINT171 + TypeFrGTNETSKT171 :Int + in172 :POINT172 + TypeFrGTNETSKT172 :Int + in173 :POINT173 + TypeFrGTNETSKT173 :Int + in174 :POINT174 + TypeFrGTNETSKT174 :Int + in175 :POINT175 + TypeFrGTNETSKT175 :Int + in176 :POINT176 + TypeFrGTNETSKT176 :Int + in177 :POINT177 + TypeFrGTNETSKT177 :Int + in178 :POINT178 + TypeFrGTNETSKT178 :Int + in179 :POINT179 + TypeFrGTNETSKT179 :Int + in180 :POINT180 + TypeFrGTNETSKT180 :Int + in181 :POINT181 + TypeFrGTNETSKT181 :Int + in182 :POINT182 + TypeFrGTNETSKT182 :Int + in183 :POINT183 + TypeFrGTNETSKT183 :Int + in184 :POINT184 + TypeFrGTNETSKT184 :Int + in185 :POINT185 + TypeFrGTNETSKT185 :Int + in186 :POINT186 + TypeFrGTNETSKT186 :Int + in187 :POINT187 + TypeFrGTNETSKT187 :Int + in188 :POINT188 + TypeFrGTNETSKT188 :Int + in189 :POINT189 + TypeFrGTNETSKT189 :Int + in190 :POINT190 + TypeFrGTNETSKT190 :Int + in191 :POINT191 + TypeFrGTNETSKT191 :Int + in192 :POINT192 + TypeFrGTNETSKT192 :Int + in193 :POINT193 + TypeFrGTNETSKT193 :Int + in194 :POINT194 + TypeFrGTNETSKT194 :Int + in195 :POINT195 + TypeFrGTNETSKT195 :Int + in196 :POINT196 + TypeFrGTNETSKT196 :Int + in197 :POINT197 + TypeFrGTNETSKT197 :Int + in198 :POINT198 + TypeFrGTNETSKT198 :Int + in199 :POINT199 + TypeFrGTNETSKT199 :Int + in200 :POINT200 + TypeFrGTNETSKT200 :Int + in201 :POINT201 + TypeFrGTNETSKT201 :Int + in202 :POINT202 + TypeFrGTNETSKT202 :Int + in203 :POINT203 + TypeFrGTNETSKT203 :Int + in204 :POINT204 + TypeFrGTNETSKT204 :Int + in205 :POINT205 + TypeFrGTNETSKT205 :Int + in206 :POINT206 + TypeFrGTNETSKT206 :Int + in207 :POINT207 + TypeFrGTNETSKT207 :Int + in208 :POINT208 + TypeFrGTNETSKT208 :Int + in209 :POINT209 + TypeFrGTNETSKT209 :Int + in210 :POINT210 + TypeFrGTNETSKT210 :Int + in211 :POINT211 + TypeFrGTNETSKT211 :Int + in212 :POINT212 + TypeFrGTNETSKT212 :Int + in213 :POINT213 + TypeFrGTNETSKT213 :Int + in214 :POINT214 + TypeFrGTNETSKT214 :Int + in215 :POINT215 + TypeFrGTNETSKT215 :Int + in216 :POINT216 + TypeFrGTNETSKT216 :Int + in217 :POINT217 + TypeFrGTNETSKT217 :Int + in218 :POINT218 + TypeFrGTNETSKT218 :Int + in219 :POINT219 + TypeFrGTNETSKT219 :Int + in220 :POINT220 + TypeFrGTNETSKT220 :Int + in221 :POINT221 + TypeFrGTNETSKT221 :Int + in222 :POINT222 + TypeFrGTNETSKT222 :Int + in223 :POINT223 + TypeFrGTNETSKT223 :Int + in224 :POINT224 + TypeFrGTNETSKT224 :Int + in225 :POINT225 + TypeFrGTNETSKT225 :Int + in226 :POINT226 + TypeFrGTNETSKT226 :Int + in227 :POINT227 + TypeFrGTNETSKT227 :Int + in228 :POINT228 + TypeFrGTNETSKT228 :Int + in229 :POINT229 + TypeFrGTNETSKT229 :Int + in230 :POINT230 + TypeFrGTNETSKT230 :Int + in231 :POINT231 + TypeFrGTNETSKT231 :Int + in232 :POINT232 + TypeFrGTNETSKT232 :Int + in233 :POINT233 + TypeFrGTNETSKT233 :Int + in234 :POINT234 + TypeFrGTNETSKT234 :Int + in235 :POINT235 + TypeFrGTNETSKT235 :Int + in236 :POINT236 + TypeFrGTNETSKT236 :Int + in237 :POINT237 + TypeFrGTNETSKT237 :Int + in238 :POINT238 + TypeFrGTNETSKT238 :Int + in239 :POINT239 + TypeFrGTNETSKT239 :Int + in240 :POINT240 + TypeFrGTNETSKT240 :Int + in241 :POINT241 + TypeFrGTNETSKT241 :Int + in242 :POINT242 + TypeFrGTNETSKT242 :Int + in243 :POINT243 + TypeFrGTNETSKT243 :Int + in244 :POINT244 + TypeFrGTNETSKT244 :Int + in245 :POINT245 + TypeFrGTNETSKT245 :Int + in246 :POINT246 + TypeFrGTNETSKT246 :Int + in247 :POINT247 + TypeFrGTNETSKT247 :Int + in248 :POINT248 + TypeFrGTNETSKT248 :Int + in249 :POINT249 + TypeFrGTNETSKT249 :Int + in250 :POINT250 + TypeFrGTNETSKT250 :Int + in251 :POINT251 + TypeFrGTNETSKT251 :Int + in252 :POINT252 + TypeFrGTNETSKT252 :Int + in253 :POINT253 + TypeFrGTNETSKT253 :Int + in254 :POINT254 + TypeFrGTNETSKT254 :Int + in255 :POINT255 + TypeFrGTNETSKT255 :Int + in256 :POINT256 + TypeFrGTNETSKT256 :Int + in257 :POINT257 + TypeFrGTNETSKT257 :Int + in258 :POINT258 + TypeFrGTNETSKT258 :Int + in259 :POINT259 + TypeFrGTNETSKT259 :Int + in260 :POINT260 + TypeFrGTNETSKT260 :Int + in261 :POINT261 + TypeFrGTNETSKT261 :Int + in262 :POINT262 + TypeFrGTNETSKT262 :Int + in263 :POINT263 + TypeFrGTNETSKT263 :Int + in264 :POINT264 + TypeFrGTNETSKT264 :Int + in265 :POINT265 + TypeFrGTNETSKT265 :Int + in266 :POINT266 + TypeFrGTNETSKT266 :Int + in267 :POINT267 + TypeFrGTNETSKT267 :Int + in268 :POINT268 + TypeFrGTNETSKT268 :Int + in269 :POINT269 + TypeFrGTNETSKT269 :Int + in270 :POINT270 + TypeFrGTNETSKT270 :Int + in271 :POINT271 + TypeFrGTNETSKT271 :Int + in272 :POINT272 + TypeFrGTNETSKT272 :Int + in273 :POINT273 + TypeFrGTNETSKT273 :Int + in274 :POINT274 + TypeFrGTNETSKT274 :Int + in275 :POINT275 + TypeFrGTNETSKT275 :Int + in276 :POINT276 + TypeFrGTNETSKT276 :Int + in277 :POINT277 + TypeFrGTNETSKT277 :Int + in278 :POINT278 + TypeFrGTNETSKT278 :Int + in279 :POINT279 + TypeFrGTNETSKT279 :Int + in280 :POINT280 + TypeFrGTNETSKT280 :Int + in281 :POINT281 + TypeFrGTNETSKT281 :Int + in282 :POINT282 + TypeFrGTNETSKT282 :Int + in283 :POINT283 + TypeFrGTNETSKT283 :Int + in284 :POINT284 + TypeFrGTNETSKT284 :Int + in285 :POINT285 + TypeFrGTNETSKT285 :Int + in286 :POINT286 + TypeFrGTNETSKT286 :Int + in287 :POINT287 + TypeFrGTNETSKT287 :Int + in288 :POINT288 + TypeFrGTNETSKT288 :Int + in289 :POINT289 + TypeFrGTNETSKT289 :Int + in290 :POINT290 + TypeFrGTNETSKT290 :Int + in291 :POINT291 + TypeFrGTNETSKT291 :Int + in292 :POINT292 + TypeFrGTNETSKT292 :Int + in293 :POINT293 + TypeFrGTNETSKT293 :Int + in294 :POINT294 + TypeFrGTNETSKT294 :Int + in295 :POINT295 + TypeFrGTNETSKT295 :Int + in296 :POINT296 + TypeFrGTNETSKT296 :Int + in297 :POINT297 + TypeFrGTNETSKT297 :Int + in298 :POINT298 + TypeFrGTNETSKT298 :Int + in299 :POINT299 + TypeFrGTNETSKT299 :Int + useVersion :THREE + LocalPort :12000 + RemotePort :12000 + rem_ip_0 :134 + rem_ip_1 :130 + rem_ip_2 :169 + rem_ip_3 :31 +GROUP + 464 176 0 0 0 + 4 +wirelabel + 592 240 0 0 3 + Name :Recv2 + COL :BLUE + Monitor :Yes +wirelabel + 592 304 0 0 3 + Name :ReadyToSend2 + COL :BLUE + Monitor :Yes +wirelabel + 336 208 0 0 3 + Name :Send + COL :BLUE + Monitor :Yes +_rtds_GTNET_SKT.def + 464 80 0 0 1223 + Name :GTNETSKT1 + Mode :UDP + DataDirection :Send/Receive + Port :2 + Card :1 + Proc :1 + Pri :5 + prtyp :2 + gtnettype :GTNETx2 + sfx : + FromFile :NO + note : + ToFile :NO + note1 : + numVarsToGTNETSKT :1 + out0 :dtc + TypeToGTNETSKT0 :Int + out1 :POINT1 + TypeToGTNETSKT1 :Float + out2 :POINT2 + TypeToGTNETSKT2 :Int + out3 :POINT3 + TypeToGTNETSKT3 :Int + out4 :POINT4 + TypeToGTNETSKT4 :Int + out5 :POINT5 + TypeToGTNETSKT5 :Int + out6 :POINT6 + TypeToGTNETSKT6 :Int + out7 :POINT7 + TypeToGTNETSKT7 :Int + out8 :POINT8 + TypeToGTNETSKT8 :Int + out9 :POINT9 + TypeToGTNETSKT9 :Int + out10 :POINT10 + TypeToGTNETSKT10 :Int + out11 :POINT11 + TypeToGTNETSKT11 :Int + out12 :POINT12 + TypeToGTNETSKT12 :Int + out13 :POINT13 + TypeToGTNETSKT13 :Int + out14 :POINT14 + TypeToGTNETSKT14 :Int + out15 :POINT15 + TypeToGTNETSKT15 :Int + out16 :POINT16 + TypeToGTNETSKT16 :Int + out17 :POINT17 + TypeToGTNETSKT17 :Int + out18 :POINT18 + TypeToGTNETSKT18 :Int + out19 :POINT19 + TypeToGTNETSKT19 :Int + out20 :POINT20 + TypeToGTNETSKT20 :Int + out21 :POINT21 + TypeToGTNETSKT21 :Int + out22 :POINT22 + TypeToGTNETSKT22 :Int + out23 :POINT23 + TypeToGTNETSKT23 :Int + out24 :POINT24 + TypeToGTNETSKT24 :Int + out25 :POINT25 + TypeToGTNETSKT25 :Int + out26 :POINT26 + TypeToGTNETSKT26 :Int + out27 :POINT27 + TypeToGTNETSKT27 :Int + out28 :POINT28 + TypeToGTNETSKT28 :Int + out29 :POINT29 + TypeToGTNETSKT29 :Int + out30 :POINT30 + TypeToGTNETSKT30 :Int + out31 :POINT31 + TypeToGTNETSKT31 :Int + out32 :POINT32 + TypeToGTNETSKT32 :Int + out33 :POINT33 + TypeToGTNETSKT33 :Int + out34 :POINT34 + TypeToGTNETSKT34 :Int + out35 :POINT35 + TypeToGTNETSKT35 :Int + out36 :POINT36 + TypeToGTNETSKT36 :Int + out37 :POINT37 + TypeToGTNETSKT37 :Int + out38 :POINT38 + TypeToGTNETSKT38 :Int + out39 :POINT39 + TypeToGTNETSKT39 :Int + out40 :POINT40 + TypeToGTNETSKT40 :Int + out41 :POINT41 + TypeToGTNETSKT41 :Int + out42 :POINT42 + TypeToGTNETSKT42 :Int + out43 :POINT43 + TypeToGTNETSKT43 :Int + out44 :POINT44 + TypeToGTNETSKT44 :Int + out45 :POINT45 + TypeToGTNETSKT45 :Int + out46 :POINT46 + TypeToGTNETSKT46 :Int + out47 :POINT47 + TypeToGTNETSKT47 :Int + out48 :POINT48 + TypeToGTNETSKT48 :Int + out49 :POINT49 + TypeToGTNETSKT49 :Int + out50 :POINT50 + TypeToGTNETSKT50 :Int + out51 :POINT51 + TypeToGTNETSKT51 :Int + out52 :POINT52 + TypeToGTNETSKT52 :Int + out53 :POINT53 + TypeToGTNETSKT53 :Int + out54 :POINT54 + TypeToGTNETSKT54 :Int + out55 :POINT55 + TypeToGTNETSKT55 :Int + out56 :POINT56 + TypeToGTNETSKT56 :Int + out57 :POINT57 + TypeToGTNETSKT57 :Int + out58 :POINT58 + TypeToGTNETSKT58 :Int + out59 :POINT59 + TypeToGTNETSKT59 :Int + out60 :POINT60 + TypeToGTNETSKT60 :Int + out61 :POINT61 + TypeToGTNETSKT61 :Int + out62 :POINT62 + TypeToGTNETSKT62 :Int + out63 :POINT63 + TypeToGTNETSKT63 :Int + out64 :POINT64 + TypeToGTNETSKT64 :Int + out65 :POINT65 + TypeToGTNETSKT65 :Int + out66 :POINT66 + TypeToGTNETSKT66 :Int + out67 :POINT67 + TypeToGTNETSKT67 :Int + out68 :POINT68 + TypeToGTNETSKT68 :Int + out69 :POINT69 + TypeToGTNETSKT69 :Int + out70 :POINT70 + TypeToGTNETSKT70 :Int + out71 :POINT71 + TypeToGTNETSKT71 :Int + out72 :POINT72 + TypeToGTNETSKT72 :Int + out73 :POINT73 + TypeToGTNETSKT73 :Int + out74 :POINT74 + TypeToGTNETSKT74 :Int + out75 :POINT75 + TypeToGTNETSKT75 :Int + out76 :POINT76 + TypeToGTNETSKT76 :Int + out77 :POINT77 + TypeToGTNETSKT77 :Int + out78 :POINT78 + TypeToGTNETSKT78 :Int + out79 :POINT79 + TypeToGTNETSKT79 :Int + out80 :POINT80 + TypeToGTNETSKT80 :Int + out81 :POINT81 + TypeToGTNETSKT81 :Int + out82 :POINT82 + TypeToGTNETSKT82 :Int + out83 :POINT83 + TypeToGTNETSKT83 :Int + out84 :POINT84 + TypeToGTNETSKT84 :Int + out85 :POINT85 + TypeToGTNETSKT85 :Int + out86 :POINT86 + TypeToGTNETSKT86 :Int + out87 :POINT87 + TypeToGTNETSKT87 :Int + out88 :POINT88 + TypeToGTNETSKT88 :Int + out89 :POINT89 + TypeToGTNETSKT89 :Int + out90 :POINT90 + TypeToGTNETSKT90 :Int + out91 :POINT91 + TypeToGTNETSKT91 :Int + out92 :POINT92 + TypeToGTNETSKT92 :Int + out93 :POINT93 + TypeToGTNETSKT93 :Int + out94 :POINT94 + TypeToGTNETSKT94 :Int + out95 :POINT95 + TypeToGTNETSKT95 :Int + out96 :POINT96 + TypeToGTNETSKT96 :Int + out97 :POINT97 + TypeToGTNETSKT97 :Int + out98 :POINT98 + TypeToGTNETSKT98 :Int + out99 :POINT99 + TypeToGTNETSKT99 :Int + out100 :POINT100 + TypeToGTNETSKT100 :Int + out101 :POINT101 + TypeToGTNETSKT101 :Int + out102 :POINT102 + TypeToGTNETSKT102 :Int + out103 :POINT103 + TypeToGTNETSKT103 :Int + out104 :POINT104 + TypeToGTNETSKT104 :Int + out105 :POINT105 + TypeToGTNETSKT105 :Int + out106 :POINT106 + TypeToGTNETSKT106 :Int + out107 :POINT107 + TypeToGTNETSKT107 :Int + out108 :POINT108 + TypeToGTNETSKT108 :Int + out109 :POINT109 + TypeToGTNETSKT109 :Int + out110 :POINT110 + TypeToGTNETSKT110 :Int + out111 :POINT111 + TypeToGTNETSKT111 :Int + out112 :POINT112 + TypeToGTNETSKT112 :Int + out113 :POINT113 + TypeToGTNETSKT113 :Int + out114 :POINT114 + TypeToGTNETSKT114 :Int + out115 :POINT115 + TypeToGTNETSKT115 :Int + out116 :POINT116 + TypeToGTNETSKT116 :Int + out117 :POINT117 + TypeToGTNETSKT117 :Int + out118 :POINT118 + TypeToGTNETSKT118 :Int + out119 :POINT119 + TypeToGTNETSKT119 :Int + out120 :POINT120 + TypeToGTNETSKT120 :Int + out121 :POINT121 + TypeToGTNETSKT121 :Int + out122 :POINT122 + TypeToGTNETSKT122 :Int + out123 :POINT123 + TypeToGTNETSKT123 :Int + out124 :POINT124 + TypeToGTNETSKT124 :Int + out125 :POINT125 + TypeToGTNETSKT125 :Int + out126 :POINT126 + TypeToGTNETSKT126 :Int + out127 :POINT127 + TypeToGTNETSKT127 :Int + out128 :POINT128 + TypeToGTNETSKT128 :Int + out129 :POINT129 + TypeToGTNETSKT129 :Int + out130 :POINT130 + TypeToGTNETSKT130 :Int + out131 :POINT131 + TypeToGTNETSKT131 :Int + out132 :POINT132 + TypeToGTNETSKT132 :Int + out133 :POINT133 + TypeToGTNETSKT133 :Int + out134 :POINT134 + TypeToGTNETSKT134 :Int + out135 :POINT135 + TypeToGTNETSKT135 :Int + out136 :POINT136 + TypeToGTNETSKT136 :Int + out137 :POINT137 + TypeToGTNETSKT137 :Int + out138 :POINT138 + TypeToGTNETSKT138 :Int + out139 :POINT139 + TypeToGTNETSKT139 :Int + out140 :POINT140 + TypeToGTNETSKT140 :Int + out141 :POINT141 + TypeToGTNETSKT141 :Int + out142 :POINT142 + TypeToGTNETSKT142 :Int + out143 :POINT143 + TypeToGTNETSKT143 :Int + out144 :POINT144 + TypeToGTNETSKT144 :Int + out145 :POINT145 + TypeToGTNETSKT145 :Int + out146 :POINT146 + TypeToGTNETSKT146 :Int + out147 :POINT147 + TypeToGTNETSKT147 :Int + out148 :POINT148 + TypeToGTNETSKT148 :Int + out149 :POINT149 + TypeToGTNETSKT149 :Int + out150 :POINT150 + TypeToGTNETSKT150 :Int + out151 :POINT151 + TypeToGTNETSKT151 :Int + out152 :POINT152 + TypeToGTNETSKT152 :Int + out153 :POINT153 + TypeToGTNETSKT153 :Int + out154 :POINT154 + TypeToGTNETSKT154 :Int + out155 :POINT155 + TypeToGTNETSKT155 :Int + out156 :POINT156 + TypeToGTNETSKT156 :Int + out157 :POINT157 + TypeToGTNETSKT157 :Int + out158 :POINT158 + TypeToGTNETSKT158 :Int + out159 :POINT159 + TypeToGTNETSKT159 :Int + out160 :POINT160 + TypeToGTNETSKT160 :Int + out161 :POINT161 + TypeToGTNETSKT161 :Int + out162 :POINT162 + TypeToGTNETSKT162 :Int + out163 :POINT163 + TypeToGTNETSKT163 :Int + out164 :POINT164 + TypeToGTNETSKT164 :Int + out165 :POINT165 + TypeToGTNETSKT165 :Int + out166 :POINT166 + TypeToGTNETSKT166 :Int + out167 :POINT167 + TypeToGTNETSKT167 :Int + out168 :POINT168 + TypeToGTNETSKT168 :Int + out169 :POINT169 + TypeToGTNETSKT169 :Int + out170 :POINT170 + TypeToGTNETSKT170 :Int + out171 :POINT171 + TypeToGTNETSKT171 :Int + out172 :POINT172 + TypeToGTNETSKT172 :Int + out173 :POINT173 + TypeToGTNETSKT173 :Int + out174 :POINT174 + TypeToGTNETSKT174 :Int + out175 :POINT175 + TypeToGTNETSKT175 :Int + out176 :POINT176 + TypeToGTNETSKT176 :Int + out177 :POINT177 + TypeToGTNETSKT177 :Int + out178 :POINT178 + TypeToGTNETSKT178 :Int + out179 :POINT179 + TypeToGTNETSKT179 :Int + out180 :POINT180 + TypeToGTNETSKT180 :Int + out181 :POINT181 + TypeToGTNETSKT181 :Int + out182 :POINT182 + TypeToGTNETSKT182 :Int + out183 :POINT183 + TypeToGTNETSKT183 :Int + out184 :POINT184 + TypeToGTNETSKT184 :Int + out185 :POINT185 + TypeToGTNETSKT185 :Int + out186 :POINT186 + TypeToGTNETSKT186 :Int + out187 :POINT187 + TypeToGTNETSKT187 :Int + out188 :POINT188 + TypeToGTNETSKT188 :Int + out189 :POINT189 + TypeToGTNETSKT189 :Int + out190 :POINT190 + TypeToGTNETSKT190 :Int + out191 :POINT191 + TypeToGTNETSKT191 :Int + out192 :POINT192 + TypeToGTNETSKT192 :Int + out193 :POINT193 + TypeToGTNETSKT193 :Int + out194 :POINT194 + TypeToGTNETSKT194 :Int + out195 :POINT195 + TypeToGTNETSKT195 :Int + out196 :POINT196 + TypeToGTNETSKT196 :Int + out197 :POINT197 + TypeToGTNETSKT197 :Int + out198 :POINT198 + TypeToGTNETSKT198 :Int + out199 :POINT199 + TypeToGTNETSKT199 :Int + out200 :POINT200 + TypeToGTNETSKT200 :Int + out201 :POINT201 + TypeToGTNETSKT201 :Int + out202 :POINT202 + TypeToGTNETSKT202 :Int + out203 :POINT203 + TypeToGTNETSKT203 :Int + out204 :POINT204 + TypeToGTNETSKT204 :Int + out205 :POINT205 + TypeToGTNETSKT205 :Int + out206 :POINT206 + TypeToGTNETSKT206 :Int + out207 :POINT207 + TypeToGTNETSKT207 :Int + out208 :POINT208 + TypeToGTNETSKT208 :Int + out209 :POINT209 + TypeToGTNETSKT209 :Int + out210 :POINT210 + TypeToGTNETSKT210 :Int + out211 :POINT211 + TypeToGTNETSKT211 :Int + out212 :POINT212 + TypeToGTNETSKT212 :Int + out213 :POINT213 + TypeToGTNETSKT213 :Int + out214 :POINT214 + TypeToGTNETSKT214 :Int + out215 :POINT215 + TypeToGTNETSKT215 :Int + out216 :POINT216 + TypeToGTNETSKT216 :Int + out217 :POINT217 + TypeToGTNETSKT217 :Int + out218 :POINT218 + TypeToGTNETSKT218 :Int + out219 :POINT219 + TypeToGTNETSKT219 :Int + out220 :POINT220 + TypeToGTNETSKT220 :Int + out221 :POINT221 + TypeToGTNETSKT221 :Int + out222 :POINT222 + TypeToGTNETSKT222 :Int + out223 :POINT223 + TypeToGTNETSKT223 :Int + out224 :POINT224 + TypeToGTNETSKT224 :Int + out225 :POINT225 + TypeToGTNETSKT225 :Int + out226 :POINT226 + TypeToGTNETSKT226 :Int + out227 :POINT227 + TypeToGTNETSKT227 :Int + out228 :POINT228 + TypeToGTNETSKT228 :Int + out229 :POINT229 + TypeToGTNETSKT229 :Int + out230 :POINT230 + TypeToGTNETSKT230 :Int + out231 :POINT231 + TypeToGTNETSKT231 :Int + out232 :POINT232 + TypeToGTNETSKT232 :Int + out233 :POINT233 + TypeToGTNETSKT233 :Int + out234 :POINT234 + TypeToGTNETSKT234 :Int + out235 :POINT235 + TypeToGTNETSKT235 :Int + out236 :POINT236 + TypeToGTNETSKT236 :Int + out237 :POINT237 + TypeToGTNETSKT237 :Int + out238 :POINT238 + TypeToGTNETSKT238 :Int + out239 :POINT239 + TypeToGTNETSKT239 :Int + out240 :POINT240 + TypeToGTNETSKT240 :Int + out241 :POINT241 + TypeToGTNETSKT241 :Int + out242 :POINT242 + TypeToGTNETSKT242 :Int + out243 :POINT243 + TypeToGTNETSKT243 :Int + out244 :POINT244 + TypeToGTNETSKT244 :Int + out245 :POINT245 + TypeToGTNETSKT245 :Int + out246 :POINT246 + TypeToGTNETSKT246 :Int + out247 :POINT247 + TypeToGTNETSKT247 :Int + out248 :POINT248 + TypeToGTNETSKT248 :Int + out249 :POINT249 + TypeToGTNETSKT249 :Int + out250 :POINT250 + TypeToGTNETSKT250 :Int + out251 :POINT251 + TypeToGTNETSKT251 :Int + out252 :POINT252 + TypeToGTNETSKT252 :Int + out253 :POINT253 + TypeToGTNETSKT253 :Int + out254 :POINT254 + TypeToGTNETSKT254 :Int + out255 :POINT255 + TypeToGTNETSKT255 :Int + out256 :POINT256 + TypeToGTNETSKT256 :Int + out257 :POINT257 + TypeToGTNETSKT257 :Int + out258 :POINT258 + TypeToGTNETSKT258 :Int + out259 :POINT259 + TypeToGTNETSKT259 :Int + out260 :POINT260 + TypeToGTNETSKT260 :Int + out261 :POINT261 + TypeToGTNETSKT261 :Int + out262 :POINT262 + TypeToGTNETSKT262 :Int + out263 :POINT263 + TypeToGTNETSKT263 :Int + out264 :POINT264 + TypeToGTNETSKT264 :Int + out265 :POINT265 + TypeToGTNETSKT265 :Int + out266 :POINT266 + TypeToGTNETSKT266 :Int + out267 :POINT267 + TypeToGTNETSKT267 :Int + out268 :POINT268 + TypeToGTNETSKT268 :Int + out269 :POINT269 + TypeToGTNETSKT269 :Int + out270 :POINT270 + TypeToGTNETSKT270 :Int + out271 :POINT271 + TypeToGTNETSKT271 :Int + out272 :POINT272 + TypeToGTNETSKT272 :Int + out273 :POINT273 + TypeToGTNETSKT273 :Int + out274 :POINT274 + TypeToGTNETSKT274 :Int + out275 :POINT275 + TypeToGTNETSKT275 :Int + out276 :POINT276 + TypeToGTNETSKT276 :Int + out277 :POINT277 + TypeToGTNETSKT277 :Int + out278 :POINT278 + TypeToGTNETSKT278 :Int + out279 :POINT279 + TypeToGTNETSKT279 :Int + out280 :POINT280 + TypeToGTNETSKT280 :Int + out281 :POINT281 + TypeToGTNETSKT281 :Int + out282 :POINT282 + TypeToGTNETSKT282 :Int + out283 :POINT283 + TypeToGTNETSKT283 :Int + out284 :POINT284 + TypeToGTNETSKT284 :Int + out285 :POINT285 + TypeToGTNETSKT285 :Int + out286 :POINT286 + TypeToGTNETSKT286 :Int + out287 :POINT287 + TypeToGTNETSKT287 :Int + out288 :POINT288 + TypeToGTNETSKT288 :Int + out289 :POINT289 + TypeToGTNETSKT289 :Int + out290 :POINT290 + TypeToGTNETSKT290 :Int + out291 :POINT291 + TypeToGTNETSKT291 :Int + out292 :POINT292 + TypeToGTNETSKT292 :Int + out293 :POINT293 + TypeToGTNETSKT293 :Int + out294 :POINT294 + TypeToGTNETSKT294 :Int + out295 :POINT295 + TypeToGTNETSKT295 :Int + out296 :POINT296 + TypeToGTNETSKT296 :Int + out297 :POINT297 + TypeToGTNETSKT297 :Int + out298 :POINT298 + TypeToGTNETSKT298 :Int + out299 :POINT299 + TypeToGTNETSKT299 :Int + numVarsFromGTNETSKT :1 + in0 :cntr2 + TypeFrGTNETSKT0 :Int + in1 :POINTin1 + TypeFrGTNETSKT1 :Float + in2 :POINT2 + TypeFrGTNETSKT2 :Int + in3 :POINT3 + TypeFrGTNETSKT3 :Int + in4 :POINT4 + TypeFrGTNETSKT4 :Int + in5 :POINT5 + TypeFrGTNETSKT5 :Int + in6 :POINT6 + TypeFrGTNETSKT6 :Int + in7 :POINT7 + TypeFrGTNETSKT7 :Int + in8 :POINT8 + TypeFrGTNETSKT8 :Int + in9 :POINT9 + TypeFrGTNETSKT9 :Int + in10 :POINT10 + TypeFrGTNETSKT10 :Int + in11 :POINT11 + TypeFrGTNETSKT11 :Int + in12 :POINT12 + TypeFrGTNETSKT12 :Int + in13 :POINT13 + TypeFrGTNETSKT13 :Int + in14 :POINT14 + TypeFrGTNETSKT14 :Int + in15 :POINT15 + TypeFrGTNETSKT15 :Int + in16 :POINT16 + TypeFrGTNETSKT16 :Int + in17 :POINT17 + TypeFrGTNETSKT17 :Int + in18 :POINT18 + TypeFrGTNETSKT18 :Int + in19 :POINT19 + TypeFrGTNETSKT19 :Int + in20 :POINT20 + TypeFrGTNETSKT20 :Int + in21 :POINT21 + TypeFrGTNETSKT21 :Int + in22 :POINT22 + TypeFrGTNETSKT22 :Int + in23 :POINT23 + TypeFrGTNETSKT23 :Int + in24 :POINT24 + TypeFrGTNETSKT24 :Int + in25 :POINT25 + TypeFrGTNETSKT25 :Int + in26 :POINT26 + TypeFrGTNETSKT26 :Int + in27 :POINT27 + TypeFrGTNETSKT27 :Int + in28 :POINT28 + TypeFrGTNETSKT28 :Int + in29 :POINT29 + TypeFrGTNETSKT29 :Int + in30 :POINT30 + TypeFrGTNETSKT30 :Int + in31 :POINT31 + TypeFrGTNETSKT31 :Int + in32 :POINT32 + TypeFrGTNETSKT32 :Int + in33 :POINT33 + TypeFrGTNETSKT33 :Int + in34 :POINT34 + TypeFrGTNETSKT34 :Int + in35 :POINT35 + TypeFrGTNETSKT35 :Int + in36 :POINT36 + TypeFrGTNETSKT36 :Int + in37 :POINT37 + TypeFrGTNETSKT37 :Int + in38 :POINT38 + TypeFrGTNETSKT38 :Int + in39 :POINT39 + TypeFrGTNETSKT39 :Int + in40 :POINT40 + TypeFrGTNETSKT40 :Int + in41 :POINT41 + TypeFrGTNETSKT41 :Int + in42 :POINT42 + TypeFrGTNETSKT42 :Int + in43 :POINT43 + TypeFrGTNETSKT43 :Int + in44 :POINT44 + TypeFrGTNETSKT44 :Int + in45 :POINT45 + TypeFrGTNETSKT45 :Int + in46 :POINT46 + TypeFrGTNETSKT46 :Int + in47 :POINT47 + TypeFrGTNETSKT47 :Int + in48 :POINT48 + TypeFrGTNETSKT48 :Int + in49 :POINT49 + TypeFrGTNETSKT49 :Int + in50 :POINT50 + TypeFrGTNETSKT50 :Int + in51 :POINT51 + TypeFrGTNETSKT51 :Int + in52 :POINT52 + TypeFrGTNETSKT52 :Int + in53 :POINT53 + TypeFrGTNETSKT53 :Int + in54 :POINT54 + TypeFrGTNETSKT54 :Int + in55 :POINT55 + TypeFrGTNETSKT55 :Int + in56 :POINT56 + TypeFrGTNETSKT56 :Int + in57 :POINT57 + TypeFrGTNETSKT57 :Int + in58 :POINT58 + TypeFrGTNETSKT58 :Int + in59 :POINT59 + TypeFrGTNETSKT59 :Int + in60 :POINT60 + TypeFrGTNETSKT60 :Int + in61 :POINT61 + TypeFrGTNETSKT61 :Int + in62 :POINT62 + TypeFrGTNETSKT62 :Int + in63 :POINT63 + TypeFrGTNETSKT63 :Int + in64 :POINT64 + TypeFrGTNETSKT64 :Int + in65 :POINT65 + TypeFrGTNETSKT65 :Int + in66 :POINT66 + TypeFrGTNETSKT66 :Int + in67 :POINT67 + TypeFrGTNETSKT67 :Int + in68 :POINT68 + TypeFrGTNETSKT68 :Int + in69 :POINT69 + TypeFrGTNETSKT69 :Int + in70 :POINT70 + TypeFrGTNETSKT70 :Int + in71 :POINT71 + TypeFrGTNETSKT71 :Int + in72 :POINT72 + TypeFrGTNETSKT72 :Int + in73 :POINT73 + TypeFrGTNETSKT73 :Int + in74 :POINT74 + TypeFrGTNETSKT74 :Int + in75 :POINT75 + TypeFrGTNETSKT75 :Int + in76 :POINT76 + TypeFrGTNETSKT76 :Int + in77 :POINT77 + TypeFrGTNETSKT77 :Int + in78 :POINT78 + TypeFrGTNETSKT78 :Int + in79 :POINT79 + TypeFrGTNETSKT79 :Int + in80 :POINT80 + TypeFrGTNETSKT80 :Int + in81 :POINT81 + TypeFrGTNETSKT81 :Int + in82 :POINT82 + TypeFrGTNETSKT82 :Int + in83 :POINT83 + TypeFrGTNETSKT83 :Int + in84 :POINT84 + TypeFrGTNETSKT84 :Int + in85 :POINT85 + TypeFrGTNETSKT85 :Int + in86 :POINT86 + TypeFrGTNETSKT86 :Int + in87 :POINT87 + TypeFrGTNETSKT87 :Int + in88 :POINT88 + TypeFrGTNETSKT88 :Int + in89 :POINT89 + TypeFrGTNETSKT89 :Int + in90 :POINT90 + TypeFrGTNETSKT90 :Int + in91 :POINT91 + TypeFrGTNETSKT91 :Int + in92 :POINT92 + TypeFrGTNETSKT92 :Int + in93 :POINT93 + TypeFrGTNETSKT93 :Int + in94 :POINT94 + TypeFrGTNETSKT94 :Int + in95 :POINT95 + TypeFrGTNETSKT95 :Int + in96 :POINT96 + TypeFrGTNETSKT96 :Int + in97 :POINT97 + TypeFrGTNETSKT97 :Int + in98 :POINT98 + TypeFrGTNETSKT98 :Int + in99 :POINT99 + TypeFrGTNETSKT99 :Int + in100 :POINT100 + TypeFrGTNETSKT100 :Int + in101 :POINT101 + TypeFrGTNETSKT101 :Int + in102 :POINT102 + TypeFrGTNETSKT102 :Int + in103 :POINT103 + TypeFrGTNETSKT103 :Int + in104 :POINT104 + TypeFrGTNETSKT104 :Int + in105 :POINT105 + TypeFrGTNETSKT105 :Int + in106 :POINT106 + TypeFrGTNETSKT106 :Int + in107 :POINT107 + TypeFrGTNETSKT107 :Int + in108 :POINT108 + TypeFrGTNETSKT108 :Int + in109 :POINT109 + TypeFrGTNETSKT109 :Int + in110 :POINT110 + TypeFrGTNETSKT110 :Int + in111 :POINT111 + TypeFrGTNETSKT111 :Int + in112 :POINT112 + TypeFrGTNETSKT112 :Int + in113 :POINT113 + TypeFrGTNETSKT113 :Int + in114 :POINT114 + TypeFrGTNETSKT114 :Int + in115 :POINT115 + TypeFrGTNETSKT115 :Int + in116 :POINT116 + TypeFrGTNETSKT116 :Int + in117 :POINT117 + TypeFrGTNETSKT117 :Int + in118 :POINT118 + TypeFrGTNETSKT118 :Int + in119 :POINT119 + TypeFrGTNETSKT119 :Int + in120 :POINT120 + TypeFrGTNETSKT120 :Int + in121 :POINT121 + TypeFrGTNETSKT121 :Int + in122 :POINT122 + TypeFrGTNETSKT122 :Int + in123 :POINT123 + TypeFrGTNETSKT123 :Int + in124 :POINT124 + TypeFrGTNETSKT124 :Int + in125 :POINT125 + TypeFrGTNETSKT125 :Int + in126 :POINT126 + TypeFrGTNETSKT126 :Int + in127 :POINT127 + TypeFrGTNETSKT127 :Int + in128 :POINT128 + TypeFrGTNETSKT128 :Int + in129 :POINT129 + TypeFrGTNETSKT129 :Int + in130 :POINT130 + TypeFrGTNETSKT130 :Int + in131 :POINT131 + TypeFrGTNETSKT131 :Int + in132 :POINT132 + TypeFrGTNETSKT132 :Int + in133 :POINT133 + TypeFrGTNETSKT133 :Int + in134 :POINT134 + TypeFrGTNETSKT134 :Int + in135 :POINT135 + TypeFrGTNETSKT135 :Int + in136 :POINT136 + TypeFrGTNETSKT136 :Int + in137 :POINT137 + TypeFrGTNETSKT137 :Int + in138 :POINT138 + TypeFrGTNETSKT138 :Int + in139 :POINT139 + TypeFrGTNETSKT139 :Int + in140 :POINT140 + TypeFrGTNETSKT140 :Int + in141 :POINT141 + TypeFrGTNETSKT141 :Int + in142 :POINT142 + TypeFrGTNETSKT142 :Int + in143 :POINT143 + TypeFrGTNETSKT143 :Int + in144 :POINT144 + TypeFrGTNETSKT144 :Int + in145 :POINT145 + TypeFrGTNETSKT145 :Int + in146 :POINT146 + TypeFrGTNETSKT146 :Int + in147 :POINT147 + TypeFrGTNETSKT147 :Int + in148 :POINT148 + TypeFrGTNETSKT148 :Int + in149 :POINT149 + TypeFrGTNETSKT149 :Int + in150 :POINT150 + TypeFrGTNETSKT150 :Int + in151 :POINT151 + TypeFrGTNETSKT151 :Int + in152 :POINT152 + TypeFrGTNETSKT152 :Int + in153 :POINT153 + TypeFrGTNETSKT153 :Int + in154 :POINT154 + TypeFrGTNETSKT154 :Int + in155 :POINT155 + TypeFrGTNETSKT155 :Int + in156 :POINT156 + TypeFrGTNETSKT156 :Int + in157 :POINT157 + TypeFrGTNETSKT157 :Int + in158 :POINT158 + TypeFrGTNETSKT158 :Int + in159 :POINT159 + TypeFrGTNETSKT159 :Int + in160 :POINT160 + TypeFrGTNETSKT160 :Int + in161 :POINT161 + TypeFrGTNETSKT161 :Int + in162 :POINT162 + TypeFrGTNETSKT162 :Int + in163 :POINT163 + TypeFrGTNETSKT163 :Int + in164 :POINT164 + TypeFrGTNETSKT164 :Int + in165 :POINT165 + TypeFrGTNETSKT165 :Int + in166 :POINT166 + TypeFrGTNETSKT166 :Int + in167 :POINT167 + TypeFrGTNETSKT167 :Int + in168 :POINT168 + TypeFrGTNETSKT168 :Int + in169 :POINT169 + TypeFrGTNETSKT169 :Int + in170 :POINT170 + TypeFrGTNETSKT170 :Int + in171 :POINT171 + TypeFrGTNETSKT171 :Int + in172 :POINT172 + TypeFrGTNETSKT172 :Int + in173 :POINT173 + TypeFrGTNETSKT173 :Int + in174 :POINT174 + TypeFrGTNETSKT174 :Int + in175 :POINT175 + TypeFrGTNETSKT175 :Int + in176 :POINT176 + TypeFrGTNETSKT176 :Int + in177 :POINT177 + TypeFrGTNETSKT177 :Int + in178 :POINT178 + TypeFrGTNETSKT178 :Int + in179 :POINT179 + TypeFrGTNETSKT179 :Int + in180 :POINT180 + TypeFrGTNETSKT180 :Int + in181 :POINT181 + TypeFrGTNETSKT181 :Int + in182 :POINT182 + TypeFrGTNETSKT182 :Int + in183 :POINT183 + TypeFrGTNETSKT183 :Int + in184 :POINT184 + TypeFrGTNETSKT184 :Int + in185 :POINT185 + TypeFrGTNETSKT185 :Int + in186 :POINT186 + TypeFrGTNETSKT186 :Int + in187 :POINT187 + TypeFrGTNETSKT187 :Int + in188 :POINT188 + TypeFrGTNETSKT188 :Int + in189 :POINT189 + TypeFrGTNETSKT189 :Int + in190 :POINT190 + TypeFrGTNETSKT190 :Int + in191 :POINT191 + TypeFrGTNETSKT191 :Int + in192 :POINT192 + TypeFrGTNETSKT192 :Int + in193 :POINT193 + TypeFrGTNETSKT193 :Int + in194 :POINT194 + TypeFrGTNETSKT194 :Int + in195 :POINT195 + TypeFrGTNETSKT195 :Int + in196 :POINT196 + TypeFrGTNETSKT196 :Int + in197 :POINT197 + TypeFrGTNETSKT197 :Int + in198 :POINT198 + TypeFrGTNETSKT198 :Int + in199 :POINT199 + TypeFrGTNETSKT199 :Int + in200 :POINT200 + TypeFrGTNETSKT200 :Int + in201 :POINT201 + TypeFrGTNETSKT201 :Int + in202 :POINT202 + TypeFrGTNETSKT202 :Int + in203 :POINT203 + TypeFrGTNETSKT203 :Int + in204 :POINT204 + TypeFrGTNETSKT204 :Int + in205 :POINT205 + TypeFrGTNETSKT205 :Int + in206 :POINT206 + TypeFrGTNETSKT206 :Int + in207 :POINT207 + TypeFrGTNETSKT207 :Int + in208 :POINT208 + TypeFrGTNETSKT208 :Int + in209 :POINT209 + TypeFrGTNETSKT209 :Int + in210 :POINT210 + TypeFrGTNETSKT210 :Int + in211 :POINT211 + TypeFrGTNETSKT211 :Int + in212 :POINT212 + TypeFrGTNETSKT212 :Int + in213 :POINT213 + TypeFrGTNETSKT213 :Int + in214 :POINT214 + TypeFrGTNETSKT214 :Int + in215 :POINT215 + TypeFrGTNETSKT215 :Int + in216 :POINT216 + TypeFrGTNETSKT216 :Int + in217 :POINT217 + TypeFrGTNETSKT217 :Int + in218 :POINT218 + TypeFrGTNETSKT218 :Int + in219 :POINT219 + TypeFrGTNETSKT219 :Int + in220 :POINT220 + TypeFrGTNETSKT220 :Int + in221 :POINT221 + TypeFrGTNETSKT221 :Int + in222 :POINT222 + TypeFrGTNETSKT222 :Int + in223 :POINT223 + TypeFrGTNETSKT223 :Int + in224 :POINT224 + TypeFrGTNETSKT224 :Int + in225 :POINT225 + TypeFrGTNETSKT225 :Int + in226 :POINT226 + TypeFrGTNETSKT226 :Int + in227 :POINT227 + TypeFrGTNETSKT227 :Int + in228 :POINT228 + TypeFrGTNETSKT228 :Int + in229 :POINT229 + TypeFrGTNETSKT229 :Int + in230 :POINT230 + TypeFrGTNETSKT230 :Int + in231 :POINT231 + TypeFrGTNETSKT231 :Int + in232 :POINT232 + TypeFrGTNETSKT232 :Int + in233 :POINT233 + TypeFrGTNETSKT233 :Int + in234 :POINT234 + TypeFrGTNETSKT234 :Int + in235 :POINT235 + TypeFrGTNETSKT235 :Int + in236 :POINT236 + TypeFrGTNETSKT236 :Int + in237 :POINT237 + TypeFrGTNETSKT237 :Int + in238 :POINT238 + TypeFrGTNETSKT238 :Int + in239 :POINT239 + TypeFrGTNETSKT239 :Int + in240 :POINT240 + TypeFrGTNETSKT240 :Int + in241 :POINT241 + TypeFrGTNETSKT241 :Int + in242 :POINT242 + TypeFrGTNETSKT242 :Int + in243 :POINT243 + TypeFrGTNETSKT243 :Int + in244 :POINT244 + TypeFrGTNETSKT244 :Int + in245 :POINT245 + TypeFrGTNETSKT245 :Int + in246 :POINT246 + TypeFrGTNETSKT246 :Int + in247 :POINT247 + TypeFrGTNETSKT247 :Int + in248 :POINT248 + TypeFrGTNETSKT248 :Int + in249 :POINT249 + TypeFrGTNETSKT249 :Int + in250 :POINT250 + TypeFrGTNETSKT250 :Int + in251 :POINT251 + TypeFrGTNETSKT251 :Int + in252 :POINT252 + TypeFrGTNETSKT252 :Int + in253 :POINT253 + TypeFrGTNETSKT253 :Int + in254 :POINT254 + TypeFrGTNETSKT254 :Int + in255 :POINT255 + TypeFrGTNETSKT255 :Int + in256 :POINT256 + TypeFrGTNETSKT256 :Int + in257 :POINT257 + TypeFrGTNETSKT257 :Int + in258 :POINT258 + TypeFrGTNETSKT258 :Int + in259 :POINT259 + TypeFrGTNETSKT259 :Int + in260 :POINT260 + TypeFrGTNETSKT260 :Int + in261 :POINT261 + TypeFrGTNETSKT261 :Int + in262 :POINT262 + TypeFrGTNETSKT262 :Int + in263 :POINT263 + TypeFrGTNETSKT263 :Int + in264 :POINT264 + TypeFrGTNETSKT264 :Int + in265 :POINT265 + TypeFrGTNETSKT265 :Int + in266 :POINT266 + TypeFrGTNETSKT266 :Int + in267 :POINT267 + TypeFrGTNETSKT267 :Int + in268 :POINT268 + TypeFrGTNETSKT268 :Int + in269 :POINT269 + TypeFrGTNETSKT269 :Int + in270 :POINT270 + TypeFrGTNETSKT270 :Int + in271 :POINT271 + TypeFrGTNETSKT271 :Int + in272 :POINT272 + TypeFrGTNETSKT272 :Int + in273 :POINT273 + TypeFrGTNETSKT273 :Int + in274 :POINT274 + TypeFrGTNETSKT274 :Int + in275 :POINT275 + TypeFrGTNETSKT275 :Int + in276 :POINT276 + TypeFrGTNETSKT276 :Int + in277 :POINT277 + TypeFrGTNETSKT277 :Int + in278 :POINT278 + TypeFrGTNETSKT278 :Int + in279 :POINT279 + TypeFrGTNETSKT279 :Int + in280 :POINT280 + TypeFrGTNETSKT280 :Int + in281 :POINT281 + TypeFrGTNETSKT281 :Int + in282 :POINT282 + TypeFrGTNETSKT282 :Int + in283 :POINT283 + TypeFrGTNETSKT283 :Int + in284 :POINT284 + TypeFrGTNETSKT284 :Int + in285 :POINT285 + TypeFrGTNETSKT285 :Int + in286 :POINT286 + TypeFrGTNETSKT286 :Int + in287 :POINT287 + TypeFrGTNETSKT287 :Int + in288 :POINT288 + TypeFrGTNETSKT288 :Int + in289 :POINT289 + TypeFrGTNETSKT289 :Int + in290 :POINT290 + TypeFrGTNETSKT290 :Int + in291 :POINT291 + TypeFrGTNETSKT291 :Int + in292 :POINT292 + TypeFrGTNETSKT292 :Int + in293 :POINT293 + TypeFrGTNETSKT293 :Int + in294 :POINT294 + TypeFrGTNETSKT294 :Int + in295 :POINT295 + TypeFrGTNETSKT295 :Int + in296 :POINT296 + TypeFrGTNETSKT296 :Int + in297 :POINT297 + TypeFrGTNETSKT297 :Int + in298 :POINT298 + TypeFrGTNETSKT298 :Int + in299 :POINT299 + TypeFrGTNETSKT299 :Int + useVersion :THREE + LocalPort :12001 + RemotePort :12001 + rem_ip_0 :134 + rem_ip_1 :130 + rem_ip_2 :169 + rem_ip_3 :31 +GROUP + 112 400 0 0 0 + 7 +wirelabel + 80 400 0 0 3 + Name :Recv1 + COL :BLUE + Monitor :Yes +WIRE + 112 400 0 0 2 + -32 -4 0 4 + COL :RED + LW :1.0 +wirelabel + 208 400 0 0 3 + Name :rxCnt1 + COL :BLUE + Monitor :Yes +WIRE + 176 400 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +WIRE + 80 432 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_ICONST + 48 432 0 0 1 + Val :0 +rtds_sharc_ctl_UPDOWN + 144 400 0 0 9 + Tran :Rising + RST :No + LIM :No + UL :10 + LL :-10 + INIT :0 + prtyp :2 + Proc :1 + Pri :10 +GROUP + 112 464 0 0 0 + 7 +wirelabel + 80 464 0 0 3 + Name :ReadyToSend1 + COL :BLUE + Monitor :Yes +wirelabel + 208 464 0 0 3 + Name :txCnt1 + COL :BLUE + Monitor :Yes +WIRE + 176 464 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +WIRE + 80 496 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_ICONST + 48 496 0 0 1 + Val :0 +WIRE + 80 464 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_UPDOWN + 144 464 0 0 9 + Tran :Rising + RST :No + LIM :No + UL :10 + LL :-10 + INIT :0 + prtyp :2 + Proc :1 + Pri :9 +GROUP + 112 528 0 0 0 + 6 +wirelabel + 176 560 0 0 3 + Name :rtt1 + COL :BLUE + Monitor :Yes +WIRE + 176 560 0 0 2 + -32 -4 0 4 + COL :RED + LW :1.0 +wirelabel + 80 560 0 0 3 + Name :cntr1 + COL :BLUE + Monitor :Yes +WIRE + 112 560 0 0 2 + -32 -4 0 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_SUM3 + 112 560 2 1 9 + Num :TWO + IorF :INTEGER + IN1 :+ + IN2 :- + IN3 :- + prtyp :2 + Proc :1 + Pri :13 + cmv :1 +wirelabel + 112 528 0 0 3 + Name :dtc + COL :BLUE + Monitor :Yes +GROUP + 432 464 0 0 0 + 3 +GROUP + 432 528 0 0 0 + 6 +wirelabel + 496 560 0 0 3 + Name :rtt2 + COL :BLUE + Monitor :Yes +WIRE + 496 560 0 0 2 + -32 -4 0 4 + COL :RED + LW :1.0 +wirelabel + 400 560 0 0 3 + Name :cntr2 + COL :BLUE + Monitor :Yes +WIRE + 432 560 0 0 2 + -32 -4 0 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_SUM3 + 432 560 2 1 9 + Num :TWO + IorF :INTEGER + IN1 :+ + IN2 :- + IN3 :- + prtyp :2 + Proc :1 + Pri :12 + cmv :1 +wirelabel + 432 528 0 0 3 + Name :dtc + COL :BLUE + Monitor :Yes +GROUP + 432 400 0 0 0 + 7 +wirelabel + 400 400 0 0 3 + Name :Recv2 + COL :BLUE + Monitor :Yes +WIRE + 400 400 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +wirelabel + 528 400 0 0 3 + Name :rxCnt2 + COL :BLUE + Monitor :Yes +WIRE + 496 400 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +WIRE + 400 432 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_ICONST + 368 432 0 0 1 + Val :0 +rtds_sharc_ctl_UPDOWN + 464 400 0 0 9 + Tran :Rising + RST :No + LIM :No + UL :10 + LL :-10 + INIT :0 + prtyp :2 + Proc :1 + Pri :8 +GROUP + 432 464 0 0 0 + 7 +wirelabel + 400 464 0 0 3 + Name :ReadyToSend2 + COL :BLUE + Monitor :Yes +wirelabel + 528 464 0 0 3 + Name :txCnt2 + COL :BLUE + Monitor :Yes +WIRE + 496 464 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +WIRE + 400 496 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_ICONST + 368 496 0 0 1 + Val :0 +WIRE + 400 464 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_UPDOWN + 464 464 0 0 9 + Tran :Rising + RST :No + LIM :No + UL :10 + LL :-10 + INIT :0 + prtyp :2 + Proc :1 + Pri :7 +DASHED_LINE + 304 304 1 0 2 + -4 -288 4 320 + LW :1.0 + COL :RED +rtds_risc_ctl_PROCASN + 720 80 0 0 3 + CPRO :1 + BRD :2 + ABC :A +GROUP + 848 176 0 0 0 + 3 +WIRE + 912 176 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +wirelabel + 944 176 0 0 3 + Name :Send + COL :BLUE + Monitor :Yes +GROUP + 784 176 0 0 0 + 6 +rtds_sharc_ctl_IEEE2INT + 816 176 0 0 6 + prtyp :2 + Op :Round + Proc :1 + Pri :3 + Op2 :Round + cmv :1 +rtds_sharc_ctl_EDGEDET + 880 176 0 0 6 + ED :0 -> 1 + OV :1 + prtyp :2 + Proc :1 + Pri :4 + cmv :1 +rtds_sharc_ctl_CONSTANT + 688 208 0 0 1 + Val :0.0 +rtds_sharc_ctl_CONSTANT + 688 176 0 0 1 + Val :2000 +rtds_sharc_ctl_CONSTANT + 688 144 0 0 1 + Val :1.0 +rtds_sharc_ctl_SRCABSPH + 752 176 0 0 6 + WType :Square + Units :volts + Duty :50 + prtyp :2 + Proc :1 + Pri :2 +GROUP + 720 304 0 0 0 + 7 +wirelabel + 784 336 0 0 3 + Name :dtc + COL :BLUE + Monitor :Yes +WIRE + 784 336 1 0 2 + -4 -32 4 0 + COL :RED + LW :1.0 +WIRE + 752 336 1 0 2 + -4 -32 4 0 + COL :RED + LW :1.0 +WIRE + 784 336 0 0 2 + -32 -4 0 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_ICONST + 688 272 0 0 1 + Val :1 +WIRE + 720 272 0 0 2 + 0 -4 32 4 + COL :RED + LW :1.0 +rtds_sharc_ctl_SUM3 + 752 304 2 1 9 + Num :TWO + IorF :INTEGER + IN1 :+ + IN2 :+ + IN3 :- + prtyp :2 + Proc :1 + Pri :11 + cmv :1 diff --git a/clients/rtds/gtnet_skt/gtnet_skt_udp_loopback_rtt/gtnet_skt_udp_loopback_rtt.sib b/clients/rtds/gtnet_skt/gtnet_skt_udp_loopback_rtt/gtnet_skt_udp_loopback_rtt.sib new file mode 100644 index 000000000..18a7631ef --- /dev/null +++ b/clients/rtds/gtnet_skt/gtnet_skt_udp_loopback_rtt/gtnet_skt_udp_loopback_rtt.sib @@ -0,0 +1,137 @@ +RSCAD 5.000.6 +INFORMATION FILE: gtnet_skt_udp_loopback_rtt.inf +FILE TO DOWNLOAD: gtnet_skt_udp_loopback_rtt +FINISH TIME: 0.2 SECONDS +PRE-TRIGGER: 20% +PLOT DENSITY: EVERY POINT +METER UPDATE FREQUENCY: 1000 +COMPONENT: GROUPING + BOX AT (12,12), DIMENSIONS 69 x 108 + NAME: + ICON: NONE + ICON AT: (224,35) + GROUP: (NONE) + MIN: 0.0 + MAX: 1.0 + CHILD_COMPONENT_COUNT: 2 +COMPONENT: METER + BOX AT (225,35), DIMENSIONS 115 x 150 + NAME: + ICON: ACTIVE + ICON AT: (13,12) + GROUP: (NONE) + GROUP: Subsystem #1|CTLs|Vars + DESC: rtt1 + UNITS: + MIN: 0.0 + MAX: 1.0 + FONT_SIZE: 16 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: METER + BOX AT (224,88), DIMENSIONS 115 x 150 + NAME: + ICON: ACTIVE + ICON AT: (12,65) + GROUP: (NONE) + GROUP: Subsystem #1|CTLs|Vars + DESC: rtt2 + UNITS: + MIN: 0.0 + MAX: 1.0 + FONT_SIZE: 16 + SHOW AS METER_2 + COLOR FALSE + VISUAL_STYLE: 0 +COMPONENT: PLOT + BOX AT (84,20), DIMENSIONS 920 x 296 + NAME: + ICON: EXISTS + ICON AT: (538,221) + GROUP: (NONE) + MIN: 0.0 + MAX: 1.0 + UNLOCKED + NUMBER OF GRAPHS: 1 + X RANGE: DEFAULT + X_DIGITS_OF_PRECISION: 6 + X_AXIS_NOTATION: FIXED + GRAPH 1: 2 CURVE + Y MIN: 0.0 + Y MAX: 1.0 + Y LABEL: + Y_AXIS_VISIBLE: true + Y_DIGITS_OF_PRECISION: 6 + MAX_CURVE_LABELS: 6 + X_GRID_LINES: 5 + Y_GRID_LINES: 5 + Y_AXIS_NOTATION: FIXED + SHOW CURVE LABELS + SHOW GRID LINES + SMART SCALE + CURVE 1: + GROUP: Subsystem #1|GTNETSKT|GTNETSKT1 + DESC: cntr1 + COLOR: BLACK + LABEL: cntr1 + CURVE 2: + GROUP: Subsystem #1|CTLs|Vars + DESC: dtc + COLOR: RED + LABEL: dtc + PAGE HEIGHT: 0.0 + PAGE WIDTH: 0.0 + TOP MARGIN: 0.0 + BOTTOM MARGIN: 0.0 + LEFT MARGIN: 0.0 + RIGHT MARGIN: 0.0 + GRAPH SPACING: 0.0 +COMPONENT: PLOT + BOX AT (84,324), DIMENSIONS 920 x 360 + NAME: + ICON: EXISTS + ICON AT: (525,339) + GROUP: (NONE) + MIN: 0.0 + MAX: 1.0 + UNLOCKED + NUMBER OF GRAPHS: 1 + X RANGE: DEFAULT + X_DIGITS_OF_PRECISION: 6 + X_AXIS_NOTATION: FIXED + GRAPH 1: 3 CURVE + Y MIN: 0.0 + Y MAX: 1.0 + Y LABEL: + Y_AXIS_VISIBLE: true + Y_DIGITS_OF_PRECISION: 6 + MAX_CURVE_LABELS: 6 + X_GRID_LINES: 5 + Y_GRID_LINES: 5 + Y_AXIS_NOTATION: FIXED + SHOW CURVE LABELS + SHOW GRID LINES + SMART SCALE + CURVE 1: + GROUP: Subsystem #1|CTLs|Vars + DESC: ReadyToSend1 + COLOR: BLACK + LABEL: ReadyToSend1 + CURVE 2: + GROUP: Subsystem #1|CTLs|Vars + DESC: ReadyToSend2 + COLOR: RED + LABEL: ReadyToSend2 + CURVE 3: + GROUP: Subsystem #1|CTLs|Vars + DESC: Send + COLOR: BLUE + LABEL: Send + PAGE HEIGHT: 0.0 + PAGE WIDTH: 0.0 + TOP MARGIN: 0.0 + BOTTOM MARGIN: 0.0 + LEFT MARGIN: 0.0 + RIGHT MARGIN: 0.0 + GRAPH SPACING: 0.0