package com.netsdk.demo.frame; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import com.sun.jna.Pointer; import com.netsdk.common.BorderEx; import com.netsdk.common.FunctionList; import com.netsdk.common.LoginPanel; import com.netsdk.common.Res; import com.netsdk.demo.module.LoginModule; import com.netsdk.demo.module.TalkModule; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.NetSDKLib.LLong; import com.netsdk.lib.ToolKits; /** * Talk Demo */ class TalkFrame extends JFrame { private static final long serialVersionUID = 1L; // device channel list private Vector chnlist = new Vector(); // device disconnect callback instance private static DisConnect disConnect = new DisConnect(); // talk frame (this) private static JFrame frame = new JFrame(); public TalkFrame() { setTitle(Res.string().getTalk()); setLayout(new BorderLayout()); pack(); setSize(400, 450); setResizable(false); setLocationRelativeTo(null); LoginModule.init(disConnect, null); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } loginPanel = new TalkLoginPanel(); talkPanel = new TalkPanel(); add(loginPanel, BorderLayout.CENTER); add(talkPanel, BorderLayout.SOUTH); loginPanel.addLoginBtnActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(loginPanel.checkLoginText()) { if(login()) { frame = ToolKits.getFrame(e); frame.setTitle(Res.string().getTalk() + " : " + Res.string().getOnline()); } } } }); loginPanel.addLogoutBtnActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.setTitle(Res.string().getTalk()); logout(); } }); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { TalkModule.stopTalk(); LoginModule.logout(); LoginModule.cleanup(); dispose(); SwingUtilities.invokeLater(new Runnable() { public void run() { FunctionList demo = new FunctionList(); demo.setVisible(true); } }); } }); } /////////////////function/////////////////// // device disconnect callback class // set it's instance by call CLIENT_Init, when device disconnect sdk will call it. private static class DisConnect implements NetSDKLib.fDisConnect { public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); SwingUtilities.invokeLater(new Runnable() { public void run() { frame.setTitle(Res.string().getTalk() + " : " + Res.string().getDisConnectReconnecting()); } }); } } public boolean login() { if(LoginModule.login(loginPanel.ipTextArea.getText(), Integer.parseInt(loginPanel.portTextArea.getText()), loginPanel.nameTextArea.getText(), new String(loginPanel.passwordTextArea.getPassword()))) { loginPanel.setButtonEnable(true); for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { chnlist.add(Res.string().getChannel() + " " + String.valueOf(i)); } talkPanel.talkEnable(); }else { JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); return false; } return true; } public void logout() { TalkModule.stopTalk(); LoginModule.logout(); loginPanel.setButtonEnable(false); chnlist.clear(); talkPanel.initTalkEnable(); } private class TalkPanel extends JPanel { private static final long serialVersionUID = 1L; public TalkPanel() { BorderEx.set(this, Res.string().getTalk(), 2); setLayout(new GridLayout(3, 1)); setPreferredSize(new Dimension(350, 220)); transmitPanel = new JPanel(); chnPanel = new JPanel(); talkBtnPanel = new JPanel(); transmitLabel = new JLabel(Res.string().getTransmitType()); transmitLabel.setPreferredSize(new Dimension(100, 25)); transmitComboBox = new JComboBox(); transmitComboBox.setPreferredSize(new Dimension(150, 25)); transmitPanel.add(transmitLabel); transmitPanel.add(transmitComboBox); chnlabel = new JLabel(Res.string().getTransmitChannel()); chnlabel.setPreferredSize(new Dimension(100, 25)); chnComboBox = new JComboBox(); chnComboBox.setPreferredSize(new Dimension(150, 25)); chnPanel.add(chnlabel); chnPanel.add(chnComboBox); startTalkBtn = new JButton(Res.string().getStartTalk()); startTalkBtn.setPreferredSize(new Dimension(100, 20)); JLabel nullLabel = new JLabel(" "); stopTalkBtn = new JButton(Res.string().getStopTalk()); stopTalkBtn.setPreferredSize(new Dimension(100, 20)); talkBtnPanel.add(startTalkBtn); talkBtnPanel.add(nullLabel); talkBtnPanel.add(stopTalkBtn); add(transmitPanel); add(chnPanel); add(talkBtnPanel); initTalkEnable(); startTalkBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(TalkModule.startTalk(transmitComboBox.getSelectedIndex(), chnComboBox.getSelectedIndex())) { setButtonEnable(false); }else { JOptionPane.showMessageDialog(null, Res.string().getTalkFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); } } }); stopTalkBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { TalkModule.stopTalk(); setButtonEnable(true); } }); transmitComboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { if (transmitComboBox.getSelectedIndex() == 1) { chnComboBox.setModel(new DefaultComboBoxModel(chnlist)); chnComboBox.setEnabled(true); }else { chnComboBox.setModel(new DefaultComboBoxModel()); chnComboBox.setEnabled(false); } } } }); } public void talkEnable() { String[] transmit = {Res.string().getLocalTransmitType(), Res.string().getRemoteTransmitType()}; transmitComboBox.setModel(new DefaultComboBoxModel(transmit)); setButtonEnable(true); } public void initTalkEnable() { chnComboBox.setModel(new DefaultComboBoxModel()); transmitComboBox.setModel(new DefaultComboBoxModel()); chnComboBox.setEnabled(false); transmitComboBox.setEnabled(false); startTalkBtn.setEnabled(false); stopTalkBtn.setEnabled(false); } private void setButtonEnable(boolean bln) { transmitComboBox.setEnabled(bln); if (bln && transmitComboBox.getSelectedIndex() == 1) { chnComboBox.setEnabled(true); }else { chnComboBox.setEnabled(false); } startTalkBtn.setEnabled(bln); stopTalkBtn.setEnabled(!bln); } private JPanel transmitPanel; private JPanel chnPanel; private JPanel talkBtnPanel; private JLabel transmitLabel; private JComboBox transmitComboBox; private JLabel chnlabel; private JComboBox chnComboBox; private JButton startTalkBtn; private JButton stopTalkBtn; } private class TalkLoginPanel extends LoginPanel { private static final long serialVersionUID = 1L; public TalkLoginPanel() { setLayout(new GridLayout(3, 1)); removeAll(); JPanel ipPanel = new JPanel(); JPanel userPanel = new JPanel(); JPanel btnPanel = new JPanel(); JLabel nullLabel = new JLabel(" "); JLabel nullLabel1 = new JLabel(" "); resetSize(); ipPanel.add(ipLabel); ipPanel.add(ipTextArea); ipPanel.add(portLabel); ipPanel.add(portTextArea); userPanel.add(nameLabel); userPanel.add(nameTextArea); userPanel.add(passwordLabel); userPanel.add(passwordTextArea); btnPanel.add(nullLabel); btnPanel.add(loginBtn); btnPanel.add(nullLabel1); btnPanel.add(logoutBtn); add(ipPanel); add(userPanel); add(btnPanel); } private void resetSize() { ipLabel.setPreferredSize(new Dimension(70, 20)); portLabel.setPreferredSize(new Dimension(70, 20)); nameLabel.setText(Res.string().getUserName()); nameLabel.setPreferredSize(new Dimension(70, 20)); passwordLabel.setPreferredSize(new Dimension(70, 20)); ipTextArea.setPreferredSize(new Dimension(90, 20)); portTextArea.setPreferredSize(new Dimension(90, 20)); nameTextArea.setPreferredSize(new Dimension(90, 20)); passwordTextArea.setPreferredSize(new Dimension(90, 20)); } } private TalkLoginPanel loginPanel; private TalkPanel talkPanel; } public class Talk { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { TalkFrame demo = new TalkFrame(); demo.setVisible(true); } }); } };