internal override void Dequeue(int count, SyncMessage primaryMessage) { //TODO: deal with the arguments and the returns... and count lock (queueLock) { if (count == 1) { messageQueue[0].ArgumentIndex = primaryMessage.CollatedArguments.Count; primaryMessage.CollatedArguments.AddRange(messageQueue[0].AllArguments); primaryMessage.ReturnToSyncMessages.Add(messageQueue[0]); messageQueue[0].PrimaryMessage = primaryMessage; messageQueue.RemoveAt(0); } else { var dequeuedMessages = messageQueue.Take(count); foreach (var m in dequeuedMessages) { m.PrimaryMessage = primaryMessage; } if (DelegateArgumentTypes.Count() != 0) { var arrayOfArguments = dequeuedMessages.Select((m, i) => { m.ArgumentIndex = primaryMessage.CollatedArguments.Count; m.ArgumentSubIndex = i; return(m.AllArguments); }).ToArray(); primaryMessage.CollatedArguments.AddRange(TransposeAndType(arrayOfArguments)); } primaryMessage.ReturnToSyncMessages.AddRange(dequeuedMessages); messageQueue.RemoveRange(0, count); } } }
internal void Dequeue(int count, List <object> arguments) { lock (queueLock) { if (count == 1) { arguments.AddRange(messageQueue[0].Arguments); messageQueue.RemoveAt(0); } else { var arrayOfArguments = messageQueue.Take(count).Select(m => m.Arguments).ToArray(); if (DelegateArgumentTypes.Count() != 0) { arguments.AddRange(TransposeAndType(arrayOfArguments)); } messageQueue.RemoveRange(0, count); } } }