/// <summary> /// Establish connection to the configuration server /// </summary> /// <param name="pri_ConfigServerHost">The pri_ configuration server host.</param> /// <param name="pri_ConfigServerPort">The pri_ configuration server port.</param> /// <param name="clientName">Name of the client.</param> /// <param name="applicationName">Name of the application.</param> /// <param name="userName">Name of the user.</param> /// <param name="password">The password.</param> /// <param name="sec_ConfigServerHost">The sec_ configuration server host.</param> /// <param name="sec_ConfigServerPort">The sec_ configuration server port.</param> /// <returns></returns> public OutputValues ConfigConnectionEstablish(string pri_ConfigServerHost, string pri_ConfigServerPort, string applicationName, string userName, string password, string sec_ConfigServerHost, string sec_ConfigServerPort, string[] sectionToRead, params string[] sections) { _configContainer = null; _configContainer = ConfigContainer.Instance(); OutputValues output = new OutputValues(); try { var assembly = typeof(ConfigManager).Assembly; if (assembly != null) { _logger.Info("-----------------------------------------------------------------------------"); _logger.Info(assembly.GetName().Name + " : " + assembly.GetName().Version); _logger.Info("-----------------------------------------------------------------------------"); } } catch (Exception generalException) { _logger.Error("Error occurred while getting the assembly version of library : " + ((generalException.InnerException == null) ? generalException.Message : generalException.InnerException.ToString())); } ConfigConnectionManager connect = new ConfigConnectionManager(); //Clear and null all values if (_configContainer.ConfServiceObject != null) { if (_configContainer.ConfServiceObject.Protocol != null && _configContainer.ConfServiceObject.Protocol.State == ChannelState.Opened) { _configContainer.ConfServiceObject.Protocol.Close(); } if (_configContainer.ConfServiceObject != null) { ConfServiceFactory.ReleaseConfService(_configContainer.ConfServiceObject); } _configContainer.ConfServiceObject = null; } //_configContainer.AllKeys.Clear(); _configContainer.CMEValues.Clear(); //Connect Config Server output = connect.ConnectConfigServer(pri_ConfigServerHost, pri_ConfigServerPort, applicationName, userName, password, sec_ConfigServerHost, sec_ConfigServerPort); if (output.MessageCode == "200") { //Authenticate the user first and read the CME configurations output = AuthenticateUser(userName, password); if (output.MessageCode == "200") { ConfigurationHandler readValues = new ConfigurationHandler(); ConfigContainer.Instance().UserName = userName; //Get access group first then read values hierarchy //Read System section to get Tenant and switch type output = readValues.ReadSystemSection(applicationName); if (output.MessageCode == "2001") { return(output); } //Register for CME Alter Notification //readValues.RegisterCMEAlterNotification(_configContainer.TenantDbId); //Read logger to print CME values in log readValues.ReadLoggerData(userName, applicationName); InitializeLogger(userName); //Read Application keys readValues.ReadApplication(applicationName, sectionToRead, sections); //Read Agent Group Keys and override existing application keys readValues.ReadAgentGroup(userName, sectionToRead, sections); //Read person Keys and override existing application keys and Agent group keys readValues.ReadPerson(userName, sectionToRead, sections); GetContactBusinessAttribute("ContactAttributes"); //Check the user is in access group bool accessAuthenticationEnable = true; try { if (_configContainer.CMEValues.ContainsKey("login.enable.access.group-authentication")) { if (!string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value.ToString()) && !Convert.ToBoolean(((ConfigValue)_configContainer.CMEValues["login.enable.access.group-authentication"]).Value.ToString())) { accessAuthenticationEnable = false; } } } catch { _logger.Warn("Authentication using access group may not work as expected. Implementing default functionality."); } if (_configContainer.CMEValues.ContainsKey("login.access-group")) { if (_configContainer.CMEValues["login.access-group"] != null && ((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value.ToString() != string.Empty) { if (accessAuthenticationEnable) { output = readValues.ReadAccessPermission(((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value); if (output.MessageCode == "2001") { return(output); } } } else { _logger.Warn("login.access-group value is null or empty"); output.MessageCode = "2001"; output.Message = "Access group name is not configured. Please contact your Administrator"; return(output); } } else { _logger.Warn("login.access-group key is not configured"); output.MessageCode = "2001"; output.Message = "Access group name is not configured. Please contact your Administrator"; return(output); } //Read the available Queues such as ACD queues if (_configContainer.CMEValues.ContainsKey("login.voice.available-queues") && ((ConfigValue)_configContainer.CMEValues["login.voice.available-queues"]).Value != null) { readValues.ReadQueues(((ConfigValue)_configContainer.CMEValues["login.voice.available-queues"]).Value.ToString()); } else { _logger.Warn("login.voice.available-queues key-value is not configured"); } //Check case data and disposition from business attribute or transaction object if (_configContainer.CMEValues.ContainsKey("interaction.casedata.use-transaction-object") && ((ConfigValue)_configContainer.CMEValues["interaction.casedata.use-transaction-object"]).Value.ToLower().Equals("true") ? true : false) { //Read the case data Transaction object for add/filter/sort case data if (_configContainer.CMEValues.ContainsKey("interaction.casedata-object-name") && !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value)) { readValues.ReadCaseDataTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString()); readValues.ReadCaseDataFilterTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString()); readValues.ReadCaseDataSortingTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString()); } else { _logger.Warn("interaction.casedata-object-name value is not configured"); } //Read the case data Transaction object for disposition if (_configContainer.CMEValues.ContainsKey("interaction.disposition-object-name") && !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value)) { readValues.ReadDispositionTransctionObject(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value.ToString()); } else { _logger.Warn("interaction.disposition-object-name value is not configured"); } } else { if (_configContainer.CMEValues.ContainsKey("interaction.casedata-object-name") && !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value)) { //Read casedata information from Business attributes readValues.ReadCaseDataFromBusinessAttribute(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString()); } else { _logger.Warn("interaction.casedata-object-name key-value is not configured"); } if (_configContainer.CMEValues.ContainsKey("interaction.disposition-object-name") && !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value)) { //Read disposition information from Business attributes readValues.ReadDispositionFromBusinessAttribute(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value.ToString()); } else { _logger.Warn("interaction.disposition-object-name key-value is not configured"); } } //Read all skills readValues.ReadAllSkills(); //Read all places readValues.ReadAllPlaces(); //Read all DN's based on switch type //readValues.ReadAllDNs(); //Read channel based not ready reason codes for voice, email and chat medias readValues.ReadChannelNotReadyReasonCodes(); //Read global not ready reason codes if (_configContainer.AllKeys.Contains("agent-global-status.not-ready-reasoncodes")) { string[] notReadyReasonCodes = ((string)_configContainer.GetValue("agent-global-status.not-ready-reasoncodes")).Split(','); if (notReadyReasonCodes.Length > 0) { readValues.ReadGlobalNotReadyReasonCodes(notReadyReasonCodes.Distinct().ToArray <string>()); } } //Read Voice not Ready Reason Codes if (_configContainer.AllKeys.Contains("agent-voice-status.not-ready-reasoncodes")) { string[] notReadyReasonCodes = ((string)_configContainer.GetValue("agent-voice-status.not-ready-reasoncodes")).Split(','); if (notReadyReasonCodes.Length > 0) { readValues.ReadVoiceHierarchyLevelNotReadyReasonCodes(notReadyReasonCodes.Distinct().ToArray <string>()); } } CfgPersonQuery qPerson = new CfgPersonQuery(); qPerson.TenantDbid = ConfigContainer.Instance().TenantDbId; qPerson.IsAgent = 0;// 0 - Means select only Agents (or) 1 - means select only user(default) System.Collections.Generic.ICollection <CfgPerson> _allPersons = _configContainer.ConfServiceObject.RetrieveMultipleObjects <CfgPerson>(qPerson); //_configContainer.AllKeys.Add("AllPersons"); _configContainer.CMEValues.Add("AllPersons", _allPersons); readValues.RegisterCMEAlterNotification(ConfigContainer.Instance().TenantDbId); readValues = null; } else { return(output); } } return(output); }
/// <summary> /// Initializes the logger. /// </summary> internal void InitializeLogger(string userName) { int maxRollBacks = 0; string maxFileSize = string.Empty; string logRollStyle = string.Empty; string conversionPattern = string.Empty; string logFileName = string.Empty; string logFilterLevel = string.Empty; string levelsToFilter = string.Empty; string datePattern = string.Empty; try { if (_configContainer.CMEValues.ContainsKey("log.max-roll-size")) { maxRollBacks = Convert.ToInt32(_configContainer.GetValue("log.max-roll-size")); } if (_configContainer.CMEValues.ContainsKey("log.max-file-size")) { maxFileSize = _configContainer.GetValue("log.max-file-size"); } if (_configContainer.CMEValues.ContainsKey("log.conversion-pattern")) { conversionPattern = _configContainer.GetValue("log.conversion-pattern"); } if (_configContainer.CMEValues.ContainsKey("log.date-pattern")) { datePattern = _configContainer.GetValue("log.date-pattern"); } if (_configContainer.CMEValues.ContainsKey("log.levels-to-filter")) { levelsToFilter = _configContainer.GetValue("log.levels-to-filter"); } if (_configContainer.CMEValues.ContainsKey("log.file-name")) { logFileName = _configContainer.GetValue("log.file-name"); } if (_configContainer.CMEValues.ContainsKey("log.filter-level")) { logFilterLevel = _configContainer.GetValue("log.filter-level"); } if (_configContainer.CMEValues.ContainsKey("log.roll-style")) { logRollStyle = _configContainer.GetValue("log.roll-style"); } var lastchar = logFileName.Contains(@"\") ? @"\" : @"/"; if (!logFileName.Substring(logFileName.Length - 1, 1).Contains(lastchar)) { logFileName = logFileName + lastchar; } //var directoryInfo = new DirectoryInfo(logFileName); //if (logFileName == string.Empty || !Directory.Exists(directoryInfo.Root.Name)) //{ // string folder = Path.Combine(Environment.CurrentDirectory.ToString(), "Logs"); // if (!Directory.Exists(folder)) // Directory.CreateDirectory(folder); // logFileName = folder + @"\"; //} Pointel.Logger.Core.Logger.ConfigureLog4net(maxRollBacks.ToString(), maxFileSize, logRollStyle, conversionPattern, logFileName + userName, logFilterLevel, levelsToFilter, datePattern); //Pointel.Logger.Core.Logger.ConfigureLog4net(maxRollBacks, maxFileSize, logRollStyle, conversionPattern, logFileName + userName, logFilterLevel, levelsToFilter, datePattern); var assembly = Assembly.GetExecutingAssembly(); var fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location); DateTime buildDate = new FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime; _logger.Info("---------------------------------------------------------------"); _logger.Info(" Agent Interaction Desktop Application "); _logger.Info(" Version : " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion); _logger.Info(" Framework : " + Environment.Version); var currentOs = Environment.OSVersion; _logger.Info(" Environment : " + currentOs.VersionString); _logger.Info("---------------------------------------------------------------"); } catch { } finally { maxRollBacks = 0; maxFileSize = null; logRollStyle = null; conversionPattern = null; logFileName = null; logFilterLevel = null; levelsToFilter = null; datePattern = null; } }