📄 javaphoneframe.java
字号:
/* //////////////////////////////////////////////////////////////////////////
JavaPhoneFrame.java
-------------------------------------------------------------------------
Copyright (c) 2003
Cisco Systems, Inc.
All rights reserved.
Confidential restricted material. This work contains confidential trade
secrets of Cisco Systems, Inc. Use, examination, copying, transfer and/or
disclosure to others are prohibited, except with the express written
agreement of Cisco Systems, Inc.
The JavaPhone sample is intended to serve as an example of opening an
AgentMode connection to CTIOS for a programmer using the CTIOS JavaCIL
to develop a client application such as an Agent Desktop.
This sample illustrates how to connect to the server, login an agent,
make calls, set a call variable, recieve events and look at their
contents, and other operations.
This is only a sample and is NOT intended to be a production quality
application and will not be supported as such. It is NOT guaranteed to
be bug free. It is merely provided as a guide for a programmer to see
how to establish a AgentMode connection, control an Agent, receive events,
and manipulate Session objects.
///////////////////////////////////////////////////////////////////////// */
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
import com.cisco.cti.ctios.cil.*;
import com.cisco.cti.ctios.util.*;
///////////////////////////////////////////////////////////////////////////
/**
* The JavaPhoneFrame serves as the main GUI frame and the central point in
* the application for storing information, receiving events, etc.
*/
///////////////////////////////////////////////////////////////////////////
public class JavaPhoneFrame extends Frame implements CtiOs_IKeywordIDs,
CtiOs_Enums.CilError,
CtiOs_Enums.EventID,
CtiOs_Enums.AgentState,
CtiOs_Enums.SubscriberList
{
public static final int TRACE_MASK_ALWAYS = Logger.TRACE_MASK_ALWAYS;
protected CtiOsSession m_ctiSession; // Reference to CTI OS Session
protected Agent m_ctiAgent; // Reference to object for our Agent
protected String m_sAgentID; // Agent's ID
protected String m_sAgentInstrument; // Instrument agent is logged in to
protected String m_sAgentExtension; // Agent's extension (often same as instrument)
protected String m_sAgentPassword; // Agent password
protected String m_sPositionID; // Required on some ACDs
protected EventSink m_eventSink; // Class to receive CTI events from CtiOsSession
protected LogManager m_Log = LogManager.Instance(); // Tracing Mechanism
protected String m_sHostA; // Side A server
protected String m_sHostB; // Side B server
protected int m_iPortA; // Side A port
protected int m_iPortB; // Side B port
protected int m_iHeartBeat; // Heartbeat interval for connection failure detection
protected int m_iPeripheralID; // PeripheralID of ACD we're loggin in to
protected boolean m_bSessionConnected; // Flag indicating our connection state
protected boolean m_bLoginInProgress; // Flag indicating if a Login is in progress
protected boolean m_bAutoAnswer; // Auto answer flag
protected String m_cs; // String used as a Synchronization object
protected boolean fComponentsAdjusted = false; // Used for addNotify check.
// Create all of the GUI components... buttons, labels, edit fields, etc.
javax.swing.border.TitledBorder sessionBorder = new javax.swing.border.TitledBorder("CTIOS Session");
javax.swing.JPanel sessionPanel = new javax.swing.JPanel();
java.awt.Button m_btnConnect = new java.awt.Button();
java.awt.Button m_btnDisconnect = new java.awt.Button();
java.awt.Label label1 = new java.awt.Label();
java.awt.TextField m_edtHostA = new java.awt.TextField();
java.awt.Label label2 = new java.awt.Label();
java.awt.TextField m_edtPortA = new java.awt.TextField();
java.awt.Label label3 = new java.awt.Label();
java.awt.TextField m_edtHostB = new java.awt.TextField();
java.awt.Label label4 = new java.awt.Label();
java.awt.TextField m_edtPortB = new java.awt.TextField();
javax.swing.border.TitledBorder agentControlBorder = new javax.swing.border.TitledBorder("Agent");
javax.swing.JPanel agentControlPanel = new javax.swing.JPanel();
java.awt.Button m_btnLogin = new java.awt.Button();
java.awt.Button m_btnLogout = new java.awt.Button();
java.awt.Button m_btnReady = new java.awt.Button();
java.awt.Button m_btnNotReady = new java.awt.Button();
java.awt.Label label5 = new java.awt.Label();
java.awt.Label label6 = new java.awt.Label();
java.awt.TextField m_edtAgentID = new java.awt.TextField();
java.awt.TextField m_edtPassword = new java.awt.TextField();
java.awt.Label label7 = new java.awt.Label();
java.awt.TextField m_edtInstrument = new java.awt.TextField();
java.awt.Label label8 = new java.awt.Label();
java.awt.TextField m_edtPeripheralID = new java.awt.TextField();
javax.swing.border.TitledBorder callControlBorder = new javax.swing.border.TitledBorder("Call");
javax.swing.JPanel callControlPanel = new javax.swing.JPanel();
java.awt.Label label9 = new java.awt.Label();
java.awt.TextField m_edtPhoneNumber = new java.awt.TextField();
java.awt.Label label10 = new java.awt.Label();
java.awt.TextField m_edtCallVariable1 = new java.awt.TextField();
java.awt.Button m_btnMakeCall = new java.awt.Button();
java.awt.Button m_btnAnswer = new java.awt.Button();
java.awt.Button m_btnRelease = new java.awt.Button();
java.awt.Button m_btnHold = new java.awt.Button();
java.awt.Button m_btnRetrieve = new java.awt.Button();
java.awt.Button m_btnCCConference = new java.awt.Button();
java.awt.Button m_btnConference = new java.awt.Button();
java.awt.Button m_btnSSConference = new java.awt.Button();
java.awt.Button m_btnCCTransfer = new java.awt.Button();
java.awt.Button m_btnTransfer = new java.awt.Button();
java.awt.Button m_btnSSTransfer = new java.awt.Button();
java.awt.Button m_btnGetData = new java.awt.Button();
java.awt.Button m_btnSetData = new java.awt.Button();
java.awt.Button m_btnGetContext = new java.awt.Button();
java.awt.Label label11 = new java.awt.Label();
java.awt.TextField m_edtCallID = new java.awt.TextField();
javax.swing.border.TitledBorder statusBorder = new javax.swing.border.TitledBorder("Status");
javax.swing.JPanel statusPanel = new javax.swing.JPanel();
java.awt.Label label12 = new java.awt.Label();
java.awt.TextField m_edtConnection = new java.awt.TextField();
java.awt.Label label17 = new java.awt.Label();
java.awt.TextField m_edtAgentState = new java.awt.TextField();
javax.swing.border.TitledBorder logBorder = new javax.swing.border.TitledBorder("Log");
javax.swing.JPanel logPanel = new javax.swing.JPanel();
java.awt.Label label19 = new java.awt.Label();
java.awt.Button m_btnClearLog = new java.awt.Button();
java.awt.TextArea m_edtLogWindow = new java.awt.TextArea("",0,0,TextArea.SCROLLBARS_VERTICAL_ONLY);
///////////////////////////////////////////////////////////////////////////
/**
* Constructor for the main GUI Frame. Creates all of the GUI objects,
* a CTI OS Session, and registers the EventListener to receive events
* from the Session.
*/
///////////////////////////////////////////////////////////////////////////
public JavaPhoneFrame()
{
// Initialize the object we're going to use for thread synchronization
m_cs = "JavaPhoneFrame_cs_" + this.hashCode();
// UI Layout
setLayout(null);
setBackground(java.awt.Color.lightGray);
setSize(709,642);
setVisible(false);
// CTIOS Session Panel
sessionPanel.setName("CTIOS Session");
sessionPanel.setLayout(null);
add(sessionPanel);
sessionPanel.setBounds(0,0,324,144);
m_btnConnect.setLabel("Connect");
sessionPanel.add(m_btnConnect);
m_btnConnect.setBounds(12,37,84,24);
m_btnDisconnect.setLabel("Disconnect");
sessionPanel.add(m_btnDisconnect);
m_btnDisconnect.setBounds(12,85,84,24);
label1.setText("HostA");
sessionPanel.add(label1);
label1.setBounds(108,25,48,24);
sessionPanel.add(m_edtHostA);
m_edtHostA.setBounds(168,25,132,24);
label2.setText("PortA");
sessionPanel.add(label2);
label2.setBounds(108,49,48,24);
sessionPanel.add(m_edtPortA);
m_edtPortA.setBounds(168,49,132,24);
label3.setText("HostB");
sessionPanel.add(label3);
label3.setBounds(108,73,48,24);
sessionPanel.add(m_edtHostB);
m_edtHostB.setBounds(168,73,132,24);
label4.setText("PortB");
sessionPanel.add(label4);
label4.setBounds(108,97,48,24);
sessionPanel.add(m_edtPortB);
m_edtPortB.setBounds(168,97,132,24);
// Agent Panel
agentControlPanel.setName("Agent");
agentControlPanel.setLayout(null);
add(agentControlPanel);
agentControlPanel.setBounds(0,144,324,180);
m_btnLogin.setLabel("Login");
agentControlPanel.add(m_btnLogin);
m_btnLogin.setBounds(12,25,84,24);
m_btnLogout.setLabel("Logout");
agentControlPanel.add(m_btnLogout);
m_btnLogout.setBounds(12,61,84,24);
m_btnReady.setLabel("Ready");
agentControlPanel.add(m_btnReady);
m_btnReady.setBounds(12,97,84,24);
m_btnNotReady.setLabel("Not Ready");
agentControlPanel.add(m_btnNotReady);
m_btnNotReady.setBounds(12,133,84,24);
label5.setText("Agent ID");
label5.setAlignment(java.awt.Label.RIGHT);
agentControlPanel.add(label5);
label5.setBounds(96,25,84,24);
label6.setText("Password");
label6.setAlignment(java.awt.Label.RIGHT);
agentControlPanel.add(label6);
label6.setBounds(96,61,84,24);
agentControlPanel.add(m_edtAgentID);
m_edtAgentID.setBounds(192,25,108,24);
agentControlPanel.add(m_edtPassword);
m_edtPassword.setBounds(192,61,108,24);
label7.setText("Instrument");
label7.setAlignment(java.awt.Label.RIGHT);
agentControlPanel.add(label7);
label7.setBounds(96,97,84,24);
agentControlPanel.add(m_edtInstrument);
m_edtInstrument.setBounds(192,97,108,24);
label8.setText("Peripheral ID");
label8.setAlignment(java.awt.Label.RIGHT);
agentControlPanel.add(label8);
label8.setBounds(96,133,84,24);
agentControlPanel.add(m_edtPeripheralID);
m_edtPeripheralID.setBounds(192,133,108,24);
// Call panel
callControlPanel.setName("Call");
callControlPanel.setLayout(null);
add(callControlPanel);
callControlPanel.setBounds(0,324,324,312);
label9.setText("Phone number to dial");
label9.setAlignment(java.awt.Label.RIGHT);
callControlPanel.add(label9);
label9.setBounds(48,37,132,12);
callControlPanel.add(m_edtPhoneNumber);
m_edtPhoneNumber.setBounds(192,25,108,24);
label10.setText("Call Variable 1");
label10.setAlignment(java.awt.Label.RIGHT);
callControlPanel.add(label10);
label10.setBounds(48,61,135,10);
callControlPanel.add(m_edtCallVariable1);
m_edtCallVariable1.setBounds(192,49,108,24);
m_btnMakeCall.setLabel("Make Call");
callControlPanel.add(m_btnMakeCall);
m_btnMakeCall.setBounds(12,85,84,24);
m_btnAnswer.setLabel("Answer");
callControlPanel.add(m_btnAnswer);
m_btnAnswer.setBounds(108,85,84,24);
m_btnRelease.setLabel("Release");
callControlPanel.add(m_btnRelease);
m_btnRelease.setBounds(204,85,84,24);
m_btnHold.setLabel("Hold");
callControlPanel.add(m_btnHold);
m_btnHold.setBounds(12,121,84,24);
m_btnRetrieve.setLabel("Retrieve");
callControlPanel.add(m_btnRetrieve);
m_btnRetrieve.setBounds(108,121,84,24);
m_btnCCConference.setLabel("CC Conf");
callControlPanel.add(m_btnCCConference);
m_btnCCConference.setBounds(12,157,84,24);
m_btnConference.setLabel("Conference");
callControlPanel.add(m_btnConference);
m_btnConference.setBounds(108,157,84,24);
m_btnSSConference.setLabel("SS Conf");
callControlPanel.add(m_btnSSConference);
m_btnSSConference.setBounds(204,157,84,24);
m_btnCCTransfer.setLabel("CC Trans");
callControlPanel.add(m_btnCCTransfer);
m_btnCCTransfer.setBounds(12,193,84,24);
m_btnTransfer.setLabel("Transfer");
callControlPanel.add(m_btnTransfer);
m_btnTransfer.setBounds(108,193,84,24);
m_btnSSTransfer.setLabel("SS Trans");
callControlPanel.add(m_btnSSTransfer);
m_btnSSTransfer.setBounds(204,193,84,24);
m_btnGetData.setLabel("Get Data");
callControlPanel.add(m_btnGetData);
m_btnGetData.setBounds(12,229,84,24);
m_btnSetData.setLabel("Set Data");
callControlPanel.add(m_btnSetData);
m_btnSetData.setBounds(108,229,84,24);
m_btnGetContext.setLabel("Get Context");
callControlPanel.add(m_btnGetContext);
m_btnGetContext.setBounds(204,229,84,24);
label11.setText("Current Call (uid)");
callControlPanel.add(label11);
label11.setBounds(48,265,100,24);
callControlPanel.add(m_edtCallID);
m_edtCallID.setBounds(156,265,144,24);
// Status panel
statusPanel.setName("Status");
statusPanel.setLayout(null);
add(statusPanel);
statusPanel.setBounds(324,0,384,72);
label12.setText("Connection");
statusPanel.add(label12);
label12.setBounds(12,25,72,24);
statusPanel.add(m_edtConnection);
m_edtConnection.setBounds(84,25,96,24);
label17.setText("Agent State");
statusPanel.add(label17);
label17.setBounds(192,25,72,24);
statusPanel.add(m_edtAgentState);
m_edtAgentState.setBounds(264,25,100,24);
// Log panel
logPanel.setName("Log Window");
logPanel.setLayout(null);
add(logPanel);
logPanel.setBounds(324,72,384,564);
m_btnClearLog.setLabel("Clear Log");
logPanel.add(m_btnClearLog);
m_btnClearLog.setBounds(155,517,72,24);
logPanel.add(m_edtLogWindow);
m_edtLogWindow.setBounds(12,22,360,480);
String sVer = CtiOs_VersionInfo.CTI_RELEASE_BASE + " Java Phone Sample (" +
CtiOs_VersionInfo.MajorVersion() +
"." + CtiOs_VersionInfo.MinorVersion() +
"." + String.valueOf(CtiOs_VersionInfo.CTI_RELNUM_SVCPACK) +
") Build " + CtiOs_VersionInfo.BuildNumber();
setTitle(sVer);
setResizable(false);
// Listeners
JavaPhoneWindow aJavaPhoneWindow = new JavaPhoneWindow();
this.addWindowListener(aJavaPhoneWindow);
JavaPhoneMouse aJavaPhoneMouse = new JavaPhoneMouse();
m_btnConnect.addMouseListener(aJavaPhoneMouse);
m_btnDisconnect.addMouseListener(aJavaPhoneMouse);
m_btnLogin.addMouseListener(aJavaPhoneMouse);
m_btnLogout.addMouseListener(aJavaPhoneMouse);
m_btnReady.addMouseListener(aJavaPhoneMouse);
m_btnNotReady.addMouseListener(aJavaPhoneMouse);
m_btnMakeCall.addMouseListener(aJavaPhoneMouse);
m_btnAnswer.addMouseListener(aJavaPhoneMouse);
m_btnRelease.addMouseListener(aJavaPhoneMouse);
m_btnHold.addMouseListener(aJavaPhoneMouse);
m_btnRetrieve.addMouseListener(aJavaPhoneMouse);
m_btnCCConference.addMouseListener(aJavaPhoneMouse);
m_btnConference.addMouseListener(aJavaPhoneMouse);
m_btnSSConference.addMouseListener(aJavaPhoneMouse);
m_btnCCTransfer.addMouseListener(aJavaPhoneMouse);
m_btnTransfer.addMouseListener(aJavaPhoneMouse);
m_btnSSTransfer.addMouseListener(aJavaPhoneMouse);
m_btnGetData.addMouseListener(aJavaPhoneMouse);
m_btnSetData.addMouseListener(aJavaPhoneMouse);
m_btnGetContext.addMouseListener(aJavaPhoneMouse);
m_btnClearLog.addMouseListener(aJavaPhoneMouse);
sessionPanel.setBorder(sessionBorder);
agentControlPanel.setBorder(agentControlBorder);
callControlPanel.setBorder(callControlBorder);
statusPanel.setBorder(statusBorder);
logPanel.setBorder(logBorder);
// CTIOS related initialization.
Initialize();
// Create a CTI OS Session object for us to use to connect
// the the server.
m_ctiSession = new CtiOsSession();
if (m_ctiSession == null)
{
m_Log.Trace(Logger.TRACE_MASK_CRITICAL,
"JavaPhoneFrame.constructor: Failed to create CtiOsSession.");
System.exit(1);
}
// Set our Agent object to null until we're ready to login
m_ctiAgent = null;
// Create an instance of our class to handle CTI events
m_eventSink = new EventSink(this);
// Subscribe our EventSink object to the Session "All Events" list
if (m_ctiSession.AddEventListener(m_eventSink, eAllInOneList) < 0)
{
m_Log.Trace(Logger.TRACE_MASK_CRITICAL,
"JavaPhoneFrame.constructor: Failed to add "+
"subscriber for AllInOne events.");
System.exit(1);
}
} // Constructor
///////////////////////////////////////////////////////////////////////////
/**
* Shows or hides the component depending on the boolean flag b.
* @param b if true, show the component; otherwise, hide the component.
* @see java.awt.Component#isVisible
*/
///////////////////////////////////////////////////////////////////////////
public void setVisible(boolean b)
{
if(b)
{
setLocation(50, 50);
}
super.setVisible(b);
} // setVisible
///////////////////////////////////////////////////////////////////////////
/**
* Main entry point for the application
*/
///////////////////////////////////////////////////////////////////////////
static public void main(String args[])
{
LogWrapper lwConsole = null;
LogWrapper lwLogFile = null;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -