/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package simrat; import SimRATApp.Image; import SimRATApp.SimRAT; import SimRATApp.SimRATFile; import SimRATApp.SimRATHelper; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileView; import javax.swing.plaf.FileChooserUI; import org.omg.CORBA.ORB; import org.omg.CORBA.ORBPackage.InvalidName; import org.omg.CosNaming.NamingContextExt; import org.omg.CosNaming.NamingContextExtHelper; import org.omg.CosNaming.NamingContextPackage.CannotProceed; import org.omg.CosNaming.NamingContextPackage.NotFound; /** * * @author Rumesh */ public class Client extends javax.swing.JFrame { static ORB orb; static SimRAT implObj; Thread t; Image imgArr; int labelWidth; int refreshRate; int originalWidth; int originalHeight; ImageIcon ico; boolean started; /** * Creates new form Client */ public Client() { try { initComponents(); setLocationRelativeTo(null); String[] args = {"-ORBInitialPort","1050","-ORBInitialHost","Rumesh-Laptop"}; orb = ORB.init(args, null); org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); implObj = SimRATHelper.narrow(ncRef.resolve_str("SimRAT")); started = false; labelWidth = lblPicture.getWidth(); refreshRate = 10; t = new Thread(new Runnable() { @Override public void run() { while (true) { try { imgArr = implObj.getScreenshot(); InputStream in = new ByteArrayInputStream(imgArr.img); BufferedImage bi = ImageIO.read(in); originalWidth = bi.getWidth(); originalHeight = bi.getHeight(); //System.out.println(originalWidth+" X "+originalHeight); java.awt.Image img = new ImageIcon(bi).getImage().getScaledInstance(labelWidth, labelWidth * originalHeight / originalWidth, java.awt.Image.SCALE_SMOOTH); lblPicture.setBounds(5, 5, lblPicture.getWidth(), labelWidth * originalHeight / originalWidth); lblPicture.setIcon(new ImageIcon(img)); ico = (ImageIcon) lblPicture.getIcon(); started = true; Thread.sleep(refreshRate); } catch (IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } catch (InterruptedException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } } }); lblPicture.requestFocusInWindow(); } catch (InvalidName ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } catch (NotFound ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } catch (CannotProceed ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } catch (org.omg.CosNaming.NamingContextPackage.InvalidName ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { lblPicture = new javax.swing.JLabel(); btnStart = new javax.swing.JButton(); chkMouseMove = new javax.swing.JCheckBox(); btnGetFile = new javax.swing.JButton(); btnSendFile = new javax.swing.JButton(); spinRefresh = new javax.swing.JSpinner(); jLabel1 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("SimRAT Viewer"); lblPicture.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); lblPicture.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { lblPictureMousePressed(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { lblPictureMouseReleased(evt); } }); lblPicture.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseMoved(java.awt.event.MouseEvent evt) { lblPictureMouseMoved(evt); } }); lblPicture.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { lblPictureKeyReleased(evt); } public void keyPressed(java.awt.event.KeyEvent evt) { lblPictureKeyPressed(evt); } }); btnStart.setText("Start"); btnStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnStartActionPerformed(evt); } }); chkMouseMove.setText("Capture Mouse Move"); chkMouseMove.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseReleased(java.awt.event.MouseEvent evt) { chkMouseMoveMouseReleased(evt); } }); btnGetFile.setText("Get File"); btnGetFile.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnGetFileActionPerformed(evt); } }); btnSendFile.setText("Send File"); btnSendFile.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnSendFileActionPerformed(evt); } }); spinRefresh.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(20), Integer.valueOf(0), null, Integer.valueOf(1))); spinRefresh.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseReleased(java.awt.event.MouseEvent evt) { spinRefreshMouseReleased(evt); } }); spinRefresh.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { spinRefreshPropertyChange(evt); } }); jLabel1.setText("Frame Refresh Rate"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblPicture, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(btnStart, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(chkMouseMove) .addGap(44, 44, 44) .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinRefresh, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 205, Short.MAX_VALUE) .addComponent(btnSendFile, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnGetFile, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btnGetFile, btnSendFile}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(lblPicture, javax.swing.GroupLayout.DEFAULT_SIZE, 506, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btnStart) .addComponent(chkMouseMove) .addComponent(btnGetFile) .addComponent(btnSendFile) .addComponent(spinRefresh, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnStartActionPerformed t.start(); spinRefresh.setEnabled(false); lblPicture.requestFocusInWindow(); }//GEN-LAST:event_btnStartActionPerformed private void btnGetFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGetFileActionPerformed String path = JOptionPane.showInputDialog("Please enter file path."); if (path != null) { if (path.trim().length() > 0) { SimRATFile simFile = implObj.downloadFileFromServer(path); // SimRATFile simFile = new SimRATFile(); // simFile.fileName = "app.txt"; if (simFile != null) { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setDialogTitle("Select a path to save the file"); int returnVal = fc.showSaveDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { FileOutputStream fileOuputStream = null; try { File file = fc.getSelectedFile(); String pt = file.getAbsolutePath() + "/" + simFile.fileName; fileOuputStream = new FileOutputStream(pt); fileOuputStream.write(simFile.file); fileOuputStream.close(); } catch (FileNotFoundException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } finally { try { fileOuputStream.close(); } catch (IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } } else { JOptionPane.showMessageDialog(null, "File save cancelled."); } } else { JOptionPane.showMessageDialog(null, "File does not exist in remote machine."); } } else { JOptionPane.showMessageDialog(null, "Please enter a valid path"); } } lblPicture.requestFocusInWindow(); }//GEN-LAST:event_btnGetFileActionPerformed private void chkMouseMoveMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_chkMouseMoveMouseReleased lblPicture.requestFocusInWindow(); }//GEN-LAST:event_chkMouseMoveMouseReleased private void btnSendFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSendFileActionPerformed //implemnt JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { FileInputStream fs = null; try { File f = fc.getSelectedFile(); //This is where a real application would open the file. //log.append("Opening: " + file.getName() + "." + newline); byte[] bFile = new byte[(int) f.length()]; fs = new FileInputStream(f); fs.read(bFile); implObj.uploadFileToServer(new SimRATFile(f.getName(), bFile)); } catch (FileNotFoundException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } finally { try { fs.close(); } catch (IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } } else { } lblPicture.requestFocusInWindow(); }//GEN-LAST:event_btnSendFileActionPerformed private void lblPictureMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblPictureMousePressed int x = evt.getX(); int y = evt.getY(); implObj.mousePress(x * originalWidth / ico.getIconWidth(), y * originalHeight / ico.getIconHeight(), evt.getButton()); System.out.println("Pressed"); }//GEN-LAST:event_lblPictureMousePressed private void lblPictureMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblPictureMouseReleased int x = evt.getX(); int y = evt.getY(); implObj.mouseRelease(x * originalWidth / ico.getIconWidth(), y * originalHeight / ico.getIconHeight(), evt.getButton()); System.out.println("Released"); }//GEN-LAST:event_lblPictureMouseReleased private void lblPictureKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_lblPictureKeyPressed if (started) { implObj.keyPress(evt.getKeyCode()); } }//GEN-LAST:event_lblPictureKeyPressed private void lblPictureKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_lblPictureKeyReleased if (started) { implObj.keyReleased(evt.getKeyCode()); } }//GEN-LAST:event_lblPictureKeyReleased private void spinRefreshPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_spinRefreshPropertyChange lblPicture.requestFocusInWindow(); }//GEN-LAST:event_spinRefreshPropertyChange private void spinRefreshMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_spinRefreshMouseReleased lblPicture.requestFocusInWindow(); }//GEN-LAST:event_spinRefreshMouseReleased private void lblPictureMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblPictureMouseMoved if (started) { if (chkMouseMove.isSelected()) { int x = evt.getX(); int y = evt.getY(); implObj.mouseMove(x * originalWidth / ico.getIconWidth(), y * originalHeight / ico.getIconHeight()); } } }//GEN-LAST:event_lblPictureMouseMoved /** * @param args the command line arguments */ public static void main(final String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Client.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Client.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Client.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Client.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { try { new Client().setVisible(true); // orb = ORB.init(args, null); // org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); // NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // implObj = SimRATHelper.narrow(ncRef.resolve_str("SimRAT")); // } catch (InvalidName ex) { // Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); // JOptionPane.showMessageDialog(null, "CORBA ORB creation error"); // } catch (NotFound ex) { // Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); // JOptionPane.showMessageDialog(null, "CORBA ORB creation error"); // } catch (CannotProceed ex) { // Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); // JOptionPane.showMessageDialog(null, "CORBA ORB creation error"); // } catch (org.omg.CosNaming.NamingContextPackage.InvalidName ex) { // Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); // JOptionPane.showMessageDialog(null, "CORBA ORB creation error"); } catch (Exception e) { JOptionPane.showMessageDialog(null, "CORBA ORB creation error"); } } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnGetFile; private javax.swing.JButton btnSendFile; private javax.swing.JButton btnStart; private javax.swing.JCheckBox chkMouseMove; private javax.swing.JLabel jLabel1; private javax.swing.JLabel lblPicture; private javax.swing.JSpinner spinRefresh; // End of variables declaration//GEN-END:variables }