public bool AddFrontend(CoreDispatcher d, ISignalFrontend w) { Logger.LogTrace("AddFrontend() locking"); SemaphoreSlim.Wait(CancelSource.Token); try { Logger.LogTrace("AddFrontend() locked"); if (Running && LikelyHasValidStore) { Logger.LogInformation("Registering frontend of dispatcher {0}", w.GetHashCode()); Frames.Add(d, w); w.ReplaceConversationList(GetConversations()); DisappearingMessagesManager.AddFrontend(d, w); return(true); } else { Logger.LogInformation("Ignoring AddFrontend call"); return(false); } } finally { SemaphoreSlim.Release(); Logger.LogTrace("AddFrontend() released"); } }
internal void UpdateMessageExpiration(SignalMessage message, uint conversationExpireTimeSeconds) { if (message.Type == Signal_Windows.Models.SignalMessageType.Normal && message.ExpiresAt == 0) { long messageExpiration; if (conversationExpireTimeSeconds == 0) { messageExpiration = 0; } else { messageExpiration = Util.CurrentTimeMillis() + (long)TimeSpan.FromSeconds(conversationExpireTimeSeconds).TotalMilliseconds; } if (messageExpiration > 0) { message.ExpiresAt = messageExpiration; SignalDBContext.UpdateMessageExpiresAt(message); DisappearingMessagesManager.QueueForDeletion(message); } } }
public async Task RemoveFrontend(CoreDispatcher d) { Logger.LogTrace("RemoveFrontend() locking"); await SemaphoreSlim.WaitAsync(CancelSource.Token); try { Logger.LogTrace("RemoveFrontend() locked"); Logger.LogInformation("Unregistering frontend of dispatcher {0}", d.GetHashCode()); DisappearingMessagesManager.RemoveFrontend(d); Frames.Remove(d); } catch (Exception e) { Logger.LogCritical($"RemoveFrontend failed(): {e.Message} ({e.GetType()})\n{e.StackTrace}"); } finally { SemaphoreSlim.Release(); Logger.LogTrace("RemoveFrontend() released"); } }