Example #1
0
        public override async Task OnDisconnectedAsync(Exception exception)
        {
            try
            {
                string name = Context.User.Identity.Name;
                if (name != null)
                {
                    var user = await _userManager.FindByIdAsync(name);

                    var isPatient = await _userManager.IsInRoleAsync(user, "patient");

                    if (isPatient)
                    {
                        var patient = await _patientIManager.GetPatientDetails(name);

                        var roomName = await _commonManager.GetRoomNameForParticipant(new CallParticipantModel
                        {
                            ParticipantId = patient.PatientId,
                            SocketId      = Context.ConnectionId
                        });

                        await Clients.Group(roomName).SendAsync("ParticipantDisconnected", new JObject
                        {
                            ["PatientId"] = patient.PatientId,
                        }.ToString());
                    }
                    else
                    {
                        var provider = await _providerManager.GetProviderDetails(name);

                        var rooms = await _providerManager.GetAllWaitingRooms(provider.ProviderId);

                        foreach (var room in rooms)
                        {
                            await Clients.Group(room.RoomName).SendAsync("DoctorOffline", new JObject
                            {
                                ["ProviderId"] = provider.ProviderId
                            }.ToString());
                        }
                        await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users");

                        await base.OnDisconnectedAsync(exception);
                    }
                }
            }
            catch (Exception ex)
            {
                await Clients.Caller.SendAsync("Exception", new JObject
                {
                    ["error"]      = ex.Message,
                    ["stackTrace"] = ex.StackTrace
                }.ToString());
            }
        }