示例#1
0
 public void AddChildIterator <TChildModel, TChildStatus, TChildKey>(ChildIterator <TModel, TStatus, TChildModel, TChildStatus, TChildKey> childIterator)
 {
     childIterators.Add(childIterator.VisitChildren);
 }
        public static Compare <Broker, Messages.BrokerStatus, int> BuildAnalysisModel()
        {
            // Broker
            var brokerCompare = new Compare <Broker, Messages.BrokerStatus, int> {
                ModelKeySelector  = m => m.Id,
                StatusKeySelector = m => m.BrokerId,
                OnUnchanged       = CheckBrokerStatus
            };

            // VHost
            var vhostCompare = new Compare <VHost, Messages.VHost, string> {
                ModelKeySelector  = m => m.Name,
                StatusKeySelector = s => s.Name,
                OnModelDeleted    = OnVHostDeleted,
                OnNewStatus       = OnVHostCreated
            };

            var vhostIterator = new ChildIterator <Broker, Messages.BrokerStatus, VHost, Messages.VHost, string> {
                ChildModelSelector  = broker => broker.VHosts,
                ChildStatusSelector = brokerStatus => brokerStatus.VHosts,
                ChildCompare        = vhostCompare
            };

            brokerCompare.AddChildIterator(vhostIterator);

            // Connection
            var connectionCompare = new Compare <Connection, Messages.Connection, string> {
                ModelKeySelector  = m => m.Name,
                StatusKeySelector = s => s.Name,
                OnModelDeleted    = OnConnectionLost,
                OnNewStatus       = OnConnectionEstablished
            };

            var connectionIterator = new ChildIterator <VHost, Messages.VHost, Connection, Messages.Connection, string> {
                ChildModelSelector  = vhost => vhost.Connections,
                ChildStatusSelector = vhost => vhost.Connections,
                ChildCompare        = connectionCompare
            };

            vhostCompare.AddChildIterator(connectionIterator);

            // Consumer
            var consumerCompare = new Compare <Consumer, Messages.Consumer, string> {
                ModelKeySelector  = m => m.Tag,
                StatusKeySelector = s => s.Tag,
                OnModelDeleted    = OnConsumerCancel,
                OnNewStatus       = OnNewConsumer
            };

            var consumerIterator = new ChildIterator <Connection, Messages.Connection, Consumer, Messages.Consumer, string> {
                ChildModelSelector  = connection => connection.Consumers,
                ChildStatusSelector = connection => connection.Consumers,
                ChildCompare        = consumerCompare
            };

            connectionCompare.AddChildIterator(consumerIterator);

            // Queue
            var queueCompare = new Compare <Queue, Messages.Queue, string> {
                ModelKeySelector  = m => m.Name,
                StatusKeySelector = s => s.Name,
                OnModelDeleted    = OnQueueDeleted,
                OnNewStatus       = OnNewQueue,
                OnUnchanged       = OnQueueLevel
            };

            var queueIterator = new ChildIterator <VHost, Messages.VHost, Queue, Messages.Queue, string> {
                ChildModelSelector  = vhost => vhost.Queues,
                ChildStatusSelector = vhost => vhost.Queues,
                ChildCompare        = queueCompare
            };

            vhostCompare.AddChildIterator(queueIterator);

            return(brokerCompare);
        }