/// <summary> /// Called when the given client failed to login due to the given reason. /// Delays, fires the LoginFailed event and sends the reply. /// </summary> /// <param name="client"></param> /// <param name="error"></param> private static void OnLoginError(IAuthClient client, AccountStatus error) { TimeoutWaitHandle delayHandle; if (!failedLogins.TryGetValue(client.ClientAddress, out delayHandle)) { failedLogins.Add(client.ClientAddress, delayHandle = new TimeoutWaitHandle(DateTime.Now)); } else { delayHandle.LastAttempt = DateTime.Now; } ThreadPool.RegisterWaitForSingleObject(delayHandle.Handle, (state, timedOut) => { if (client.IsConnected) { var evt = LoginFailed; if (evt != null) { evt(client, error); } SendAuthProofErrorReply(client, error); } }, null, LoginFailedDelay, true); }
public NextActivityKey SayAndWaitTimeout( WorkflowExecutionContext context, ActivityParameterDictionary parameters) { var timeout = parameters.GetParamValueOrThrow <int>("Timeout"); var timeoutEvent = new TimeoutWaitHandle(timeout); AddInfiniteRepeatTimeoutParameter(parameters); return(SayAndWaitEvents( context, parameters, new WaitHandle[] { timeoutEvent }, DefaultNextActivityKeyResolver)); }