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); }
public Interleave(ExclusiveReceiverGroup mutex, ConcurrentReceiverGroup concurrent) : this(new TeardownReceiverGroup(new ReceiverTask[0]), mutex, concurrent) { }
public static Interleave Interleave(TeardownReceiverGroup teardown, ExclusiveReceiverGroup exclusive, ConcurrentReceiverGroup concurrent) { return(new Interleave(teardown, exclusive, concurrent)); }
/// <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); }