public SendCompletionProcessor(InternalZerioConfiguration configuration, IRioCompletionQueue sendCompletionQueue) { _sendCompletionQueue = sendCompletionQueue; _completionResults = new RIO_RESULT[configuration.MaxSendCompletionResults]; _completionResultsHandle = GCHandle.Alloc(_completionResults, GCHandleType.Pinned); _completionResultsPointer = (RIO_RESULT *)_completionResultsHandle.AddrOfPinnedObject().ToPointer(); _waitStrategy = CompletionPollingWaitStrategyFactory.Create(configuration.SendCompletionPollingWaitStrategyType); }
public static RioRequestQueue Create(int correlationId, IntPtr socket, IRioCompletionQueue sendingCompletionQueue, uint maxOutstandingSends, IRioCompletionQueue receivingCompletionQueue, uint maxOutstandingReceives) { var requestQueue = WinSock.Extensions.CreateRequestQueue(socket, maxOutstandingReceives, 1, maxOutstandingSends, 1, receivingCompletionQueue.QueueHandle, sendingCompletionQueue.QueueHandle, correlationId); if (requestQueue == IntPtr.Zero) { WinSock.ThrowLastWsaError(); } return(new RioRequestQueue(requestQueue)); }
public SendRequestProcessingEngine(InternalZerioConfiguration configuration, IRioCompletionQueue sendingCompletionQueue, ISessionManager sessionManager) { _configuration = configuration; var ringBufferSize = configuration.SendRequestProcessingEngineRingBufferSize; _unmanagedRioBuffer = new UnmanagedRioBuffer <SendRequestEntry>(ringBufferSize, _configuration.SendingBufferLength); _disruptor = CreateDisruptor(sendingCompletionQueue, sessionManager); _ringBuffer = _disruptor.RingBuffer; }
private unsafe UnmanagedDisruptor <SendRequestEntry> CreateDisruptor(IRioCompletionQueue sendingCompletionQueue, ISessionManager sessionManager) { var waitStrategy = CreateWaitStrategy(); var disruptor = new UnmanagedDisruptor <SendRequestEntry>((IntPtr)_unmanagedRioBuffer.FirstEntry, _unmanagedRioBuffer.EntryReservedSpaceSize, _unmanagedRioBuffer.Length, new ThreadPerTaskScheduler(), ProducerType.Multi, waitStrategy); var sendRequestProcessor = new SendRequestProcessor(_configuration, sessionManager); var sendCompletionProcessor = new SendCompletionProcessor(_configuration, sendingCompletionQueue); disruptor.HandleEventsWith(sendRequestProcessor).Then(sendCompletionProcessor); ConfigureWaitStrategy(waitStrategy, disruptor, sendCompletionProcessor); return(disruptor); }
public ReceiveCompletionProcessor(InternalZerioConfiguration configuration, IRioCompletionQueue receivingCompletionQueue, ISessionManager sessionManager) { _configuration = configuration; _receivingCompletionQueue = receivingCompletionQueue; _sessionManager = sessionManager; }