Blogs

Cisco CTI OS .NET Toolkit Release 8.5(2) introduces support for application development using Microsoft Visual Studio .NET 2010 and the .NET 3.5 framework. Existing .NET 2.0 controls do not need to be modified. Additionally, the CTI .NET CIL supports Visual Studio .NET 2010.

Note that Visual Studio 2010 by default uses Framework 4.0 You must change the framework for your CTIOS 8.5(2) .NET Cil project to use the .NET 3.5 framework.

UCCE 8.5(2) Release Notes

 

This main.java sample demonstrates creating a filter mode application to receive skill group statistics.

Here's the source code:

import com.cisco.cti.ctios.cil.CtiOsSession;
import com.cisco.cti.ctios.cil.CtiOs_Enums;
import com.cisco.cti.ctios.util.CtiOs_IKeywordIDs;
import com.cisco.cti.ctios.cil.CtiOs_Enums.SubscriberList;
import com.cisco.cti.ctios.cil.Arguments;
import com.cisco.cti.ctios.util.CtiOs_IKeywordIDs;


import com.cisco.cti.ctios.cil.IGenericEvents;

public class Main implements CtiOs_IKeywordIDs,
CtiOs_Enums.CilError,
CtiOs_Enums.EventID,
CtiOs_Enums.AgentState,
CtiOs_Enums.ButtonEnablement
{

// connection parameter
final String CTIOSA = "localhost";
final int PORTA = 42028;
final String CTIOSB = "localhost";
final int PORTB = 42028;
final int HEARTBEAT = 5;

// skill group parameter
final String SKILL_GRP_Num = "1001"; // use your configured skill group number
final String PERI__ID = "5000"; // use your configured peripheralid

private CtiOsSession session = null;



// main() method execution starts from here
public static void main(String[] args) {

// create and initialise Main class obj
Main testRun = new Main();
}
/** Creates a new instance of Main */
public Main() {
// create new CTIOS session
session = new CtiOsSession();

// create CTI events listner
CTIEventListner eventListner = new CTIEventListner();
// eventListner = new EventSink();

// add event listner to ctios session.
// Here we register to receive agent and session events; therefore,
// in the AddEventListener() method you must use as parameters the field
// CtiOs_Enums.SubscriberList.eAgentList and CtiOs_Enums.SubscriberList.eSessionList.
// Or you can use the CtiOs_Enums.SubscriberList.eAllInOneList.
session.AddEventListener(eventListner,SubscriberList.eAllInOneList);

// set up values of connection parameter
Arguments connectionParam = new Arguments();
connectionParam.SetValue(CtiOs_IKeywordIDs.CTIOS_CTIOSA, CTIOSA);
connectionParam.SetValue(CtiOs_IKeywordIDs.CTIOS_PORTA, PORTA);
connectionParam.SetValue(CtiOs_IKeywordIDs.CTIOS_CTIOSB, CTIOSemoticon;
connectionParam.SetValue(CtiOs_IKeywordIDs.CTIOS_PORTB, PORTemoticon;
connectionParam.SetValue(CtiOs_IKeywordIDs.CTIOS_HEARTBEAT, HEARTBEAT);

// connect to server
System.out.println("Connecting to server..");
System.out.println("Connection parameters are: "+ connectionParam.toString());
int returnCode = session.Connect(connectionParam);
System.out.println("return code for connect is: " +returnCode);

//Must wait for on connection event to set message filter


}





class CTIEventListner implements IGenericEvents, CtiOs_IKeywordIDs,
CtiOs_Enums.CilError,
CtiOs_Enums.EventID,
CtiOs_Enums.AgentState,
CtiOs_Enums.ButtonEnablement
{
public void SetFilter(){
// set message filter parameter
int returnCode;

// These are some filters I tried. Try your own.
//String filter = S_FILTERTARGET + "=" + eOnNewSkillGroupStatisticsEvent + "," + eAgentStateEvent;
//String filter = S_MESSAGEID + "=" + eAgentStateEvent+","+eOnNewAgentStatisticsEvent;
//String filter = S_MESSAGEID + "=*" ;
//filter = filter + ";"+ S_AGENTID + "=" + "5000";
//filter = filter + ";" + S_FILTERTARGET + "=" + "SkillGroupStats";

// Here's the actual filter for SkillGroupStats
String filter = S_FILTERTARGET + "=" + "SkillGroupStats";

Arguments eventFilterParam = new Arguments();
eventFilterParam.SetValue(CtiOs_IKeywordIDs.CTIOS_FILTER, filter);

// set message filter
System.out.println("Setting message filter..");
System.out.println("Filter parameters are: " +eventFilterParam);
returnCode = session.SetMessageFilter(eventFilterParam);
System.out.println("Set Message Filter rc = " + returnCode);

// set up skill group and peripheral arguments
Arguments skillGrpParam = new Arguments();
skillGrpParam.SetValue(CtiOs_IKeywordIDs.CTIOS_SKILLGROUPNUMBER, SKILL_GRP_Num);
skillGrpParam.SetValue(CtiOs_IKeywordIDs.CTIOS_PERIPHERALID, PERI__ID);

//Enable skill group statistics
System.out.println("Enabling skill group statics..");
System.out.println("Skill group parameters are: " +skillGrpParam.toString());
returnCode = session.EnableSkillGroupStatistics(skillGrpParam);
System.out.println("Enable Skill Group Statistics rc = " + returnCode);
}

// this is the event handler we register to handle events
public void OnEvent(int iEventID, Arguments arguments) {
switch (iEventID) {
case eOnConnection:
System.out.println("**eOnConnection event received");
SetFilter();
break;
case eOnConnectionFailure:
System.out.println("**eOnConnectionFailure event received");
break;
case eOnNewSkillGroupStatisticsEvent:
System.out.println("***eOnNewSkillGroupStatisticsEvent event received");
System.out.println("Skill group info: "+arguments.toString());
System.out.println("PeripheralID: "+ arguments.GetValueString(CtiOs_IKeywordIDs.CTIOS_PERIPHERALID));
System.out.println("AgentsNotReady: "+ arguments.GetValueString(CtiOs_IKeywordIDs.CTIOS_AGENTSNOTREADY));
System.out.println("AgentsNotReady: "+ arguments.GetValueString("AgentsNotReady"));
System.out.println("SkillGroupID: "+ arguments.GetValueString("SkillGroupID"));
System.out.println("TimerInterval: "+ arguments.GetValueString("TimerInterval"));
System.out.println("Statistics: " + arguments.GetValueArray("Statistics"));
Arguments args = arguments.GetValueArray("Statistics");
System.out.println("Statistics: " + args.toString());
System.out.println("AgentsNotReady: " + args.GetValueString("AgentsNotReady"));
break;
case eAgentStateEvent:
System.out.println("***eAgentStateEvent event received");
System.out.println("AgentStateInfo: "+arguments.toString());
break;

case eOnHeartbeat:
System.out.println("HeartBeat event received");
break;
default:
System.out.println("***Unfiltered event received");
System.out.println("Event arguments: " + arguments.toString());

}

}


}

} // Class Main


Here's the output:

Connecting to server..
Connection parameters are: (CtiOsA:localhost CtiOsB:localhost PortA:42028 PortB:
42028 Heartbeat:5)
return code for connect is: 1
***Unfiltered event received
Event arguments: (SystemEventID:15 FailureCode:10 StatusBarMessageemoticonffline)
**eOnConnection event received
Setting message filter..
Filter parameters are: (Filter:FilterTarget=SkillGroupStats)
Set Message Filter rc = 1
Enabling skill group statics..
Skill group parameters are: (PeripheralID:5000 SkillGroupNumber:1001)
Enable Skill Group Statistics rc = 1
***Unfiltered event received
Event arguments: (EventTime:0 ConnectionMode:2)
***eOnNewSkillGroupStatisticsEvent event received
Skill group info: (InvokeID:does not exist PeripheralID:5000 SkillGroupNumber:10
01 SkillGroupID:4294967295 UniqueObjectID:skillgroup.5000.1001 MessageID:eOnNewS
killGroupStatisticsEvent StatisticsemoticonHandledCallsToday:0 HandledCallsTalkTimeTod
ay:0 AgentsLoggedOn:0 AgentsNotReady:0 AgentsReady:0 AgentsTalkingIn:0 AgentsTal
kingOut:0 AgentsTalkingOther:0 AgentsWorkNotReady:0 AgentsWorkReady:0 AgentsBusy
Other:0 AgentsReserved:0 AgentsHold:0 RouterCallsQNow:0 LongestRouterCallQNow:0)
TimerInterval:10)
PeripheralID: 5000
AgentsNotReady: null
AgentsNotReady: null
SkillGroupID: 4294967295
TimerInterval: 10
Statistics: (HandledCallsToday:0 HandledCallsTalkTimeToday:0 AgentsLoggedOn:0 Ag
entsNotReady:0 AgentsReady:0 AgentsTalkingIn:0 AgentsTalkingOut:0 AgentsTalkingO
ther:0 AgentsWorkNotReady:0 AgentsWorkReady:0 AgentsBusyOther:0 AgentsReserved:0
AgentsHold:0 RouterCallsQNow:0 LongestRouterCallQNow:0)
Statistics: (HandledCallsToday:0 HandledCallsTalkTimeToday:0 AgentsLoggedOn:0 Ag
entsNotReady:0 AgentsReady:0 AgentsTalkingIn:0 AgentsTalkingOut:0 AgentsTalkingO
ther:0 AgentsWorkNotReady:0 AgentsWorkReady:0 AgentsBusyOther:0 AgentsReserved:0
AgentsHold:0 RouterCallsQNow:0 LongestRouterCallQNow:0)
AgentsNotReady: 0
HeartBeat event received
Terminate batch job (Y/N)? y

C:\>

 



Cisco Developer Network will be presenting a CDN Developer Track at Cisco Live! London the week of January 31, 2011.

We are presenting technical sessions which highlight Application Programming interfaces (APIs) and Software Developer Kits (SDKs) for Cisco technologies such as Unified Communications, IOS, and Access Routing Technologies ¿ including the new Cisco Cius Application Development SDK ! You¿ll get technical insight into the available interfaces, hear from subject matter experts and learn about the benefits of becoming a Cisco developer.

Learn more about the new Cisco Live track for the Developer Network Program!

http://www.ciscolive.com/europe/attendees/education/dnp

 

It is important if you are implementing a filter mode application that you include End Call events in your filter.

The end call events are recognized by the CIL (Client Interface Library) to know to release the call object. If you don't include the end call event in your filter, the CIL will not see that event (it will not be sent to the Client by the CTIOS Server) and consequently the CIL will not know to release the call object. This will cause the memory used by the CIL for call objects to continue growing, eventually crashing your application.

 

CTIOS Custom agent desktop developers should be aware of a defect fixed in CTIOS 7.5(7) and later:

Symptom:
Intermittently, after an agent performs a Network Blind Transfer, the desktop client gets stuck in talking state and/or the transfer buttons get grayed out preventing the agent from performing transfer in future.

Conditions:
Any peripheral type where Network Blind Transfers are involved.

Workaround:
Agents have to logout and log back in again if they want to perform another transfer in future.


the bug is CSCta71582 Out of order events in OPC after a xfer cause CTIOS client to get stuck

 

When attempting to login an agent with invalid agentid or password, a custom CTIOS Application may see either:

1. eCTIOSFailureEvent event and eButtonEnablementMaskChange events are fired when eControlFailureConf received by the CIL.

or

2. Only eControlFailureConf event is fired when eControlFailureConf is received by the CIL.



We found that the behavior is controlled by the registry entry ¿AuthenticationEnabled¿ which is present at the following location.

HKEY_LOCAL_MACHINE\SOFTWARE\Cisco Systems, Inc.\Ctios\<Instance Name>\CTIOS1\Server\Security.



When AuthenticationEnabled is set to ¿1¿, we saw that eCTIOSFailureEvent event and eButtonEnablementMaskChange events are fired by the CIL

on recieving eControlFailureConf.

When AuthenticationEnabled is set to ¿0¿ we see that only eControlFailureConf is being fired by the CIL.



When AuthenticationEnabled is set to ¿1¿ and if there is a login failure, BlockAllEvents is set to true so that CIL starts blocking all events coming from the server.

This results in eCTIOSFailureEvent event and eButtonEnablementMaskChange events being fired when eControlFailureConf received by the CIL.



In the case where AuthenticationEnabled is set to ¿0¿, BlockAllEvents is set to false and this results in eControlFailureConf being fired by the CIL..



Please refer to the log snippets for both the cases given below.



AuthenticationEnabled : 1

HKEY_LOCAL_MACHINE\SOFTWARE\Cisco Systems, Inc.\Ctios\CTIOS_sree\CTIOS1\Server\Security



12/04/09 12:46:40.227 3276 CTIOSSoftphone Thd(4388) Event Arguments: (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf

MessageType:eSetAgentStateRequest ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456

TargetCILClientID:skottada-wxp-3276-4388)

12/04/09 12:46:40.227 3276 CTIOSSoftphone Thd(4388) CCtiOsSession:emoticonnEvent( eControlFailureConf ), EnablementMask = ffffffff



12/04/09 12:46:40.237 3276 CTIOSSoftphone Thd(4388) CCtiOsSession:emoticonnEvent, (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-3276-4388)

12/04/09 12:46:40.237 3276 CTIOSSoftphone Thd(4388) CObjectManager::GetTarget( eControlFailureConf )



12/04/09 12:46:40.247 3276 CTIOSSoftphone Thd(4388) [agent.5000.456] eSetAgentStateRequest : (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-3276-4388)



12/04/09 12:46:40.247 3276 CTIOSSoftphone Thd(4388) [agent.5000.456]::SetAgentProperties: (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-3276-4388)



12/04/09 12:46:40.307 3276 CTIOSSoftphone Thd(4388) [agent.5000.456] eControlFailureConf : (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-3276-4388)



12/04/09 12:46:40.307 3276 CTIOSSoftphone Thd(4388) [agent.5000.456] FireEvent( eButtonEnablementMaskChange) :

(PeripheralID:5000 FailureCode:256 PeripheralErrorCode:0 AgentID:456 EnablementMask:0x1400000

UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest ErrorMessage:The request specified an

invalid AgentID. EventType:2 FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-3276-4388)



12/04/09 12:46:40.307 3276 CTIOSSoftphone Thd(4388) CCtiOsSession::FireEvent( Type(4), Evt(eButtonEnablementMaskChange),EnablementMask = 20971520



12/04/09 12:46:40.317 3276 CTIOSSoftphone Thd(4388) CCtiOsSession::FireEvent, (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 EnablementMask:0x1400000 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf

MessageType:eSetAgentStateRequest ErrorMessage:The request specified an invalid AgentID. EventType:2 FilterTarget:agent.5000.456

TargetCILClientID:skottada-wxp-3276-4388)



12/04/09 12:46:40.317 3276 CTIOSSoftphone Thd(1788) CComSession::FireEvent, (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 EnablementMask:0x1400000 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf

MessageType:eSetAgentStateRequest ErrorMessage:The request specified an invalid AgentID. EventType:2 FilterTarget:agent.5000.456

TargetCILClientID:skottada-wxp-3276-4388)



12/04/09 12:46:40.377 3276 CTIOSSoftphone Thd(4388) [agent.5000.456] FireEvent( eCTIOSFailureEvent) :

(PeripheralID:5000 FailureCode:11 PeripheralErrorCode:0 AgentID:456 EnablementMask:0x1400000 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest ErrorMessage:The request specified an invalid AgentID. EventType:2 FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-3276-4388 BlockAllEvents:1)



********************************************************************



AuthenticationEnabled : 0

HKEY_LOCAL_MACHINE\SOFTWARE\Cisco Systems, Inc.\Ctios\CTIOS_sree\CTIOS1\Server\Security



12/04/09 13:44:16.917 5132 CTIOSSoftphone Thd(2100) Event Arguments: (PeripheralID:5000 FailureCode:256 PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest ErrorMessage:The request specified an

invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-5132-2100)



12/04/09 13:44:16.917 5132 CTIOSSoftphone Thd(2100) CCtiOsSession:emoticonnEvent, (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-5132-2100)



12/04/09 13:44:16.917 5132 CTIOSSoftphone Thd(2100) [agent.5000.456] eSetAgentStateRequest : (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-5132-2100)



12/04/09 13:44:16.927 5132 CTIOSSoftphone Thd(2100) [agent.5000.456]::SetAgentProperties: (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-5132-2100)



12/04/09 13:44:16.957 5132 CTIOSSoftphone Thd(2100) [agent.5000.456] eControlFailureConf : (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-5132-2100)



12/04/09 13:44:16.957 5132 CTIOSSoftphone Thd(2100) [agent.5000.456]::SetAgentProperties( (PeripheralID:5000 PeripheralType:17

AgentState:eUnknown FailureCode:256 NumSkillGroups:0 PeripheralErrorCode:0

AgentWorkMode:0 AvailTimeToday:0 LoggedOnTimeToday:0 NotReadyTimeToday:0

.

.

TargetCILClientID:skottada-wxp-5132-2100 LoginNameemoticonnull) BlockAllEvents:0

SilentMonitorTargetAgentUIDemoticonnull) SilentMonitorCallUIDemoticonnull)) )



12/04/09 13:44:16.957 5132 CTIOSSoftphone Thd(2100) [agent.5000.456] FireEvent( eControlFailureConf) : (PeripheralID:5000

FailureCode:256 PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf

MessageType:eSetAgentStateRequest ErrorMessage:The request specified an invalid AgentID. EventType:2 FilterTarget:agent.5000.456

TargetCILClientID:skottada-wxp-5132-2100)



12/04/09 13:44:16.967 5132 CTIOSSoftphone Thd(2100) CCtiOsSession::FireEvent, (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. EventType:2 FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-5132-2100)



12/04/09 13:44:16.967 5132 CTIOSSoftphone Thd(5868) CComSession::FireEvent, (PeripheralID:5000 FailureCode:256

PeripheralErrorCode:0 AgentID:456 UniqueObjectID:agent.5000.456 MessageID:eControlFailureConf MessageType:eSetAgentStateRequest

ErrorMessage:The request specified an invalid AgentID. EventType:2 FilterTarget:agent.5000.456 TargetCILClientID:skottada-wxp-5132-2100)

 

Cisco Advanced Services offers a WebServices interface to CTIOS. The CTIOS Web Service provides a SOAP XML web method call interface to the CTIOS Server. It's use will require the customer or partner to develop an application that implements the CTIOS Web Service WSDL. This can be done with just about any programming language available which supports HTTP and SOAP XML constructs.

Information about the Advanced Services' CTIOS Web Service is available in the CTIOS Tech Center documentation

 

Beginning with ICM version 7.5(4), the CTI Server supports sending a Not Ready reason code when in Not Ready state on Unified Contact Center Enterprise systems. This resolves CSCsh47197 cg.ctiserver CTISrvr doesn¿send NR agent state events with different reason codes.

Included in the CTIOS document library is a sample VB.NET application that shows updating the Not Ready reason code when in Not Ready state. The key to using this feature is to ignore the button enablement event for the Not Ready button and send the Not Ready with reason code request anyway.

The sample application can be found here

http://developer.cisco.com/c/document_library/get_file?p_l_id=23170&folderId=1123034&name=DLFE-16203.zip

Not Ready reason sample VB.NET



http://developer.cisco.com/group/control_panel/manage?p_p_id=31&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&doAsGroupId=23139&refererPlid=23142&_31_struts_action=%2Fimage_gallery%2Fview&_31_folderId=1551348

 

Be careful when using the JavaCil LogWrapper. Users found that when the year changed from 2008 to 2009 the deleting of old files specified by the number of files to maintain didn't work correctly.

When using the JavaCil LogWrapper class, the format is

LogWrapper(java.lang.String sFileName, long iMaxSize, int iArchives, int iExpires, int iFlushIntervalMs)

(note that in the dev guide page 12-37-38 that the iExpires parameter is listed in the description but not in the syntax.)

This creates a new LogWrapper object that traces to the file specified in sFileName and sets all the tracing properties provided: the maximum size of a single trace file (the default is 2048 Kb); the maximum number of trace files (iArchives) before LoggerManager will start deleting the oldest file (the default is 4). iExpires is used to determine how many days before the trace file expires. Flushintervalms is used to flush the buffer when writing to the log and does not affect retention.

A customer reported a problem with this LogWrapper class over the year boundary such that on 1/1/2009 files older than n days in 12/x/2008 were not overwritten.

I modified the sample in C:\Program Files\Cisco Systems\CTIOS Client\CTIOS Toolkit\Java CIL\samples\AllAgents to use the following:


lwLogFile = new LogWrapper("./Log/AllAgents.log", 1000, 3, 3, 2000);

Instead of:

lwLogFile = new LogWrapper("./Log/AllAgents.log");


I noted that on 12/28/2008 through 12/31/2008, the LogWrapper deleted the oldest file and created a new one each day.
On 1/1/2009 the oldest file (12/29/2008) did not get deleted.
On 1/2/2009 the file from 1/1/2009 got deleted but the others from
12/29-31
did not.

So it appears the customer is that correct that the logwrapper does not work over the year boundary. There is now a DDTS against the JavaCIl, specifically the LogWrapper which is DDTS CSCsx41424. This bug is scheduled to be fixed in CTIOS Version 7.5(5) due out in May 2009 and in Version 8.0 which is currently scheduled for release early in 2010.

 

With the release of CTIOS 7.5(3), CTIOS Desktop now supports Windows XP SP 3.

For more information see the release notes

http://www.cisco.com/en/US/products/sw/custcosw/ps14/prod_release_notes_list.html

 

If you are writing a multi-threaded agent mode app, there should only be one LogWrapper class object for the entire application.

Declare the LogWrapper object as Static. If using either Java and C# (i.e. the .NET Cil) build a Class called Tracer. In the Tracer class declare the LogWrapper as static. Then in each of the Agent handling Objects (e.g. CTIObject for each agent), declare a Tracer object. This allows each Agent handling object to write log messages for the Agent it is handling, and then the LogManager, which is also a singleton object, handles writing to the file specified and handled by the singleton LogWrapper Object.


So in each CTIObject objects (i.e. Agent handling object) declare a Trace object

// Tracer is a helper class that wraps the CIL Logger and
// provides some helpful tracing methods
private Tracer m_tracer = new Tracer();

Then when you want to log an event or message for that particular CTIObject you call the trace method on the Tracer object. So if you're handling 500 agents, you have 500 CTIObjects, and each has it's own Tracer Object, so there are 500 Tracer objects. All of the tracers are pointing to the single LogWrapper object.

 

By default, the CTIOS Agent Desktops use a feature of the CILs to load balance between CTIOS Server A and B as specified in the registry by the CTIOS Desktop install.

Some customers have asked for the feature of being able to select a preferred CTIOS Server Side (for instance if Side A is local and Side B is remote; it would be preferable to have Side A as the preferred side.

In order to accomplish this you would need to create a custom CTIOS Desktop using the CTIOS toolkit.

You would replace the CTIOS Agent State control for Login with a custom login button. In the connect method, provide both Host A and Host B IP address of the preferred server. In case of an error, in the try catch block, try the other server's IP address.

It does defeat the purpose of load balancing between the servers but you can either have load balancing or a preferred server but not both.

 

Showing 12 results.
Items per Page 20
of 1

Forums

Threads
There are no threads in this category.
Showing 0 results.
Thread Flag Started By Posts Views Last Post
There are no threads in this category.
Showing 0 results.

Collateral


No files available