/// <summary> /// Handles incoming <see cref="ChatMessageResponsePacket"/>s. /// </summary> /// <param name="connectionId">Original connection ID</param> /// <param name="packet">Incoming packet</param> private void chatMessageResponsePacketHandler(string connectionId, ChatMessageResponsePacket packet) { lock (messageHistoryLock) { ClientChatMessage message; try { // Try get a message with a corresponding original message ID message = messageHistory.Single(m => m.MessageId == packet.OriginalMessageId); } catch (InvalidOperationException) { RaiseLogEntry(new LogEventArgs(string.Format("Got a ChatMessageResponsePacket with an unknown original message ID ({0})", packet.OriginalMessageId), LogLevel.WARNING)); // Stop here return; } // Update the message ID message.MessageId = packet.NewMessageId; if (packet.Success) { // Update the message content and confirm it message.Message = packet.Message; message.Status = ChatMessageStatus.CONFIRMED; } else { // Deny the message but don't overwrite the content message.Status = ChatMessageStatus.DENIED; } } }
/// <summary> /// Creates and sends a <see cref="ChatMessageResponsePacket"/> to the given connection ID. /// </summary> /// <param name="connectionId">Destination connection ID</param> /// <param name="success">Whether the chat message was processed successfully</param> /// <param name="originalMessageId">Original message ID</param> /// <param name="newMessageId">Newly-generated message ID</param> /// <param name="message">Message content</param> private void sendChatMessageResponse(string connectionId, bool success, string originalMessageId, string newMessageId, string message) { // Prepare and pack a ChatMessageResponsePacket ChatMessageResponsePacket packet = new ChatMessageResponsePacket { Success = success, OriginalMessageId = originalMessageId, NewMessageId = newMessageId, Message = message }; Any packedPacket = ProtobufPacketHelper.Pack(packet); // Send it on its way if (!netServer.TrySend(connectionId, MODULE_NAME, packedPacket.ToByteArray())) { RaiseLogEntry(new LogEventArgs("Failed to send ChatMessageResponsePacket to connection " + connectionId.Highlight(HighlightType.ConnectionID), LogLevel.ERROR)); } }