private SessionTasksQueue GetSessionTasksQueue(IoSession session) { SessionTasksQueue queue = session.GetAttribute <SessionTasksQueue>(TASKS_QUEUE); if (queue == null) { queue = new SessionTasksQueue(); SessionTasksQueue oldQueue = (SessionTasksQueue)session.SetAttributeIfAbsent(TASKS_QUEUE, queue); if (oldQueue != null) { queue = oldQueue; } } return(queue); }
/// <inheritdoc/> public void Execute(IoEvent ioe) { IoSession session = ioe.Session; SessionTasksQueue sessionTasksQueue = GetSessionTasksQueue(session); Boolean exec; // propose the new event to the event queue handler. If we // use a throttle queue handler, the message may be rejected // if the maximum size has been reached. Boolean offerEvent = _queueHandler.Accept(this, ioe); if (offerEvent) { lock (sessionTasksQueue.syncRoot) { sessionTasksQueue.tasksQueue.Enqueue(ioe); if (sessionTasksQueue.processingCompleted) { sessionTasksQueue.processingCompleted = false; exec = true; } else { exec = false; } if (log.IsDebugEnabled) { Print(sessionTasksQueue.tasksQueue, ioe); } } if (exec) { Execute(() => { RunTasks(sessionTasksQueue); }); } _queueHandler.Offered(this, ioe); } }
private void RunTasks(SessionTasksQueue sessionTasksQueue) { IoEvent ioe; while (true) { lock (sessionTasksQueue.syncRoot) { if (!sessionTasksQueue.tasksQueue.TryDequeue(out ioe)) { sessionTasksQueue.processingCompleted = true; break; } } _queueHandler.Polled(this, ioe); ioe.Fire(); } }
private void RunTasks(SessionTasksQueue sessionTasksQueue) { IoEvent ioe; while (true) { lock (sessionTasksQueue.syncRoot) { if (!sessionTasksQueue.tasksQueue.TryDequeue(out ioe)) { sessionTasksQueue.processingCompleted = true; break; } } _queueHandler.Polled(this, ioe); ioe.Fire(); } }
private SessionTasksQueue GetSessionTasksQueue(IoSession session) { SessionTasksQueue queue = session.GetAttribute<SessionTasksQueue>(TASKS_QUEUE); if (queue == null) { queue = new SessionTasksQueue(); SessionTasksQueue oldQueue = (SessionTasksQueue)session.SetAttributeIfAbsent(TASKS_QUEUE, queue); if (oldQueue != null) queue = oldQueue; } return queue; }