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)); }