public override Task OnDisconnectedAsync(Exception exception) { return(Task.Run(() => { userConnectionsService.ChatConnectionService.Remove(Context.User, Context.ConnectionId); foreach (var chatRoom in chatRoomService.GetChatRooms()) { if (chatRoom.HasParticipant(Context.User)) { var apiObject = new ChatRoomLeave { LeavingUser = Context.User.ApiGetUser(), ChatRoom = chatRoom.ApiChatRoom() }; chatRoom.RemoveParticipant(Context.User); foreach (var participant in chatRoom.GetParticipants()) { var connection = userConnectionsService.ChatConnectionService.GetConnection(participant); if (connection == null) { continue; } Clients.Client(connection).ChatRoomLeave(apiObject); } } } var disconnectedUserApiObject = new ChatUserDisconnected { DisconnectedUser = Context.User.ApiGetUser() }; foreach (var connection in userConnectionsService.ChatConnectionService.GetUserConnections()) { Clients.Client(connection).ChatUserDisconnected(disconnectedUserApiObject); } return base.OnDisconnectedAsync(exception); })); }
public static Task ChatRoomLeave(this IClientProxy hubConnection, ChatRoomLeave apiObject) { return(hubConnection.SendAsync(ChatHubApiKeys.ChatRoomLeave, apiObject)); }