Beispiel #1
0
        public async Task OnMessage(SignalServiceMessagePipeMessage message)
        {
            Logger.LogTrace("OnMessage() locking");
            await SignalLibHandle.Instance.SemaphoreSlim.WaitAsync(Token);

            Logger.LogTrace("OnMessage() locked");
            try
            {
                if (message is SignalServiceEnvelope envelope)
                {
                    List <SignalMessage> messages = new List <SignalMessage>();
                    if (envelope.IsReceipt())
                    {
                        SignalMessage update = SignalDBContext.IncreaseReceiptCountLocked(envelope);
                        if (update != null)
                        {
                            await SignalLibHandle.Instance.DispatchMessageUpdate(update);
                        }
                    }
                    else if (envelope.IsPreKeySignalMessage() || envelope.IsSignalMessage())
                    {
                        await HandleMessage(envelope);
                    }
                    else
                    {
                        Logger.LogWarning("OnMessage() could not handle unknown message type {0}", envelope.GetEnvelopeType());
                    }
                }
                else if (message is SignalServiceMessagePipeEmptyMessage)
                {
                    SignalLibHandle.Instance.DispatchPipeEmptyMessage();
                }
            }
            catch (Exception e)
            {
                Logger.LogError("OnMessage failed: {0}\n{1}", e.Message, e.StackTrace);
                if (e.InnerException != null)
                {
                    Logger.LogError("InnerException: {0}\n{1}", e.InnerException.Message, e.InnerException.StackTrace);
                }
            }
            finally
            {
                SignalLibHandle.Instance.SemaphoreSlim.Release();
                Logger.LogTrace("OnMessage() released");
            }
        }
Beispiel #2
0
 public void OnMessage(SignalServiceMessagePipeMessage message)
 {
     if (message is SignalServiceEnvelope)
     {
         SignalServiceEnvelope envelope = (SignalServiceEnvelope)message;
         List <SignalMessage>  messages = new List <SignalMessage>();
         if (envelope.isReceipt())
         {
             SignalDBContext.IncreaseReceiptCountLocked(envelope, this);
         }
         else if (envelope.isPreKeySignalMessage() || envelope.isSignalMessage())
         {
             HandleMessage(envelope);
         }
         else
         {
             Debug.WriteLine("received message of unknown type " + envelope.getType() + " from " + envelope.getSource());
         }
     }
 }
Beispiel #3
0
 public void OnMessage(SignalServiceMessagePipeMessage message)
 {
     Logger.LogTrace("OnMessage() locking");
     Handle.SemaphoreSlim.Wait();
     Logger.LogTrace("OnMessage() locked");
     try
     {
         if (message is SignalServiceEnvelope envelope)
         {
             List <SignalMessage> messages = new List <SignalMessage>();
             if (envelope.isReceipt())
             {
                 SignalMessage update = SignalDBContext.IncreaseReceiptCountLocked(envelope);
                 if (update != null)
                 {
                     Handle.DispatchMessageUpdate(update);
                 }
             }
             else if (envelope.isPreKeySignalMessage() || envelope.isSignalMessage())
             {
                 HandleMessage(envelope);
             }
             else
             {
                 Logger.LogWarning("OnMessage() could not handle unknown message type {0}", envelope.getType());
             }
         }
         else if (message is SignalServiceMessagePipeEmptyMessage)
         {
             Handle.DispatchPipeEmptyMessage();
         }
     }
     finally
     {
         Handle.SemaphoreSlim.Release();
         Logger.LogTrace("OnMessage() released");
     }
 }