public void CloseProcesses()
 {
     lock (stateList) {
         foreach (ISubscriberService service in subscriberTable.Values)
         {
             try {
                 service.ForceCrash();
             }
             catch (Exception) { }
         }
         foreach (IPublisherService service in publisherTable.Values)
         {
             try {
                 service.ForceCrash();
             }
             catch (Exception) { }
         }
         foreach (IMessageBrokerService service in brokerTable.Values)
         {
             try {
                 service.ForceCrash();
             }
             catch (Exception) { }
         }
         routingPolicy   = RoutingPolicyType.FLOOD;
         ordering        = OrderingType.FIFO;
         loggingLevel    = LoggingLevelType.LIGHT;
         brokerTable     = new Dictionary <String, IMessageBrokerService>();
         publisherTable  = new Dictionary <String, IPublisherService>();
         subscriberTable = new Dictionary <String, ISubscriberService>();
         stateList       = new Dictionary <String, ProcessState>();
     }
 }
Exemple #2
0
        ///<summary>
        /// Puppet Master CLI constructor
        ///</summary>
        internal PuppetMaster()
        {
            routingPolicy = RoutingPolicyType.FLOOD;
            ordering      = OrderingType.FIFO;
            loggingLevel  = LoggingLevelType.LIGHT;

            siteTable = new Dictionary <String, Site>();

            puppetMasterServiceTable = new Dictionary <String, IPuppetMasterService>();

            brokerResolutionCache     = new Dictionary <String, String>();
            publisherResolutionCache  = new Dictionary <String, String>();
            subscriberResolutionCache = new Dictionary <String, String>();
        }
 ///<summary>
 /// Puppet Master Service constructor
 ///</summary>
 public PuppetMasterService(String newServiceName, int newPort)
 {
     serviceName     = newServiceName;
     serviceURL      = "tcp://localhost:" + newPort + "/" + newServiceName;
     port            = newPort;
     routingPolicy   = RoutingPolicyType.FLOOD;
     ordering        = OrderingType.FIFO;
     loggingLevel    = LoggingLevelType.LIGHT;
     brokerTable     = new Dictionary <String, IMessageBrokerService>();
     publisherTable  = new Dictionary <String, IPublisherService>();
     subscriberTable = new Dictionary <String, ISubscriberService>();
     stateList       = new Dictionary <String, ProcessState>();
     BROKERFILE      = "MessageBroker.exe";
     PUBLISHERFILE   = "Publisher.exe";
     SUBSCRIBERFILE  = "Subscriber.exe";
 }
Exemple #4
0
        //<summary>
        // Close processes
        //</summary>
        internal void CloseProcesses()
        {
            foreach (IPuppetMasterService service in puppetMasterServiceTable.Values)
            {
                try
                {
                    service.CloseProcesses();
                }
                catch (Exception) { }
            }

            routingPolicy = RoutingPolicyType.FLOOD;
            ordering      = OrderingType.FIFO;
            loggingLevel  = LoggingLevelType.LIGHT;

            siteTable = new Dictionary <String, Site>();

            puppetMasterServiceTable = new Dictionary <String, IPuppetMasterService>();

            brokerResolutionCache     = new Dictionary <String, String>();
            publisherResolutionCache  = new Dictionary <String, String>();
            subscriberResolutionCache = new Dictionary <String, String>();
        }
Exemple #5
0
        //<summary>
        // Converts string input into command
        //</summary>
        private void ParseLineToCommand(String line)
        {
            int    waitingTime;
            String serviceURL;

            String[] fields  = line.Split(' ');
            String   command = fields[0].ToLower();

            if (fields.Length == 2 &&
                command.Equals("wait") &&
                Int32.TryParse(fields[1], out waitingTime))
            {
                Thread.Sleep(waitingTime);
            }
            else if (fields.Length == 4 && command.Equals("site") && fields[2].ToLower().Equals("parent"))
            {
                Site parentSite;
                siteTable.TryGetValue(fields[3], out parentSite);
                siteTable.Add(fields[1], new Site(fields[1], parentSite));
            }
            else if (fields.Length == 1 && command.Equals("status"))
            {
                foreach (IPuppetMasterService service in puppetMasterServiceTable.Values)
                {
                    service.ExecuteStatusCommand();
                }
            }
            else if (fields.Length == 2 && command.Equals("crash"))
            {
                if (!TryGetServiceURL(fields[1], out serviceURL))
                {
                    throw new InvalidProcessServiceException(fields[1]);
                }
                puppetMasterServiceTable[serviceURL].ExecuteCrashCommand(fields[1]);
            }
            else if (fields.Length == 2 && command.Equals("freeze"))
            {
                if (!TryGetServiceURL(fields[1], out serviceURL))
                {
                    throw new InvalidProcessServiceException(fields[1]);
                }
                puppetMasterServiceTable[serviceURL].ExecuteFreezeCommand(fields[1]);
            }
            else if (fields.Length == 2 && command.Equals("unfreeze"))
            {
                if (!TryGetServiceURL(fields[1], out serviceURL))
                {
                    throw new InvalidProcessServiceException(fields[1]);
                }
                puppetMasterServiceTable[serviceURL].ExecuteUnfreezeCommand(fields[1]);
            }
            else if (fields.Length == 2 && command.Equals("routingpolicy"))
            {
                if (fields[1].ToLower().Equals("flooding"))
                {
                    routingPolicy = RoutingPolicyType.FLOOD;
                }
                else if (fields[1].ToLower().Equals("filter"))
                {
                    routingPolicy = RoutingPolicyType.FILTER;
                }
                else if (fields[1].ToLower().Equals("filtering"))
                {
                    routingPolicy = RoutingPolicyType.FILTER;
                }
                else
                {
                    throw new InvalidCommandException(command);
                }
                foreach (IPuppetMasterService service in puppetMasterServiceTable.Values)
                {
                    service.RoutingPolicy = routingPolicy;
                }
            }
            else if (fields.Length == 2 && command.Equals("ordering"))
            {
                if (fields[1].ToLower().Equals("no"))
                {
                    ordering = OrderingType.NO_ORDER;
                }
                else if (fields[1].ToLower().Equals("fifo"))
                {
                    ordering = OrderingType.FIFO;
                }
                else if (fields[1].ToLower().Equals("total"))
                {
                    ordering = OrderingType.TOTAL_ORDER;
                }
                else
                {
                    throw new InvalidCommandException(command);
                }
                foreach (IPuppetMasterService service in puppetMasterServiceTable.Values)
                {
                    service.Ordering = ordering;
                }
            }
            else if (fields.Length == 2 && command.Equals("logginglevel"))
            {
                if (fields[1].ToLower().Equals("full"))
                {
                    loggingLevel = LoggingLevelType.FULL;
                }
                else if (fields[1].ToLower().Equals("light"))
                {
                    loggingLevel = LoggingLevelType.LIGHT;
                }
                else
                {
                    throw new InvalidCommandException(command);
                }
                foreach (IPuppetMasterService service in puppetMasterServiceTable.Values)
                {
                    service.LoggingLevel = loggingLevel;
                }
            }
            else if (fields.Length == 4 && command.Equals("subscriber"))
            {
                if (!subscriberResolutionCache.TryGetValue(fields[1], out serviceURL))
                {
                    throw new InvalidProcessServiceException(fields[1]);
                }
                if (fields[2].ToLower().Equals("subscribe"))
                {
                    puppetMasterServiceTable[serviceURL].ExecuteSubscribeCommand(fields[1], fields[3]);
                }
                else if (fields[2].ToLower().Equals("unsubscribe"))
                {
                    puppetMasterServiceTable[serviceURL].ExecuteUnsubscribeCommand(fields[1], fields[3]);
                }
            }
            else if (fields.Length == 8 &&
                     command.Equals("publisher") &&
                     fields[2].ToLower().Equals("publish") &&
                     fields[4].ToLower().Equals("ontopic") &&
                     fields[6].ToLower().Equals("interval"))
            {
                int publishTimes  = Int32.Parse(fields[3]),
                    intervalTimes = Int32.Parse(fields[7]);

                if (!publisherResolutionCache.TryGetValue(fields[1], out serviceURL))
                {
                    throw new InvalidProcessServiceException(fields[1]);
                }
                puppetMasterServiceTable[serviceURL].ExecutePublishCommand(
                    fields[1],
                    publishTimes,
                    fields[5],
                    intervalTimes);
            }
            else if (fields.Length == 8 &&
                     command.Equals("process") &&
                     fields[2].ToLower().Equals("is") &&
                     fields[4].ToLower().Equals("on") &&
                     fields[6].ToLower().Equals("url") &&
                     Regex.IsMatch(fields[7], REGEXURL))
            {
                String processName = fields[1],
                       processType = fields[3],
                       siteName    = fields[5],
                       processURL  = fields[7];
                serviceURL = Regex.Match(processURL, REGEXURL).Groups[1].Value;
                IPuppetMasterService serviceProxy;
                Site site;

                if (!puppetMasterServiceTable.TryGetValue(serviceURL, out serviceProxy))
                {
                    serviceProxy = (IPuppetMasterService)Activator.GetObject(
                        typeof(IPuppetMasterService),
                        @"tcp://" + serviceURL + ":" + PORT + "/" + SERVICE_NAME);

                    serviceProxy.RoutingPolicy = routingPolicy;
                    serviceProxy.Ordering      = ordering;
                    serviceProxy.LoggingLevel  = loggingLevel;

                    puppetMasterServiceTable.Add(serviceURL, serviceProxy);
                }
                if (!siteTable.TryGetValue(siteName, out site))
                {
                    throw new InvalidSiteException(siteName);
                }
                if (processType.ToLower().Equals("broker"))
                {
                    serviceProxy.ExecuteBrokerCommand(
                        processName,
                        siteName,
                        processURL,
                        site.ParentBrokerURL);

                    brokerResolutionCache.Add(processName, serviceURL);
                    site.BrokerURL = processURL;
                }
                else if (processType.ToLower().Equals("publisher"))
                {
                    serviceProxy.ExecutePublisherCommand(
                        processName,
                        siteName,
                        processURL,
                        site.BrokerURL);
                    publisherResolutionCache.Add(processName, serviceURL);
                }
                else if (processType.ToLower().Equals("subscriber"))
                {
                    serviceProxy.ExecuteSubscriberCommand(
                        processName,
                        siteName,
                        processURL,
                        site.BrokerURL);
                    subscriberResolutionCache.Add(processName, serviceURL);
                }
            }
            else
            {
                throw new InvalidCommandException(command);
            }
        }