示例#1
0
        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);
            }
        }