private bool IsLastMessageOld(IContribution newContribution)
        {
            const int TimeThresholdInSeconds = 10;
            TimeSpan  duration = newContribution.ContributionTimeStamp - lastMessageSentDate;

            return(duration.TotalSeconds > TimeThresholdInSeconds);
        }
        SignListViewModel signListViewModel; //签到信息视图模型

        public SignController(ISignInfo signInfo, IGameMember gameMember, IContribution contribution, IMemberGroup memberGroup)
        {
            EFSignInfo     = signInfo;
            EFGameMember   = gameMember;
            EFContribution = contribution;
            EFMemberGroup  = memberGroup;
        }
 private Run FormatUser(IContribution contribution)
 {
     return(new Run(userRepository.FindEntityById(contribution.ContributorUserId).Username)
     {
         FontWeight = FontWeights.Bold
     });
 }
        MemberGroupListViewModel MemberGroupListViewModel; //社团分组表视图

        public MemberGroupController(IMemberGroup memberGroup, IGameMember gameMember, ISignInfo signInfo, IContribution contribution)
        {
            EFMemberGroup  = memberGroup;
            EFGameMember   = gameMember;
            EFSignInfo     = signInfo;
            EFContribution = contribution;
        }
            public void NewContributionGetsAssignedId()
            {
                HandleMessage(contributionRequest);
                Conversation  contributionConversation = ConversationRepository.FindEntityById(contributionRequest.Contribution.ConversationId);
                IContribution lastContributionAdded    = contributionConversation.LastContribution;

                Assert.IsTrue(lastContributionAdded.Id != 0);
            }
            public void AddsNewContributionToConversation()
            {
                HandleMessage(contributionRequest);
                Conversation  contributionConversation = ConversationRepository.FindEntityById(contributionRequest.Contribution.ConversationId);
                IContribution lastContributionAdded    = contributionConversation.LastContribution;

                Assert.IsTrue(lastContributionAdded.ContributorUserId.Equals(contributionRequest.Contribution.ContributorUserId));
            }
        /// <summary>
        /// Adds a contribution to a current conversation in the repository.
        /// </summary>
        /// <param name="contribution"></param>
        public void AddContributionToConversation(IContribution contribution)
        {
            Conversation conversation         = FindEntityById(contribution.ConversationId);
            Conversation previousConversation = conversation.CreateLightweightCopy();

            conversation.AddContribution(contribution);

            OnEntityUpdated(conversation, previousConversation);
        }
 private static Run FormatTimeStamp(IContribution contribution)
 {
     return(new Run(contribution.ContributionTimeStamp.ToString("HH:mm:ss dd/MM/yyyy", new CultureInfo("en-GB")))
     {
         FontSize = 10,
         FontStyle = FontStyles.Italic,
         Foreground = Brushes.DarkGray
     });
 }
        private void OnContributionAdded(IContribution contribution)
        {
            var contributionNotification = new EntityNotification <IContribution>(contribution, NotificationType.Create);

            List <Participation> participationsByConversationId = participationRepository.GetParticipationsByConversationId(contribution.ConversationId);

            IEnumerable <User> participantUsers = participationsByConversationId.Select(participant => userRepository.FindEntityById(participant.UserId));

            IEnumerable <int> connectedUserIds = participantUsers.Where(user => user.ConnectionStatus.UserConnectionStatus == ConnectionStatus.Status.Connected).Select(user => user.Id);

            ClientManager.SendMessageToClients(contributionNotification, connectedUserIds);
        }
        /// <summary>
        /// Formats a contribution to be viewable on the screen. To be used with a <see cref="FlowDocument" />.
        /// </summary>
        /// <param name="contribution">The <see cref="TextContribution" /> to format.</param>
        /// <returns>A <see cref="Paragraph" /> that is added to a <see cref="FlowDocument" /> to be sent to a view Control.</returns>
        public Paragraph FormatContribution(IContribution contribution)
        {
            Paragraph paragraph = FormatParagraph(contribution);
            Run       user      = FormatUser(contribution);

            // Here will decide whether the contribution is text or image
            var textContribution = contribution as TextContribution;

            Run message = null;

            InlineUIContainer test = null;

            if (textContribution != null)
            {
                message = FormatMessageBody(textContribution);
            }
            else
            {
                test = FormatMessageBody((ImageContribution)contribution);
            }

            Run timeStamp = FormatTimeStamp(contribution);

            if (!IsSameSenderAsLastContribution(contribution.ContributorUserId))
            {
                paragraph.Inlines.Add(user);
                paragraph.Inlines.Add(new LineBreak());
            }

            if (message != null)
            {
                paragraph.Inlines.Add(message);
            }
            if (test != null)
            {
                paragraph.Inlines.Add(test);
            }

            if (IsLastMessageOld(contribution))
            {
                paragraph.Inlines.Add(new LineBreak());
                paragraph.Inlines.Add(timeStamp);
            }

            lastUserId          = contribution.ContributorUserId;
            lastMessageSentDate = contribution.ContributionTimeStamp;

            return(paragraph);
        }
        private void OnContributionAdded(IContribution contribution)
        {
            if (contribution.ConversationId == groupChat.Conversation.Id)
            {
                Application.Current.Dispatcher.Invoke(() =>
                {
                    FlowDocument messages = GroupChat.Messages;
                    messages.Blocks.Add(contributionMessageFormatter.FormatContribution(contribution));
                    GroupChat.Messages = messages;
                });

                if (groupChat.Conversation.LastContribution.ContributorUserId != clientService.ClientUserId)
                {
                    audioPlayer.Play(Resources.Chat_Notification_Sound);
                }
            }
        }
Example #12
0
        protected override void HandleMessage(ContributionRequest message)
        {
            var conversationRepository = (ConversationRepository)ServiceRegistry.GetService <RepositoryManager>().GetRepository <Conversation>();

            var entityIdAllocatorFactory = ServiceRegistry.GetService <EntityIdAllocatorFactory>();

            IContribution newContribution;

            IContribution contribution = message.Contribution;

            switch (contribution.ContributionType)
            {
            case ContributionType.Text:
                newContribution = new TextContribution(entityIdAllocatorFactory.AllocateEntityId <IContribution>(), (TextContribution)contribution);
                conversationRepository.AddContributionToConversation(newContribution);
                break;

            case ContributionType.Image:
                newContribution = new ImageContribution(entityIdAllocatorFactory.AllocateEntityId <IContribution>(), (ImageContribution)contribution);
                conversationRepository.AddContributionToConversation(newContribution);
                break;
            }
        }
        private Paragraph FormatParagraph(IContribution contribution)
        {
            TextAlignment alignment = IsContributor(contribution.ContributorUserId) ? TextAlignment.Right : TextAlignment.Left;
            Brush         brush     = IsContributor(contribution.ContributorUserId) ? senderBackground : receiverBackground;

            var marginSpacing  = 50;
            var messageSpacing = 2;

            if (!IsSameSenderAsLastContribution(contribution.ContributorUserId))
            {
                messageSpacing = 20;
            }

            Thickness messageMargin = IsContributor(contribution.ContributorUserId)
                ? new Thickness(marginSpacing, messageSpacing, 0, 0)
                : new Thickness(0, messageSpacing, marginSpacing, 0);

            return(new Paragraph
            {
                TextAlignment = alignment,
                Background = brush,
                Margin = messageMargin
            });
        }
 public ContributionRequest(IContribution contribution)
 {
     Contribution = contribution;
 }
Example #15
0
 /// <summary>
 /// Adds an <see cref="IContribution" /> entity to this conversation.
 /// The contribution's conversation Id must match this conversation's Id.
 /// </summary>
 public void AddContribution(IContribution newContribution)
 {
     contributionsIndexedByContributionId.Add(newContribution.Id, newContribution);
 }
Example #16
0
        private void OnContributionAdded(IContribution contribution)
        {
            Conversation conversation = conversationRepository.FindEntityById(contribution.ConversationId);

            ConversationWindowManager.CreateConversationWindow(ServiceRegistry, conversation);
        }