Example #1
0
        public async Task Send(string message, string receiverId)
        {
            var senderId = this.userManager.GetUserId(this.Context.User);
            var sender   = await this.userManager.FindByIdAsync(senderId);

            var messageId = await this.messagesService.CreateAsync(senderId, receiverId, message);

            var messageViewModel = this.messagesService.GetByIdAsViewModel(messageId);

            var chatViewModelForCurrentUser = new MessageChatViewModel()
            {
                SenderName           = sender.UserName,
                SentOn               = messageViewModel.SentOn.ToLocalTime().ToString(),
                Text                 = message,
                IsCurrentUserMessage = true,
            };

            var chatViewModelForOtherUser = new MessageChatViewModel()
            {
                SenderName           = sender.UserName,
                SentOn               = messageViewModel.SentOn.ToLocalTime().ToString(),
                Text                 = message,
                IsCurrentUserMessage = false,
            };

            await this.Clients.Users(receiverId).SendAsync(
                "NewMessage",
                chatViewModelForOtherUser);

            await this.Clients.Caller.SendAsync(
                "NewMessage",
                chatViewModelForCurrentUser);
        }
        private void OnSignalReceived(object sender, OTSessionDelegateSignalEventArgs e)
        {
            try
            {
                messagesOpentok = JsonConvert.DeserializeObject <MessagesOpentok>(e.StringData);

                if (e.Type == "infoCall")
                {
                    _medicalVideoCall.LoadCallHistoryId(messagesOpentok);
                    _medicalVideoCall.ServiceDate   = messagesOpentok.ServiceDate;
                    _medicalVideoCall.ServiceNumber = messagesOpentok.ServiceNumber;
                }

                if (!String.IsNullOrEmpty(messagesOpentok.from))
                {
                    _medicalVideoCall.VideoCallStatusAsync(messagesOpentok.type, messagesOpentok.info?.doctorName, true);
                }

                if (e.Type.Equals("call") && messagesOpentok.type == 1 && Session.Connection.ConnectionId != e.Connection.ConnectionId)
                {
                    InvitedConnection = e.Connection;
                }

                SendMessageAsync($"{{\"msg\":\"OK\",\"type\":1}}", "chat", true);
                SendMessageAsync($"{{\"status\":1}}", "file", true);

                if (e.Type.Equals("file"))
                {
                    if (messagesOpentok.status == 3)
                    {
                        _medicalVideoCall.EnableUpload = true;
                    }
                    else if (messagesOpentok.status == 2)
                    {
                        _medicalVideoCall.EnableUpload = false;
                    }
                }

                if (e.Type.Equals("chat"))
                {
                    MessageChatViewModel message;
                    if (messagesOpentok.type == 2)
                    {
                        message = new MessageChatViewModel
                        {
                            Text         = messagesOpentok.msg,
                            User         = "******",
                            CompleteName = $"Dr. {_medicalVideoCall.DoctorName}",
                            IsFile       = false
                        };
                        _medicalVideoCall.EnableChat = true;
                        _medicalVideoCall.Messages.Insert(0, message);
                    }
                    else if (messagesOpentok.type == 3)
                    {
                        message = new MessageChatViewModel
                        {
                            UrlFile      = messagesOpentok.UrlFile,
                            Text         = messagesOpentok.msg,
                            User         = "******",
                            CompleteName = $"Dr. {_medicalVideoCall.DoctorName}",
                            IsFile       = true
                        };
                        _medicalVideoCall.EnableChat = true;
                        _medicalVideoCall.Messages.Insert(0, message);
                    }
                }


                RaiseMessageReceived(e.StringData);
            }
            catch (Exception ex)
            {
                ServiceLocator.Current.GetInstance <IExceptionService>().RegisterException(ex);
            }
        }