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()); } }