📄 tapi3gui.java
字号:
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 + -