async void OnJudgerStatusUpdateMessage(string clientId, ClientStatusMsg msg) { using (await queueLock.LockAsync()) { // should we dispatch a new job for this judger? var remainingDispatches = msg.RequestForNewTask; using (await connectionLock.LockAsync()) { if (connections.TryGetValue(clientId, out var conn)) { conn.CanAcceptNewTask = msg.CanAcceptNewTask; conn.ActiveTaskCount = msg.ActiveTaskCount; while (remainingDispatches > 0) { if (await TryDispatchJobFromDatabase(conn)) { remainingDispatches--; } else { break; } } } } for (ulong i = 0; i < remainingDispatches; i++) { JudgerQueue.AddLast(clientId); } logger.LogInformation("Status::Judger: {0}", DEBUG_LogEnumerator(JudgerQueue)); } }
/// <summary> /// Process a <c>ClientStatusMsg</c>. This function is present only for /// compatibility reasons. /// </summary> /// <param name="clientId"></param> /// <param name="msg"></param> /// <returns></returns> async void OnJudgerStatusUpdateMessage(string clientId, ClientStatusMsg msg) { using (await connectionLock.LockAsync()) { if (connections.TryGetValue(clientId, out var conn)) { conn.CanAcceptNewTask = msg.CanAcceptNewTask; conn.ActiveTaskCount = msg.ActiveTaskCount; } } }