private async Task SendStatus(int userId, UserConnectionStatus status) { // Get opponents from this user chats to var receiversList = _unitOfWork.Repository <Chat>().Get(x => x.Users.Any(y => y.UserId == userId)) .TagWith(nameof(SendStatus) + "_GetReceiversList") .SelectMany(x => x.Users .Where(y => y.UserId != userId && y.IsActive) .Select(y => y.UserId)) .Distinct() .ToList(); var socketsData = WebSocketConnectionManager .Get(x => x.Socket.State == WebSocketState.Open && x.Data.UserId != userId && receiversList.Contains(x.Data.UserId)) .ToList(); // Create message var message = new WebSocketEventResponseModel { EventType = WebSocketEventType.OnlineStatusChanged, Data = new UserStatusResponseModel { UserId = userId, Status = status } }; var serializedMessage = JsonConvert.SerializeObject(message); foreach (var socketData in socketsData) { await SendMessageAsync(socketData.Socket, serializedMessage); } }
private static ConnectionStatus GetStatus(UserConnectionStatus status) { switch (status) { case UserConnectionStatus.ACCEPTED: return(ConnectionStatus.Accepted); case UserConnectionStatus.PENDING_INCOMING: return(ConnectionStatus.PendingIncoming); case UserConnectionStatus.PENDING_OUTGOING: return(ConnectionStatus.PendingOutgoing); case UserConnectionStatus.REJECTED: return(ConnectionStatus.Rejected); default: throw new ApiException($"Invalid status {status}.", null, 0); } }