public ConversationViewModelActor(ConversationMessages.ConversationStarted conversationMetadata)
        {
            _conversationMetadata = conversationMetadata;

            Receive<AssociateWithViewModel>(msg => AssociateAndSetParticipants(msg));
            Receive<ConversationMessages.OutgoingChatMessage>(msg => HandleOutgoingMessage(msg));
            Receive<ConversationMessages.IncomingChatMessage>(msg => HandleIncomingMessage(msg));

            Receive<ClientsActor.ClientStatusQueryResponse>(msg => UpdateClientList(msg));
            Context.ActorSelection(ClientActorPaths.ClientsActor.Path).Tell(new ClientsActor.ClientStatusQuery(conversationMetadata.Clients));

            Receive<ClientTracking.ClientChanged>(
                change =>
                {
                    var participant = _viewModel.Participants.FirstOrDefault(p => p.Id == change.Client.ClientId);
                    if (participant != null) participant.Status = change.Client.Status;
                });

            Receive<ClientTracking.ClientConnected>(
                connect =>
                {
                    var participant = _viewModel.Participants.FirstOrDefault(p => p.Id == connect.Client.ClientId);
                    if (participant != null) participant.Status = connect.Client.Status;
                });

            Receive<ClientTracking.ClientDisconnected>(
                disconect =>
                {
                    var participant = _viewModel.Participants.FirstOrDefault(p => p.Id == disconect.Client.ClientId);
                    if (participant != null) participant.Status = ClientStatus.Offline;
                });
        }
Example #2
0
        private void GreetClients(ConversationCoordinatorActor.StartConversation msg)
        {
            _participants = msg.Participants.ToList();

            var response = new ConversationMessages.ConversationStarted(_conversationId, _participants.Select(p => p.ClientId).ToList());

            foreach (var participant in _participants)
            {
                participant.MessagingHandler.Tell(response);
            }
        }