private static CacheService GetCacheService(Common.CacheManagement.CacheContext context)
        {
            switch (context)
            {
            case Common.CacheManagement.CacheContext.TayzGrid: return(new JvCacheRPCService(null));

            case Common.CacheManagement.CacheContext.NCache: return(new NCacheRPCService(null));
            }
            return(null);
        }
        internal static Dictionary <string, TopicStats> GetTopicStat(string cacheName, string initialNodeName, Common.CacheManagement.CacheContext context, int port)
        {
            CacheService cacheService = GetCacheService(context);

            if (port != 0)
            {
                cacheService.Port = port;
            }
            string            startingNode      = initialNodeName;
            CacheServerConfig cacheServerConfig = null;
            ICacheServer      cacheServer       = null;

            try
            {
                if (initialNodeName.Equals(string.Empty))
                {
                    cacheServerConfig = GetCacheConfigThroughClientConfig(cacheName, port, context);
                    if (cacheServerConfig == null)
                    {
                        throw new ManagementException("cache with name " + cacheName + " not found in " + config);
                    }
                }
                else
                {
                    cacheService.ServerName = initialNodeName;
                    cacheServer             = cacheService.GetCacheServer(new TimeSpan(0, 0, 0, 30));
                    if (cacheServer == null)
                    {
                        throw new ManagementException("provided initial node not available");
                    }

                    cacheServerConfig = cacheServer.GetCacheConfiguration(cacheName);
                    if (cacheServerConfig == null)
                    {
                        throw new ManagementException(ErrorCodes.CacheInit.CACHE_NOT_REGISTERED_ON_NODE, ErrorMessages.GetErrorMessage(ErrorCodes.CacheInit.CACHE_NOT_REGISTERED_ON_NODE, cacheName));
                    }
                }


                //For Local Cache
                if (cacheServerConfig.CacheType.Equals(LOCALCACHE, StringComparison.OrdinalIgnoreCase))
                {
                    if (cacheServerConfig.InProc)
                    {
                        throw new ArgumentException("API is not supported for Local Inproc Cache");
                    }

                    cacheService.ServerName = Environment.MachineName;
                    cacheServer             = cacheService.GetCacheServer(new TimeSpan(0, 0, 0, 30));

                    if (cacheServer != null && cacheServer.IsRunning(cacheName))
                    {
                        return(cacheServer.GetTopicStats(cacheServerConfig.Name));
                    }
                }
                //For Clustered Cache
                else
                {
                    Dictionary <string, TopicStats> topicWiseStat = new Dictionary <string, TopicStats>();
                    ArrayList initialHost = InitialHostList(cacheServerConfig.Cluster.Channel.InitialHosts);
                    foreach (object host in initialHost)
                    {
                        try
                        {
                            cacheService.ServerName = (string)host;
                            cacheServer             = cacheService.GetCacheServer(new TimeSpan(0, 0, 0, 30));
                            if (cacheServer.IsRunning(cacheName))
                            {
                                Dictionary <string, TopicStats> NodeWisetopicStat = cacheServer.GetTopicStats(cacheServerConfig.Name);
                                if (NodeWisetopicStat != null)
                                {
                                    foreach (var item in NodeWisetopicStat)
                                    {
                                        if (!topicWiseStat.ContainsKey(item.Key))
                                        {
                                            item.Value.TopicName = item.Key;
                                            topicWiseStat.Add(item.Key, ((TopicStats)item.Value.Clone()));
                                        }
                                        else
                                        {
                                            TopicStats topicStat = topicWiseStat[item.Key];
                                            topicStat.CurrentMessageCount += item.Value.CurrentMessageCount;
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                        }
                    }
                    return(topicWiseStat);
                }
            }
            catch (Exception ex)
            {
                throw new ManagementException(ex.Message);
            }
            finally
            {
                if (cacheServer != null)
                {
                    cacheServer.Dispose();
                }
                cacheService.Dispose();
            }


            return(null);
        }
        private static CacheServerConfig GetCacheConfigThroughClientConfig(string cacheName, int port, Common.CacheManagement.CacheContext context)
        {
            CacheServerConfig cacheServerConfig = null;

            ClientConfiguration.Dom.CacheServer[] serverNodes = null;
            ICacheServer cacheServer = null;

            CacheService cacheService = GetCacheService(context);

            if (port != 0)
            {
                cacheService.Port = port;
            }

            try
            {
                //Get Server Info from Client.nconf for specified cacheName
                ClientConfiguration.Dom.ClientConfiguration clientConfiguration = ClientConfiguration.ClientConfigManager.GetClientConfiguration(cacheName);
                if (clientConfiguration != null)
                {
                    Dictionary <string, CacheConfiguration> cacheConfigurationMap = clientConfiguration.CacheConfigurationsMap;
                    CacheConfiguration cacheClientConfiguration = null;

                    try
                    {
                        cacheClientConfiguration = cacheConfigurationMap[cacheName];
                    }
                    catch (System.Collections.Generic.KeyNotFoundException ex)
                    {
                    }

                    if (cacheClientConfiguration == null)
                    {
                        throw new ManagementException("cache not found in " + config);
                    }

                    serverNodes = cacheClientConfiguration.Servers;

                    foreach (ClientConfiguration.Dom.CacheServer node in serverNodes)
                    {
                        try
                        {
                            cacheService.ServerName = node.ServerName;
                            cacheServer             = cacheService.GetCacheServer(new TimeSpan(0, 0, 0, 30));
                            if (cacheServer != null)
                            {
                                cacheServerConfig = cacheServer.GetCacheConfiguration(cacheName);
                                cacheServer.Dispose();
                                cacheServer = null;

                                if (cacheServerConfig != null)
                                {
                                    break;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                }
                else
                {
                    throw new ManagementException("error while fetching info from " + config);
                }
            }
            finally
            {
                if (cacheServer != null)
                {
                    cacheServer.Dispose();
                }
                if (cacheService != null)
                {
                    cacheService.Dispose();
                }
            }
            return(cacheServerConfig);
        }
        public static Dictionary <Runtime.CacheManagement.ServerNode, List <Runtime.Caching.ClientInfo> > GetCacheClients(string cacheName, string initialNodeName, Common.CacheManagement.CacheContext context, int port)
        {
            CacheService cacheService = GetCacheService(context);

            if (port != 0)
            {
                cacheService.Port = port;
            }
            string startingNode = initialNodeName;

            Alachisoft.NCache.Config.Dom.CacheServerConfig cacheServerConfig = null;
            Alachisoft.NCache.Management.ICacheServer      cacheServer       = null;
            Dictionary <Runtime.CacheManagement.ServerNode, List <Runtime.Caching.ClientInfo> > clientList = new Dictionary <Runtime.CacheManagement.ServerNode, List <Runtime.Caching.ClientInfo> >();

            try
            {
                if (initialNodeName.Equals(string.Empty))
                {
                    cacheServerConfig = GetCacheConfigThroughClientConfig(cacheName, port, context);

                    if (cacheServerConfig == null)
                    {
                        throw new ManagementException("cache with name " + cacheName + " not found in " + config);
                    }
                }
                else
                {
                    cacheService.ServerName = initialNodeName;
                    cacheServer             = cacheService.GetCacheServer(new TimeSpan(0, 0, 0, 30));
                    if (cacheServer == null)
                    {
                        throw new ManagementException("provided initial node not available");
                    }

                    cacheServerConfig = cacheServer.GetCacheConfiguration(cacheName);
                    if (cacheServerConfig == null)
                    {
                        throw new ManagementException(ErrorCodes.CacheInit.CACHE_NOT_REGISTERED_ON_NODE, ErrorMessages.GetErrorMessage(ErrorCodes.CacheInit.CACHE_NOT_REGISTERED_ON_NODE, cacheName));
                    }
                }

                //Copied Code from NCManager

                //For Local Cache
                if (cacheServerConfig.CacheType.Equals(LOCALCACHE, StringComparison.OrdinalIgnoreCase))
                {
                    if (cacheServerConfig.InProc)
                    {
                        throw new ArgumentException("API is not supported for Local Inproc Cache");
                    }

                    cacheService.ServerName = Environment.MachineName;
                    cacheServer             = cacheService.GetCacheServer(new TimeSpan(0, 0, 0, 30));

                    if (cacheServer != null)
                    {
                        if (cacheServer.IsRunning(cacheName))
                        {
                            Runtime.CacheManagement.ServerNode serverNode = new Runtime.CacheManagement.ServerNode();
                            serverNode.ServerIP = Environment.MachineName;

                            List <Alachisoft.NCache.Common.Monitoring.ClientProcessStats> clients = cacheServer.GetClientProcessStats(cacheServerConfig.Name);
                            List <Runtime.Caching.ClientInfo> list = new List <Runtime.Caching.ClientInfo>();
                            foreach (Alachisoft.NCache.Common.Monitoring.ClientProcessStats clientNode in clients)
                            {
                                Runtime.Caching.ClientInfo clientInfo = new Runtime.Caching.ClientInfo();
                                clientInfo.IPAddress = clientNode.Address.IpAddress;
                                clientInfo.ProcessID = Int32.Parse(clientNode.ProcessID);
                                list.Add(clientInfo);
                            }
                            clientList.Add(serverNode, list);
                        }
                    }
                    return(clientList);
                }
                //For Clustered Cache
                else
                {
                    ArrayList initialHost = InitialHostList(cacheServerConfig.Cluster.Channel.InitialHosts);
                    foreach (object host in initialHost)
                    {
                        try
                        {
                            cacheService.ServerName = (string)host;
                            cacheServer             = cacheService.GetCacheServer(new TimeSpan(0, 0, 0, 30));
                            if (cacheServer.IsRunning(cacheName))
                            {
                                Runtime.CacheManagement.ServerNode serverNode = new Runtime.CacheManagement.ServerNode();
                                serverNode.ServerIP = host as string;
                                serverNode.Port     = cacheServerConfig.Cluster.Channel.TcpPort;

                                List <Alachisoft.NCache.Common.Monitoring.ClientProcessStats> clients = cacheServer.GetClientProcessStats(cacheServerConfig.Name);
                                List <Runtime.Caching.ClientInfo> list = new List <Runtime.Caching.ClientInfo>();
                                foreach (Alachisoft.NCache.Common.Monitoring.ClientProcessStats clientNode in clients)
                                {
                                    Runtime.Caching.ClientInfo clientInfo = new Runtime.Caching.ClientInfo();
                                    clientInfo.IPAddress = clientNode.Address.IpAddress;
                                    clientInfo.ProcessID = Int32.Parse(clientNode.ProcessID);
                                    list.Add(clientInfo);
                                }
                                clientList.Add(serverNode, list);
                            }
                        }
                        catch (Exception e)
                        {
                        }
                    }
                    return(clientList);
                }
            }
            catch (Exception ex)
            {
                throw new ManagementException(ex.Message);
            }
            finally
            {
                if (cacheServer != null)
                {
                    cacheServer.Dispose();
                }
                cacheService.Dispose();
            }
        }