Ejemplo n.º 1
0
        public Joiner(INode i, IReaderWriter readerWriter, IRecon recon, IMessageHub messageHub)
        {
            this.i          = i;
            this.messageHub = messageHub;
            eventHandlers   = new EventHandlerList();
            status          = new ObservableAtomicValue <NodeStatus>(NodeStatus.Idle);
            reconStatus     = new ObservableAtomicValue <NodeStatus>(NodeStatus.Idle);
            rwStatus        = new ObservableAtomicValue <NodeStatus>(NodeStatus.Idle);
            hints           = new ObservableAtomicValue <IEnumerable <INode> >(Enumerable.Empty <INode>());

            preJoinRw = new ObservableCondition(() => status.Get() == NodeStatus.Joining &&
                                                rwStatus.Get() == NodeStatus.Idle,
                                                new[] { status, rwStatus });
            preJoinRecon = new ObservableCondition(() => status.Get() == NodeStatus.Joining &&
                                                   reconStatus.Get() == NodeStatus.Idle,
                                                   new[] { status, reconStatus });
            preJoin    = new ObservableCondition(() => status.Get() == NodeStatus.Joining, new[] { status });
            preJoinAck = new ObservableCondition(() => status.Get() == NodeStatus.Joining &&
                                                 rwStatus.Get() == NodeStatus.Active &&
                                                 reconStatus.Get() == NodeStatus.Active,
                                                 new[] { status, rwStatus, reconStatus });

            this.recon                 = recon;
            this.recon.JoinAck        += JoinAckReaderWriter;
            this.readerWriter          = readerWriter;
            this.readerWriter.JoinAck += JoinAckRecon;

            new Thread(OutJoinRw).Start();
            new Thread(OutJoinRecon).Start();
            new Thread(OutSend).Start();
            new Thread(OutJoinAck).Start();
        }
Ejemplo n.º 2
0
        public Rambo(INode creator,
                     IMessageHub messageHub,
                     IEnumerable <IConfiguration> initialConfig,
                     IMessageSerializer messageSerializer)
        {
            Contract.Requires(creator != null);
            Contract.Requires(messageHub != null);
            Contract.Requires(messageHub != null);
            Contract.Requires(initialConfig != null && initialConfig.Any());

            Node          = creator;
            eventHandlers = new EventHandlerList();
            readerWriter  = new ReaderWriter(creator, messageHub, initialConfig, messageSerializer);
            recon         = new Recon();

            joiner = new Joiner(creator, readerWriter, recon, messageHub);

            ConfigureService();
        }