示例#1
0
        public async Task Typing(DiscordClient client, TypingStartEventArgs typingEvent)
        {
            if (typingEvent.Channel.Id == ChannelId)
            {
                TypingMessage message = new TypingMessage(typingEvent);

                // Forward to SignalR
                Task <HttpResponseMessage> apiTask  = commsHandler.SendTyping(message);
                HttpResponseMessage        response = null;
                try
                {
                    response = await apiTask;
                }
                catch (Exception e)
                {
                    throw new ApplicationException("Couldn't send message to SignalR.", e);
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="metadata"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        /// <exception cref="ProtocolInvalidMessageException"></exception>
        private static SignalServiceTypingMessage CreateTypingMessage(SignalServiceMetadata metadata, TypingMessage content)
        {
            SignalServiceTypingMessage.Action action;

            if (content.Action == push.TypingMessage.Types.Action.Started)
            {
                action = SignalServiceTypingMessage.Action.STARTED;
            }
            else if (content.Action == push.TypingMessage.Types.Action.Stopped)
            {
                action = SignalServiceTypingMessage.Action.STOPPED;
            }
            else
            {
                action = SignalServiceTypingMessage.Action.UNKNOWN;
            }

            if (content.HasTimestamp && (long)content.Timestamp != metadata.Timestamp)
            {
                throw new ProtocolInvalidMessageException(new InvalidMessageException($"Timestamps don't match: {content.Timestamp} vs {metadata.Timestamp}"),
                                                          metadata.Sender.GetIdentifier(),
                                                          metadata.SenderDevice);
            }

            return(new SignalServiceTypingMessage(action, (long)content.Timestamp,
                                                  content.HasGroupId ? content.GroupId.ToByteArray() : null));
        }