⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tapi3gui.java

📁 jtapi for telephone
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		                    new MessageBox("Answer error", "Cannot answer.", e).show();
                        }
                    }
                }.start();
            }
        });
		
		butHangUp.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                new Thread() {
                    public void run() {
		                try {
		                    Connection connection = getSelectedConnection();
		                    if(connection == null) return;
		                    logger.debug("HangUp for connection in state " + TapiUtil.getConnectionStateName(connection));
		                    TerminalConnection terminalConnection = getSelectedTerminalConnection();
		                    int state = TapiUtil.getTerminalConnectionState(terminalConnection);
		                    if(state == CallControlTerminalConnection.RINGING) {
                                terminalConnection.answer();
                                synchronized(terminalConnection) {
                                    terminalConnection.wait(3000);
                                    state = TapiUtil.getTerminalConnectionState(terminalConnection);
                                    if(state != CallControlTerminalConnection.TALKING) {
                                        JOptionPane.showMessageDialog(tapi3Frame, "Cannot reject the call.");
                                        return;
                                    }
                                }
		                    }
		                    Thread.sleep(500);
	                        connection.disconnect();
		                } catch (Exception e) {
		                    logger.error("Cannot disconnect.", e);
		                    new MessageBox("HangUp error", "Cannot disconnect.", e).show();
		                }
                    }
                }.start();
            }
        });

		butHold.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                new Thread() {
                    public void run() {
		                try {
		                    TerminalConnection terminalConnection = getSelectedTerminalConnection();
		                    if(terminalConnection != null && terminalConnection instanceof CallControlTerminalConnection) {
		                        CallControlTerminalConnection ccTermConn = (CallControlTerminalConnection)terminalConnection;
		                        ccTermConn.hold();
		                    }
		                } catch (Exception e) {
		                    logger.error("Cannot hold.", e);
		                    new MessageBox("Hold error", "Cannot hold.", e).show();
		                }
                    }
                }.start();
            }
        });

		butUnHold.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                new Thread() {
                    public void run() {
		                try {
		                    TerminalConnection terminalConnection = getSelectedTerminalConnection();
		                    if(terminalConnection != null && terminalConnection instanceof CallControlTerminalConnection) {
		                        CallControlTerminalConnection ccTermConn = (CallControlTerminalConnection)terminalConnection;
		                        ccTermConn.unhold();
		                    }
		                } catch (Exception e) {
		                    logger.error("Cannot unhold.", e);
		                    new MessageBox("Unhold error", "Cannot unhold.", e).show();
		                }
                    }
                }.start();
            }
        });

		txtCalledNumber.getDocument().addDocumentListener(new DocumentListener() {
            public void changedUpdate(DocumentEvent e) {
                updateButCall();
            }
            public void insertUpdate(DocumentEvent e) {
                updateButCall();
            }
            public void removeUpdate(DocumentEvent e) {
                updateButCall();
            }            
        });
		
		txtDTMF.getDocument().addDocumentListener(new DocumentListener() {
            public void changedUpdate(DocumentEvent e) {
                updateButDTMF();
            }
            public void insertUpdate(DocumentEvent e) {
                updateButDTMF();
            }
            public void removeUpdate(DocumentEvent e) {
                updateButDTMF();
            }            
        });
		
		lstCalls.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                updateAllControls();            
            }
        });
		lstCalls.getModel().addListDataListener(new ListDataListener() {
            public void contentsChanged(ListDataEvent e) {
                updateSelection();
            }
            public void intervalAdded(ListDataEvent e) {
                updateSelection();
            }
            public void intervalRemoved(ListDataEvent e) {
            	// Nothing to do here. The SelectionListener will call updateAllControls() if needed.
            }
            private void updateSelection() {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        if(lstCalls.getModel().getSize() == 1) {
                            lstCalls.setSelectedIndex(0);
                        }
                        updateAllControls();
                    }
                });
            }
        });		
	    
	    
	    tapi3Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    tapi3Frame.pack();
    }
    
	private void updateAllControls() {
	    updateButCall();
	    updateButDTMF();
	    updateCallControls();
	}
	
    private void updateButCall() {
        int len = txtCalledNumber.getText().length();
        boolean enabled = (len > 0);
        enabled &= (lstCalls.getModel().getSize() == 0); 
        butCall.setEnabled(enabled);
    }
    
    private void updateButDTMF() {
        int len = txtDTMF.getText().length();
        boolean enabled = (len > 0);
        TerminalConnection terminalConnection;
		try {
			terminalConnection = getSelectedTerminalConnection();
		} catch (RuntimeException e) {
            new MessageBox("DTMF error", "Cannot send digits.", e).show();
			return;
		}
		int ccTermConnState = (terminalConnection != null) ? 
                		TapiUtil.getTerminalConnectionState(terminalConnection) : CallControlTerminalConnection.UNKNOWN;        
        butDTMF.setEnabled(enabled & ccTermConnState == CallControlTerminalConnection.TALKING);
    }
    
    private void updateCallControls() {
        Connection connection = getSelectedConnection();
        TerminalConnection terminalConnection = getSelectedTerminalConnection();
        int connState = (connection != null) ? connection.getState() : Connection.UNKNOWN;
        int ccTermConnState = (terminalConnection != null) ? 
                		TapiUtil.getTerminalConnectionState(terminalConnection) : CallControlTerminalConnection.UNKNOWN;
        butAnswer.setEnabled(ccTermConnState == CallControlTerminalConnection.RINGING && connState == Connection.ALERTING);
        butHangUp.setEnabled(
                connState == Connection.CONNECTED || 
                connState == Connection.ALERTING || 
                connState == Connection.INPROGRESS || 
                connState == Connection.FAILED);
        boolean holdEnabled = (ccTermConnState == CallControlTerminalConnection.TALKING);
        // TODO - this should be used only for swapOnHold
        // allow hold only if there is a terminalConnection in state HELD
        if(holdEnabled) {
        	holdEnabled = false;
        	for(int i=0; i<obsListener.size(); i++) {
                if(i != lstCalls.getSelectedIndex()) {
                    TerminalConnection heldTerminalConnection = 
                        ((CallListenerObserver.Item)obsListener.get(i)).getTerminalConnection();
                    int currState = TapiUtil.getTerminalConnectionState(heldTerminalConnection);
                    if(currState == CallControlTerminalConnection.HELD) {
                    	holdEnabled = true;
                    	break;
                    }
                }
        	}
        }
        butHold.setEnabled(holdEnabled);

        boolean unholdEnabled = (ccTermConnState == CallControlTerminalConnection.HELD);
        // TODO - this should be used only for swapOnHold
        // allow unhold only if there is a terminalConnection in state TALKING
        if(unholdEnabled) {
        	unholdEnabled = false;
        	for(int i=0; i<obsListener.size(); i++) {
                if(i != lstCalls.getSelectedIndex()) {
                    TerminalConnection talkingTerminalConnection = 
                        ((CallListenerObserver.Item)obsListener.get(i)).getTerminalConnection();
                    int currState = TapiUtil.getTerminalConnectionState(talkingTerminalConnection);
                    if(currState == CallControlTerminalConnection.TALKING) {
                    	unholdEnabled = true;
                    	break;
                    }
                }
        	}
        }
        butUnHold.setEnabled(unholdEnabled);
    }
    
	private String getCalledNumber() {
	    return txtCalledNumber.getText();
	}
	
	private TerminalConnection getSelectedTerminalConnection() {
	    TerminalConnection terminalConnection = null;
	    CallListenerObserver.Item item = (CallListenerObserver.Item)lstCalls.getSelectedValue();
	    if(item != null) {
	        terminalConnection = item.getTerminalConnection();
	    }
	    return terminalConnection;
	}
	
	private Connection getSelectedConnection() {
	    Connection connection = null;
	    if(obsListener.getSize() > 0) {
		    CallListenerObserver.Item item = (CallListenerObserver.Item)lstCalls.getSelectedValue();
		    if(item != null) {
		        connection = item.getConnection();
		    }
	    }
	    return connection;
	}
	
    private void call(String toAddr) throws Tapi3GuiException {
		try {
            logger.debug("Attempting to create call...");
            Call call = provider.createCall();
            
            logger.debug("Attempting to get terminals for an address...");
            Terminal[] terminals = address.getTerminals();

            logger.debug("Attempting to connect call...");
            call.connect(terminals[0], address, toAddr);

            logger.debug("Attempting to get call connections...");
            Connection cons[] = call.getConnections();
            logger.debug(" success: " + cons.length + " connections.");            
        } catch (Exception e) {
            throw new Tapi3GuiException("Call failed.", e);
        }
    }
    
	public void addLogEntry(final String message) {
	    SwingUtilities.invokeLater(new Runnable() {
            public void run() {
        	    if(txtTrace != null && txtTrace.isShowing()) {
        		    txtTrace.append(message);
        	    }
            }
        });
	}
	
    public static void main(String[] args) {
        Tapi3Gui gui = new Tapi3Gui();
        try {
            gui.initTapi3();
        } catch (Tapi3GuiException e) {
            logger.error("", e);
            new MessageBox("Tapi3 initialization error", "Tapi3 initialization failed.", e).show();
            System.exit(-1);
        }
        gui.initGui();
        gui.tapi3Frame.show();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -