/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Guis; import Helpers.EasyFile; import Helpers.SwingUtils; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Greenlamp */ public class Main extends javax.swing.JFrame { /** * Creates new form Main */ boolean connected = false; Socket socket; DataInputStream in; DataOutputStream out; StringBuffer messageFromServer; boolean paused = false; boolean stoped = false; public Main() { initComponents(); refreshFields(); init(); } /** * 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() { jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); GlistClients = new javax.swing.JList(); Brafraichir = new javax.swing.JButton(); jPanel4 = new javax.swing.JPanel(); jLabel3 = new javax.swing.JLabel(); Glogin = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); Gpassword = new javax.swing.JTextField(); Bconnect = new javax.swing.JButton(); jPanel3 = new javax.swing.JPanel(); Bpause = new javax.swing.JButton(); Breprendre = new javax.swing.JButton(); Bstop = new javax.swing.JButton(); jPanel5 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); Glog = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { formWindowClosing(evt); } }); jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N jLabel1.setText("Administration des terminaux"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(152, 152, 152) .addComponent(jLabel1) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap(25, Short.MAX_VALUE) .addComponent(jLabel1) .addContainerGap()) ); jLabel2.setText("Liste des clients connectés: "); jScrollPane1.setViewportView(GlistClients); Brafraichir.setText("Rafraichir"); Brafraichir.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { BrafraichirActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(Brafraichir, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(47, 47, 47) .addComponent(jLabel2)) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 205, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Brafraichir) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel4.setBackground(new java.awt.Color(204, 204, 204)); jLabel3.setText("login: "); Glogin.setText("admin"); jLabel4.setText("password:"); Gpassword.setText("admin"); Bconnect.setText("se connecter"); Bconnect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { BconnectActionPerformed(evt); } }); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Glogin, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Gpassword, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel4Layout.createSequentialGroup() .addGap(89, 89, 89) .addComponent(Bconnect))) .addContainerGap(30, Short.MAX_VALUE)) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(Glogin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4) .addComponent(Gpassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Bconnect) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); Bpause.setText("Pause"); Bpause.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { BpauseActionPerformed(evt); } }); Breprendre.setText("Reprendre"); Breprendre.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { BreprendreActionPerformed(evt); } }); Bstop.setText("Stop"); Bstop.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { BstopActionPerformed(evt); } }); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(Breprendre, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(Bstop, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(Bpause, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(Bpause) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Breprendre) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Bstop) .addContainerGap()) ); Glog.setEditable(false); Glog.setColumns(20); Glog.setRows(5); Glog.setFocusable(false); jScrollPane2.setViewportView(Glog); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2) .addContainerGap()) ); jPanel5Layout.setVerticalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addGap(62, 62, 62) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE)))) ); pack(); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); java.awt.Dimension dialogSize = getSize(); setLocation((screenSize.width-dialogSize.width)/2,(screenSize.height-dialogSize.height)/2); }// </editor-fold>//GEN-END:initComponents private void BconnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BconnectActionPerformed if(verifLogin()){ if(Bconnect.getText().equalsIgnoreCase("se connecter")){ if(creationSocket()){ sendMessage("LOGINA;" + Glogin.getText() + "#" + Gpassword.getText()); String reponse = receiveMessage(); if(reponse.equals("LOGINA_OUI")){ connected = true; }else{ addLog("Login incorrect"); } } }else{ disconnect(); connected = false; } refreshFields(); } }//GEN-LAST:event_BconnectActionPerformed private void BpauseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BpauseActionPerformed if(!paused){ sendMessage("PAUSE"); String retour = receiveMessage(); if(retour.equals("PAUSE_OUI")){ paused = true; addLog("Le serveur est maintenant en pause"); }else{ addLog("Le serveur n'est pas en pause"); } } }//GEN-LAST:event_BpauseActionPerformed private void BreprendreActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BreprendreActionPerformed if(paused){ sendMessage("RESUME"); String retour = receiveMessage(); if(retour.equals("RESUME_OUI")){ paused = true; addLog("Le serveur n'est plus en pause"); } paused=false; } }//GEN-LAST:event_BreprendreActionPerformed private void BstopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BstopActionPerformed sendMessage("STOP"); disconnect(); refreshFields(); }//GEN-LAST:event_BstopActionPerformed private void BrafraichirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BrafraichirActionPerformed sendMessage("LCLIENT"); String clients = receiveMessage(); traiterClients(clients); }//GEN-LAST:event_BrafraichirActionPerformed private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing disconnect(); }//GEN-LAST:event_formWindowClosing /** * @param args the command line arguments */ public static void main(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(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Main.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() { new Main().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton Bconnect; private javax.swing.JButton Bpause; private javax.swing.JButton Brafraichir; private javax.swing.JButton Breprendre; private javax.swing.JButton Bstop; private javax.swing.JList GlistClients; private javax.swing.JTextArea Glog; private javax.swing.JTextField Glogin; private javax.swing.JTextField Gpassword; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; // End of variables declaration//GEN-END:variables private void init() { socket = null; in = null; out = null; messageFromServer = new StringBuffer(); } private void refreshFields() { if(connected){ Brafraichir.setEnabled(true); Bpause.setEnabled(true); Bstop.setEnabled(true); Breprendre.setEnabled(true); Glogin.setEnabled(false); Gpassword.setEnabled(false); Bconnect.setText("se déconnecter"); }else{ Brafraichir.setEnabled(false); Bpause.setEnabled(false); Bstop.setEnabled(false); Breprendre.setEnabled(false); Glogin.setEnabled(true); Gpassword.setEnabled(true); Bconnect.setText("se connecter"); } } private boolean creationSocket() { String host = EasyFile.getConfig("Configs_Admin_Terminaux", "HOST"); int port = Integer.parseInt(EasyFile.getConfig("Configs_Admin_Terminaux", "PORT_ADMIN")); try { InetAddress adresse = InetAddress.getByName(host); socket = new Socket(adresse, port); in = new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); addLog("Création socket - OK"); return true; } catch (Exception ex) { addLog("Création socket - FAIL"); return false; } } private void addLog(String message) { String old = Glog.getText(); if(!old.isEmpty()){ old += "\n"; } old += message; Glog.setText(old); } private void disconnect() { addLog("Closing socket"); try { if(in != null){ in.close(); } if(out != null){ out.flush(); out.close(); } } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } addLog("Socket closed"); connected = false; } private void sendMessage(String message) { String msg = message + "\r\n"; try { out.write(msg.getBytes()); out.flush(); addLog("Envoi du message - OK"); addLog(message); } catch (IOException ex) { addLog("Envoi du message - FAIL"); addLog(message); Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } private String receiveMessage(){ try { byte buffer; messageFromServer.setLength(0); addLog("En attente de la réponse du serveur"); while((buffer = in.readByte()) != ((byte)'\r')){ if(buffer != '\r' && buffer != '\n' && buffer != 0){ messageFromServer.append((char)buffer); } } addLog("Reception de la réponse: OK"); addLog(messageFromServer.toString()); return messageFromServer.toString(); } catch (IOException ex) { addLog("Reception de la réponse - FAIL"); disconnect(); return "END_OF_CONNEXION"; } } private boolean verifLogin() { if(Glogin.getText().isEmpty()){ addLog("Login vide, connexion impossible"); return false; } if(Gpassword.getText().isEmpty()){ addLog("Password vide, connexion impossible"); return false; } return true; } private void traiterClients(String message) { if(message.equals("LCLIENT_EMPTY")){ SwingUtils.emptyList(GlistClients); addLog("Aucuns utilisateurs connecté"); }else{ SwingUtils.emptyList(GlistClients); String[] removeType = message.split(";"); String users = removeType[1]; String[] usersSplit = users.split("#"); for(String user : usersSplit){ SwingUtils.addToList(GlistClients, user); } } } }