示例#1
0
        public async Task ParticipantJoined(string message)
        {
            try
            {
                JObject objMessage          = JObject.Parse(message);
                int     RoomId              = (int)objMessage["RoomId"];
                int     AppointmentId       = (int)objMessage["AppointmentId"];
                var     appointmmentDetails = await _providerManager.GetAppointmentDetailsById(AppointmentId);

                await Groups.AddToGroupAsync(Context.ConnectionId, appointmmentDetails.RoomSID);

                if ((string)objMessage["Role"] == "patient")
                {
                    var room = await _providerManager.GetRoomDetails(RoomId);

                    await Groups.AddToGroupAsync(Context.ConnectionId, room.RoomName);

                    var socketids = await _providerManager.GetProviderToken(RoomId);

                    int PatientId      = (int)objMessage["ParticipantId"];
                    var patientDetails = await _patientIManager.GetPatientDetailsById(PatientId);

                    string HostName  = (string)objMessage["HostName"];
                    var    providers = await _providerManager.GetAllMappedProvidersForRoom(RoomId);

                    foreach (ProviderModel pm in providers)
                    {
                        if (pm.AllowEmail)
                        {
                            try
                            {
                                var body = await _providerManager.GetPatientEmailBody(new EmailModel
                                {
                                    UserId   = pm.UserId,
                                    HostName = HostName,
                                    RoomId   = RoomId
                                }, $"{patientDetails.FirstName} {patientDetails.LastName}");

                                await _emailService.SendEmail(pm.Email, body, "Patient Joined Waiting room.");
                            }catch (Exception ex)
                            {
                            }
                        }
                    }
                    await _commonManager.UpdatePariticpantSocketId(new CallParticipantModel
                    {
                        ParticipantId = PatientId,
                        RoomId        = RoomId,
                        AppointmentId = (int)objMessage["AppointmentId"],
                        SocketId      = Context.ConnectionId,
                        Role          = (string)objMessage["Role"],
                        Name          = $"{patientDetails.FirstName} {patientDetails.LastName}",
                    });

                    foreach (string socketid in socketids)
                    {
                        await Clients.Client(socketid).SendAsync("PatientJoined", new JObject
                        {
                            ["AppointmentId"] = objMessage["AppointmentId"],
                            ["SessionId"]     = objMessage["SessionId"],
                            ["PatientId"]     = PatientId,
                            ["Name"]          = $"{patientDetails.FirstName} {patientDetails.LastName}",
                            ["ProfileImage"]  = objMessage["ProfileImage"],
                            ["RoomId"]        = RoomId
                        }.ToString());
                    }
                }
                else
                {
                    int Provider        = (int)objMessage["ParticipantId"];
                    var lstParticipants = await _commonManager.GetParticipants(RoomId);

                    var providerDetails = await _providerManager.GetProviderDetailsById(Provider);

                    var participants = await _commonManager.GetParticipants(RoomId);

                    var roomDetails = await _providerManager.GetRoomDetails(RoomId);

                    await Clients.Group(roomDetails.RoomName).SendAsync("onDocStatusSchange", new JObject
                    {
                        ["status"] = "onCallOrange"
                    }.ToString());

                    foreach (CallParticipantModel mod in participants)
                    {
                        await Clients.Client(mod.SocketId).SendAsync("DoctorJoined", new JObject
                        {
                            ["Name"]         = $"{providerDetails.FirstName} {providerDetails.LastName}",
                            ["ProfileImage"] = objMessage["ProfileImage"],
                            ["RoomId"]       = RoomId
                        }.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                await Clients.Caller.SendAsync("Exception", new JObject
                {
                    ["error"]      = ex.Message,
                    ["stackTrace"] = ex.StackTrace
                }.ToString());
            }
        }