private async void PingTimerCallback(object state) { try { await SendMessage("Ping", CancellationToken.None).ConfigureAwait(false); _lastPingTime = DateTime.UtcNow; } catch { var lastActivityDate = new[] { _lastPingTime, Session.LastActivityDate } .Max(); var timeSinceLastPing = DateTime.UtcNow - lastActivityDate; // We don't want to stop the session due to one single request failure // At the same time, we don't want the timeout to be too long because it will // be sitting in active sessions available for remote control, when it's not if (timeSinceLastPing >= TimeSpan.FromMinutes(5)) { ReportSessionEnded(); } } }
internal static string Escape(string text) { var array = new[] { '[', '\\', '^', '$', '.', '|', '?', '*', '+', '(', ')' }; var stringBuilder = new StringBuilder(); var i = 0; var length = text.Length; while (i < length) { var character = text[i]; if (Array.IndexOf(array, character) != -1) { stringBuilder.Append("\\" + character.ToString()); } else { stringBuilder.Append(character); } i++; } return stringBuilder.ToString(); }
internal static string GetSearchTitle(string name) { var ignoreWords = new[] { "The", "A", "An" }; var num = ignoreWords.Length - 1; for (var i = 0; i <= num; i++) { if (name.StartsWith(ignoreWords[i] + " ", StringComparison.OrdinalIgnoreCase)) { return name.Remove(0, ignoreWords[i].Length + 1).Trim() + ", " + ignoreWords[i]; } } return name; }