Exemplo n.º 1
0
 public Interleave(ExclusiveReceiverGroup mutex, ConcurrentReceiverGroup concurrent) : this(new TeardownReceiverGroup(new ReceiverTask[0]), mutex, concurrent)
 {
 }
Exemplo n.º 2
0
 public static Interleave Interleave(TeardownReceiverGroup teardown, ExclusiveReceiverGroup exclusive, ConcurrentReceiverGroup concurrent)
 {
     return(new Interleave(teardown, exclusive, concurrent));
 }
Exemplo n.º 3
0
 public Interleave(TeardownReceiverGroup teardown, ExclusiveReceiverGroup mutex, ConcurrentReceiverGroup concurrent)
 {
     ReceiverTask[] branches = teardown._branches;
     for (int i = 0; i < branches.Length; i++)
     {
         ReceiverTask receiverTask = branches[i];
         receiverTask.ArbiterContext = new InterleaveReceiverContext(InterleaveReceivers.Teardown);
     }
     ReceiverTask[] branches2 = mutex._branches;
     for (int j = 0; j < branches2.Length; j++)
     {
         ReceiverTask receiverTask2 = branches2[j];
         receiverTask2.ArbiterContext = new InterleaveReceiverContext(InterleaveReceivers.Exclusive);
     }
     ReceiverTask[] branches3 = concurrent._branches;
     for (int k = 0; k < branches3.Length; k++)
     {
         ReceiverTask receiverTask3 = branches3[k];
         receiverTask3.ArbiterContext = new InterleaveReceiverContext(InterleaveReceivers.Concurrent);
     }
     _mutexBranches = new List <ReceiverTask>(teardown._branches);
     ReceiverTask[] branches4 = mutex._branches;
     for (int l = 0; l < branches4.Length; l++)
     {
         ReceiverTask item = branches4[l];
         _mutexBranches.Add(item);
     }
     _concurrentBranches = new List <ReceiverTask>(concurrent._branches);
 }
        /// <summary>
        /// Service Start
        /// </summary>
        protected override void Start()
        {
            InitializeState();

            base.Start();
            var concurrentRecieverGroup = new ConcurrentReceiverGroup();
            var exclusiveReceiverGroup = new ExclusiveReceiverGroup(Arbiter.Receive<pxbrick.LegoSensorUpdate>(true, _legoBrickNotificationPort, NotificationHandler));
            MainPortInterleave.CombineWith(new Interleave(exclusiveReceiverGroup, concurrentRecieverGroup));

            // Set up the reliable port using DSS forwarder to ensure exception and timeout conversion to fault.
            _reliableMainPort = ServiceForwarder<PrototypeBoardOperations>(this.ServiceInfo.Service);
            _reliableMainPort.ConnectToBrick(_state);
        }