public static async Task <bool> Announce(HostedGameData announce) { var payload = announce.ToJson(); var isDupeRequest = (_lastPayloadSent != null && _lastPayloadSent == payload); var enoughTimeHasPassed = (_lastSentAt == null || (DateTime.Now - _lastSentAt.Value).TotalMinutes >= ANNOUNCE_INTERVAL_MINS); if (isDupeRequest && !enoughTimeHasPassed) { // An identical payload was already sent out! // Do not send a dupe unless enough time has passed return(true); } Plugin.Log?.Info($"Sending host announcement [{announce.Describe()}] for code {announce.ServerCode}"); _lastPayloadSent = payload; _lastSentAt = DateTime.Now; var responseOk = await PerformWebRequest("POST", "/announce", payload) != null; if (!responseOk) { // Request failed, allow immediate retry _lastPayloadSent = null; _lastSentAt = null; } return(responseOk); }