Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.talent.aio.examples.im.client.ui; import java.awt.Color; import java.awt.event.MouseEvent; import java.io.IOException; import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock; import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock; import javax.swing.DefaultListModel; import javax.swing.JList; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.talent.aio.client.ClientChannelContext; import com.talent.aio.client.ClientGroupContext; import com.talent.aio.client.ClientGroupStat; import com.talent.aio.common.Aio; import com.talent.aio.common.ChannelContext; import com.talent.aio.common.Node; import com.talent.aio.common.ObjWithLock; import com.talent.aio.common.stat.GroupStat; import com.talent.aio.common.utils.SystemTimer; import com.talent.aio.examples.im.client.ImClientStarter; import com.talent.aio.examples.im.client.ui.component.ImListCellRenderer; import com.talent.aio.examples.im.client.ui.component.MyTextArea; import com.talent.aio.examples.im.common.Command; import com.talent.aio.examples.im.common.Const.ChatType; import com.talent.aio.examples.im.common.ImPacket; import com.talent.aio.examples.im.common.packets.ChatReqBody; /** * * @author Administrator */ public class JFrameMain extends javax.swing.JFrame { /** * @?: * @: long */ private static final long serialVersionUID = -7052228425670244367L; private static Logger log = LoggerFactory.getLogger(JFrameMain.class); private static JFrameMain instance = null; private static ImClientStarter imClientStarter = null; //?? public static final AtomicLong receivedPackets = new AtomicLong(); public static final AtomicLong sentPackets = new AtomicLong(); public static boolean isNeedUpdateList = false; public static final ReentrantReadWriteLock updatingListLock = new ReentrantReadWriteLock(); public static boolean isNeedUpdateConnectionCount = false; public static boolean isNeedUpdateReceivedCount = false; public static boolean isNeedUpdateSentCount = false; public static int MAX_LIST_COUNT = 20; //??? /** * ? */ protected void setWindowIcon() { //javax.swing.ImageIcon imageIcon = new javax.swing.ImageIcon(getClass().getResource("/img/icon.png")); // this.setIconImage(imageIcon.getImage()); } /** * @return */ public static JFrameMain getInstance() { if (instance == null) { synchronized (log) { if (instance == null) { instance = new JFrameMain(); instance.setWindowIcon(); } } } return instance; } public static void updateConnectionCount() { if (isNeedUpdateConnectionCount) { isNeedUpdateConnectionCount = false; NumberFormat numberFormat = NumberFormat.getInstance(); ClientGroupContext<Object, ImPacket, Object> clientGroupContext = imClientStarter .getClientGroupContext(); int connectionCount = clientGroupContext.getConnections().size(); instance.connectionCountLabel.setText("" + numberFormat.format(connectionCount)); int connectedCount = clientGroupContext.getConnecteds().size(); instance.connectedCountLabel.setText("" + numberFormat.format(connectedCount)); int closedCount = clientGroupContext.getCloseds().size(); instance.closedCountLabel.setText("" + numberFormat.format(closedCount)); // log.error("{},{},{}", connectionCount, connectedCount, closedCount); } } public static void updateReceivedLabel() { if (isNeedUpdateReceivedCount) { isNeedUpdateReceivedCount = false; NumberFormat numberFormat = NumberFormat.getInstance(); ClientGroupContext<Object, ImPacket, Object> clientGroupContext = imClientStarter .getClientGroupContext(); GroupStat groupStat = clientGroupContext.getGroupStat(); instance.receivedLabel.setText(numberFormat.format(groupStat.getReceivedPacket().get()) + "?" + numberFormat.format(groupStat.getReceivedBytes().get()) + "B"); } } public static void updateSentLabel() { if (isNeedUpdateSentCount) { isNeedUpdateSentCount = false; NumberFormat numberFormat = NumberFormat.getInstance(); ClientGroupContext<Object, ImPacket, Object> clientGroupContext = imClientStarter .getClientGroupContext(); GroupStat groupStat = clientGroupContext.getGroupStat(); instance.sentLabel.setText(numberFormat.format(groupStat.getSentPacket().get()) + "?" + numberFormat.format(groupStat.getSentBytes().get()) + "B"); } } /** * Creates new form JFrameMain */ private JFrameMain() { listModel = new DefaultListModel<ClientChannelContext<Object, ImPacket, Object>>(); initComponents(); //#2ecc71 OK //##f1c40f warn Color okColor = new Color(0x2e, 0xcc, 0x71); Color warnColor = new Color(0xe7, 0x4c, 0x3c); clients.setCellRenderer(new ImListCellRenderer(okColor, warnColor)); try { imClientStarter = new ImClientStarter(); } catch (IOException e) { throw new RuntimeException(e); } new Thread(new Runnable() { @Override public void run() { while (true) { updateConnectionCount(); updateReceivedLabel(); updateSentLabel(); if (isNeedUpdateList) { WriteLock writeLock = updatingListLock.writeLock(); if (writeLock.tryLock()) { try { isNeedUpdateList = false; clients.updateUI(); } catch (Exception e) { log.error(e.toString(), e); } finally { writeLock.unlock(); } } } try { Thread.sleep(100L); } catch (InterruptedException e) { log.error(e.toString(), e); } } } }, "update ui task").start(); } /** * 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { serverip = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); port = new javax.swing.JTextField(); lianjie = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); clients = new javax.swing.JList<>(); msgField = new javax.swing.JTextField(); sendBtn = new javax.swing.JButton(); jScrollPane3 = new javax.swing.JScrollPane(); msgTextArea = new MyTextArea(); groupField = new javax.swing.JTextField(); loopcountField = new javax.swing.JTextField(); jLabel6 = new javax.swing.JLabel(); loginnameSufEndField = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel(); printLogBtn = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); connectionCountLabel = new javax.swing.JLabel(); connectedCountLabel = new javax.swing.JLabel(); closedCountLabel = new javax.swing.JLabel(); delBtn = new javax.swing.JButton(); jLabel8 = new javax.swing.JLabel(); receivedLabel = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel(); sentLabel = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("talent-im-client-1.0.1.v20170214-RELEASE"); serverip.setText("127.0.0.1"); serverip.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { serveripActionPerformed(evt); } }); jLabel1.setText("Server"); jLabel2.setFont(new java.awt.Font("", 1, 12)); // NOI18N jLabel2.setText(":"); port.setText("9321"); port.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { portActionPerformed(evt); } }); lianjie.setFont(new java.awt.Font("", 1, 14)); // NOI18N lianjie.setForeground(new java.awt.Color(51, 0, 255)); lianjie.setText(""); lianjie.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { lianjieActionPerformed(evt); } }); clients.setFont(new java.awt.Font("", 0, 18)); // NOI18N clients.setModel(listModel); jScrollPane1.setViewportView(clients); msgField.setText("he"); sendBtn.setFont(new java.awt.Font("", 1, 14)); // NOI18N sendBtn.setForeground(new java.awt.Color(51, 0, 255)); sendBtn.setText("?"); sendBtn.setEnabled(false); sendBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { sendBtnActionPerformed(evt); } }); msgTextArea.setColumns(20); msgTextArea.setFont(new java.awt.Font("", 0, 18)); // NOI18N msgTextArea.setRows(5); msgTextArea.setText( "\n1?Server?\n2??(?)\n3???(?)\n\n4????\n5???????(?: 1000*2000=2000000)\n\n\n"); msgTextArea.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { msgTextAreaMouseClicked(evt); } }); jScrollPane3.setViewportView(msgTextArea); groupField.setText("g"); groupField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { groupFieldActionPerformed(evt); } }); loopcountField.setText("2000"); loopcountField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { loopcountFieldActionPerformed(evt); } }); jLabel6.setText(""); loginnameSufEndField.setText("1000"); loginnameSufEndField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { loginnameSufEndFieldActionPerformed(evt); } }); jLabel3.setText("?"); printLogBtn.setFont(new java.awt.Font("", 1, 14)); // NOI18N printLogBtn.setForeground(new java.awt.Color(51, 0, 255)); printLogBtn.setText("??"); printLogBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { printLogBtnActionPerformed(evt); } }); jLabel4.setText("??"); jLabel5.setText("?"); connectionCountLabel.setFont(new java.awt.Font("", 0, 18)); // NOI18N connectionCountLabel.setForeground(new java.awt.Color(51, 0, 204)); connectionCountLabel.setText("0"); connectedCountLabel.setFont(new java.awt.Font("", 0, 18)); // NOI18N connectedCountLabel.setForeground(new java.awt.Color(0, 153, 0)); connectedCountLabel.setText("0"); closedCountLabel.setFont(new java.awt.Font("", 0, 18)); // NOI18N closedCountLabel.setForeground(new java.awt.Color(255, 0, 0)); closedCountLabel.setText("0"); delBtn.setFont(new java.awt.Font("", 1, 18)); // NOI18N delBtn.setForeground(new java.awt.Color(51, 0, 255)); delBtn.setText(""); delBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { delBtnActionPerformed(evt); } }); jLabel8.setFont(new java.awt.Font("", 1, 18)); // NOI18N jLabel8.setText(""); receivedLabel.setFont(new java.awt.Font("", 0, 18)); // NOI18N receivedLabel.setText("0"); jLabel12.setFont(new java.awt.Font("", 1, 18)); // NOI18N jLabel12.setText("??"); sentLabel.setFont(new java.awt.Font("", 0, 18)); // NOI18N sentLabel.setText("0"); 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) .addGroup(layout.createSequentialGroup().addGap(0, 40, Short.MAX_VALUE) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(serverip, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(port, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(loginnameSufEndField, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup().addComponent(delBtn) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(connectionCountLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(connectedCountLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGap(0, 0, 0) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(closedCountLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(groupField, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(lianjie).addGap(74, 74, 74).addComponent(jLabel5)) .addGroup(layout.createSequentialGroup().addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(receivedLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(msgField, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(loopcountField, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(sendBtn) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(printLogBtn).addGap(0, 0, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup().addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(sentLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addContainerGap()) .addGroup(layout.createSequentialGroup().addGap(1, 1, 1) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3))); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(serverip, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1).addComponent(jLabel2) .addComponent(port, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(loginnameSufEndField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lianjie) .addComponent(groupField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(msgField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(loopcountField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6).addComponent(sendBtn).addComponent(jLabel3).addComponent(jLabel4) .addComponent(printLogBtn).addComponent(jLabel5)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(connectionCountLabel).addComponent(connectedCountLabel) .addComponent(closedCountLabel).addComponent(delBtn).addComponent(jLabel8) .addComponent(receivedLabel).addComponent(jLabel12).addComponent(sentLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 554, Short.MAX_VALUE) .addComponent(jScrollPane3)) .addContainerGap())); pack(); }// </editor-fold>//GEN-END:initComponents private void serveripActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_serveripActionPerformed // TODO add your handling code here: }//GEN-LAST:event_serveripActionPerformed private void portActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_portActionPerformed // TODO add your handling code here: }//GEN-LAST:event_portActionPerformed // public void updateClientCount() // { // int clientSize = imClientStarter.getAioClient().getClientGroupContext().getConnections().getSet().getObj().size(); // clientCountLabel.setText(clientSize + ""); // } private void lianjieActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lianjieActionPerformed try { final String serverip_ = serverip.getText(); final Integer port_ = Integer.parseInt(port.getText()); int start = 0;//Integer.parseInt(loginnameSufStartField.getText()); int end = Integer.parseInt(loginnameSufEndField.getText()); // int count = end - start + 1; int count = end - start; final Node serverNode = new Node(serverip_, port_); WriteLock writeLock = updatingListLock.writeLock(); writeLock.lock(); try { for (int i = 0; i < count; i++) { ClientChannelContext<Object, ImPacket, Object> channelContext = imClientStarter.getAioClient() .connect(serverNode); if (listModel.size() < MAX_LIST_COUNT) { if (channelContext != null) { listModel.addElement(channelContext); } } } } catch (Exception e) { log.error(e.toString(), e); } finally { writeLock.unlock(); } } catch (Exception e) { String str = ExceptionUtils.getStackTrace(e); msgTextArea.append(str); } finally { // lianjie.setEnabled(false); // serverip.setEnabled(false); // port.setEnabled(false); // loginnameSufEndField.setEnabled(false); // groupField.setEnabled(false); sendBtn.setEnabled(true); } }//GEN-LAST:event_lianjieActionPerformed // public static String getSelectedId() // { // int index = JFrameMain.getInstance().clients.getSelectedIndex();//.getModel(); // if (index < 0) // { // log.error(""); // return null; // } // String id = (String) JFrameMain.getInstance().listModel.getElementAt(index); // return id; // } private long sendStartTime = SystemTimer.currentTimeMillis(); private long startRecievedBytes; //?? private long startSentBytes; //???? private void sendBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendBtnActionPerformed sendBtn.setEnabled(false); ClientGroupContext<Object, ImPacket, Object> clientGroupContext = imClientStarter.getAioClient() .getClientGroupContext(); setStartRecievedBytes(clientGroupContext.getGroupStat().getReceivedBytes().get()); setStartSentBytes(clientGroupContext.getGroupStat().getSentBytes().get()); JFrameMain.getInstance().getMsgTextArea().setText(""); receivedPackets.set(0); sentPackets.set(0); String msg = msgField.getText(); int loopcount = Integer.parseInt(loopcountField.getText()); String toGroup = groupField.getText(); ChatReqBody.Builder builder = ChatReqBody.newBuilder(); builder.setTime(SystemTimer.currentTimeMillis()); builder.setGroup(toGroup); builder.setType(ChatType.pub); builder.setText(msg); ChatReqBody chatReqBody = builder.build(); setSendStartTime(SystemTimer.currentTimeMillis()); byte[] body = chatReqBody.toByteArray(); ImPacket packet = new ImPacket(body, Command.CHAT_REQ); if (listModel.size() == 0) { return; } ClientChannelContext<Object, ImPacket, Object> channelContext = listModel.getElementAt(0); for (int i = 0; i < loopcount; i++) { Aio.send(channelContext, packet); } new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { log.error(e.toString(), e); } sendBtn.setEnabled(true); } }).start(); }//GEN-LAST:event_sendBtnActionPerformed private void groupFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_groupFieldActionPerformed // TODO add your handling code here: }//GEN-LAST:event_groupFieldActionPerformed private void loginnameSufEndFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loginnameSufEndFieldActionPerformed // TODO add your handling code here: }//GEN-LAST:event_loginnameSufEndFieldActionPerformed private void msgTextAreaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_msgTextAreaMouseClicked if (evt.getButton() == MouseEvent.BUTTON3) {//? log.error(evt.getButton() + ""); } }//GEN-LAST:event_msgTextAreaMouseClicked private void loopcountFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loopcountFieldActionPerformed // TODO add your handling code here: }//GEN-LAST:event_loopcountFieldActionPerformed private void printLogBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cleanBtn1ActionPerformed if (imClientStarter == null) { log.error(""); return; } // String id = imClientStarter.getClientGroupContext().getId(); ClientGroupContext<Object, ImPacket, Object> clientGroupContext = imClientStarter.getClientGroupContext(); ObjWithLock<Set<ChannelContext<Object, ImPacket, Object>>> connectionsSetWithLock = clientGroupContext .getConnections().getSetWithLock(); Set<ChannelContext<Object, ImPacket, Object>> connectionsSet = connectionsSetWithLock.getObj(); ObjWithLock<Set<ChannelContext<Object, ImPacket, Object>>> connectedsSetWithLock = clientGroupContext .getConnecteds().getSetWithLock(); Set<ChannelContext<Object, ImPacket, Object>> connectedsSet = connectedsSetWithLock.getObj(); ObjWithLock<Set<ChannelContext<Object, ImPacket, Object>>> closedsSetWithLock = clientGroupContext .getCloseds().getSetWithLock(); Set<ChannelContext<Object, ImPacket, Object>> closedsSet = closedsSetWithLock.getObj(); ClientGroupStat clientGroupStat = clientGroupContext.getClientGroupStat(); log.error( "<<--------------------\r\n?:{}\r\n?:{} = {} + {} ( + )\r\n??{}??{}KB\r\n??{}??\r\n???{}??{}KB\r\n-------------------->>", SystemTimer.currentTimeMillis(), connectionsSet.size(), connectedsSet.size(), closedsSet.size(), clientGroupStat.getReceivedPacket().get(), clientGroupStat.getReceivedBytes().get() / 1000, clientGroupStat.getHandledPacket().get(), clientGroupStat.getSentPacket().get(), clientGroupStat.getSentBytes().get() / 1000); }//GEN-LAST:event_cleanBtn1ActionPerformed private void delBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_delBtnActionPerformed // TODO add your handling code here: // synchronized (clients) // { List<ClientChannelContext<Object, ImPacket, Object>> selecteds = clients.getSelectedValuesList(); if (selecteds == null || selecteds.size() == 0) { log.error("?"); return; } else { List<ClientChannelContext<Object, ImPacket, Object>> dest = new ArrayList<>(selecteds.size()); for (ClientChannelContext<Object, ImPacket, Object> cc : selecteds) { if (cc != null) { dest.add(cc); } } WriteLock updatingListWriteLock = updatingListLock.writeLock(); updatingListWriteLock.lock(); try { for (ClientChannelContext<Object, ImPacket, Object> cc : dest) { if (cc != null) { try { Aio.remove(cc, "?"); listModel.removeElement(cc); } catch (Exception e) { log.error(e.toString(), e); } } } } catch (Exception e) { log.error(e.toString(), e); } finally { updatingListWriteLock.unlock(); } ClientGroupContext<Object, ImPacket, Object> clientGroupContext = imClientStarter .getClientGroupContext(); ObjWithLock<Set<ChannelContext<Object, ImPacket, Object>>> setWithLock = clientGroupContext .getConnections().getSetWithLock(); Set<ChannelContext<Object, ImPacket, Object>> set = setWithLock.getObj(); ReadLock readLock = setWithLock.getLock().readLock(); if (listModel.size() < MAX_LIST_COUNT && set.size() > listModel.size()) { updatingListWriteLock.lock(); try { // listModel.clear(); readLock.lock(); for (ChannelContext<Object, ImPacket, Object> channelContext : set) { if (listModel.size() < MAX_LIST_COUNT) { if (channelContext != null) { if (listModel.contains(channelContext)) { continue; } else { listModel.addElement( (ClientChannelContext<Object, ImPacket, Object>) channelContext); } } } else { break; } } } catch (Exception e) { log.error(e.toString(), e); } finally { updatingListWriteLock.unlock(); readLock.unlock(); } } } // } //.getSelectedValues(); }//GEN-LAST:event_delBtnActionPerformed /** * @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 { // try // { // com.talent.aio.examples.im.client.ImClientStarter.init(); // } catch (Exception e) // { // throw new RuntimeException(e); // } 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(JFrameMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(JFrameMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(JFrameMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(JFrameMain.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() { JFrameMain.getInstance().setVisible(true); } }); } private DefaultListModel<ClientChannelContext<Object, ImPacket, Object>> listModel = null; // private Set<ChannelContext> clients_ = new HashSet<>(); // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JList<ClientChannelContext<Object, ImPacket, Object>> clients; private javax.swing.JLabel closedCountLabel; private javax.swing.JLabel connectedCountLabel; private javax.swing.JLabel connectionCountLabel; private javax.swing.JButton delBtn; private javax.swing.JTextField groupField; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel8; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JButton lianjie; private javax.swing.JTextField loginnameSufEndField; private javax.swing.JTextField loopcountField; private javax.swing.JTextField msgField; private javax.swing.JTextArea msgTextArea; private javax.swing.JTextField port; private javax.swing.JButton printLogBtn; private javax.swing.JLabel receivedLabel; private javax.swing.JButton sendBtn; private javax.swing.JLabel sentLabel; private javax.swing.JTextField serverip; // End of variables declaration//GEN-END:variables public JList<ClientChannelContext<Object, ImPacket, Object>> getClients() { return clients; } public javax.swing.JTextArea getMsgTextArea() { return msgTextArea; } /** * @return the imClientStarter */ public static ImClientStarter getImClientStarter() { return imClientStarter; } /** * @param imClientStarter the imClientStarter to set */ public static void setImClientStarter(ImClientStarter imClientStarter) { JFrameMain.imClientStarter = imClientStarter; } /** * @return the listModel */ @SuppressWarnings("rawtypes") public DefaultListModel getListModel() { return listModel; } // /** // * @param listModel the listModel to set // */ // @SuppressWarnings("rawtypes") // public void setListModel(DefaultListModel listModel) // { // this.listModel = listModel; // } // /** // * @return the cleanBtn // */ // public javax.swing.JButton getCleanBtn() // { // return cleanBtn; // } // // /** // * @param cleanBtn the cleanBtn to set // */ // public void setCleanBtn(javax.swing.JButton cleanBtn) // { // this.cleanBtn = cleanBtn; // } /** * @return the printBtn */ public javax.swing.JButton getPrintBtn() { return printLogBtn; } /** * @param printBtn the printBtn to set */ public void setPrintBtn(javax.swing.JButton printBtn) { this.printLogBtn = printBtn; } /** * @return the groupField */ public javax.swing.JTextField getGroupField() { return groupField; } /** * @param groupField the groupField to set */ public void setGroupField(javax.swing.JTextField groupField) { this.groupField = groupField; } /** * @return the jLabel1 */ public javax.swing.JLabel getjLabel1() { return jLabel1; } /** * @param jLabel1 the jLabel1 to set */ public void setjLabel1(javax.swing.JLabel jLabel1) { this.jLabel1 = jLabel1; } /** * @return the jLabel2 */ public javax.swing.JLabel getjLabel2() { return jLabel2; } /** * @param jLabel2 the jLabel2 to set */ public void setjLabel2(javax.swing.JLabel jLabel2) { this.jLabel2 = jLabel2; } /** * @return the jLabel3 */ public javax.swing.JLabel getjLabel3() { return jLabel3; } /** * @param jLabel3 the jLabel3 to set */ public void setjLabel3(javax.swing.JLabel jLabel3) { this.jLabel3 = jLabel3; } /** * @return the jLabel6 */ public javax.swing.JLabel getjLabel6() { return jLabel6; } /** * @param jLabel6 the jLabel6 to set */ public void setjLabel6(javax.swing.JLabel jLabel6) { this.jLabel6 = jLabel6; } /** * @return the jScrollPane1 */ public javax.swing.JScrollPane getjScrollPane1() { return jScrollPane1; } /** * @param jScrollPane1 the jScrollPane1 to set */ public void setjScrollPane1(javax.swing.JScrollPane jScrollPane1) { this.jScrollPane1 = jScrollPane1; } /** * @return the jScrollPane3 */ public javax.swing.JScrollPane getjScrollPane3() { return jScrollPane3; } /** * @param jScrollPane3 the jScrollPane3 to set */ public void setjScrollPane3(javax.swing.JScrollPane jScrollPane3) { this.jScrollPane3 = jScrollPane3; } /** * @return the lianjie */ public javax.swing.JButton getLianjie() { return lianjie; } /** * @param lianjie the lianjie to set */ public void setLianjie(javax.swing.JButton lianjie) { this.lianjie = lianjie; } /** * @return the loginnameSufEndField */ public javax.swing.JTextField getLoginnameSufEndField() { return loginnameSufEndField; } /** * @param loginnameSufEndField the loginnameSufEndField to set */ public void setLoginnameSufEndField(javax.swing.JTextField loginnameSufEndField) { this.loginnameSufEndField = loginnameSufEndField; } /** * @return the loopcountField */ public javax.swing.JTextField getLoopcountField() { return loopcountField; } /** * @param loopcountField the loopcountField to set */ public void setLoopcountField(javax.swing.JTextField loopcountField) { this.loopcountField = loopcountField; } /** * @return the msgField */ public javax.swing.JTextField getMsgField() { return msgField; } /** * @param msgField the msgField to set */ public void setMsgField(javax.swing.JTextField msgField) { this.msgField = msgField; } /** * @return the port */ public javax.swing.JTextField getPort() { return port; } /** * @param port the port to set */ public void setPort(javax.swing.JTextField port) { this.port = port; } /** * @return the sendBtn */ public javax.swing.JButton getSendBtn() { return sendBtn; } /** * @param sendBtn the sendBtn to set */ public void setSendBtn(javax.swing.JButton sendBtn) { this.sendBtn = sendBtn; } /** * @return the serverip */ public javax.swing.JTextField getServerip() { return serverip; } /** * @param serverip the serverip to set */ public void setServerip(javax.swing.JTextField serverip) { this.serverip = serverip; } /** * @param clients the clients to set */ public void setClients(JList<ClientChannelContext<Object, ImPacket, Object>> clients) { this.clients = clients; } /** * @param msgTextArea the msgTextArea to set */ public void setMsgTextArea(javax.swing.JTextArea msgTextArea) { this.msgTextArea = msgTextArea; } /** * @return the sendStartTime */ public long getSendStartTime() { return sendStartTime; } /** * @param sendStartTime the sendStartTime to set */ public void setSendStartTime(long sendStartTime) { this.sendStartTime = sendStartTime; } /** * @return the startRecievedBytes */ public long getStartRecievedBytes() { return startRecievedBytes; } /** * @param startRecievedBytes the startRecievedBytes to set */ public void setStartRecievedBytes(long startRecievedBytes) { this.startRecievedBytes = startRecievedBytes; } /** * @return the startSentBytes */ public long getStartSentBytes() { return startSentBytes; } /** * @param startSentBytes the startSentBytes to set */ public void setStartSentBytes(long startSentBytes) { this.startSentBytes = startSentBytes; } }