Пример #1
0
        static async Task OnMessage(
            IWebSocketConnection connection,
            SessionManagementService sessionManagement,
            WebSocketConnectionManager webSocketConnectionManager,
            ApplicationDbContext applicationDbContext,
            string message)
        {
            var json = JObject.Parse(message);

            if (json["type"].ToString() == "message")
            {
                var sessionId = json["sessionId"].ToString();
                var chatName  = json["chatName"].ToString();

                var chatId = applicationDbContext.ChatRooms.FirstOrDefault(p => p.Title == chatName).Id;

                var userId = sessionManagement.GetUserBySession(sessionId);
                var user   = applicationDbContext.ApplicationUsers.Find(userId);

                applicationDbContext.ChatMessages.Add(new ChatMessage()
                {
                    Body = message,
                    SenderApplicationUserId = (int)userId,
                    ChatRoomId = chatId
                });
                applicationDbContext.SaveChanges();

                webSocketConnectionManager.AddSocketConnection(sessionId, connection);

                foreach (var activeConnection in webSocketConnectionManager.GetAllActiveConnections())
                {
                    await activeConnection.Send(message);
                }
            }
            else if (json["type"].ToString() == "REQ")
            {
                var sessionId = json["sessionId"].ToString();
                var chatName  = json["chatName"].ToString();

                var chatId = applicationDbContext.ChatRooms.FirstOrDefault(p => p.Title == chatName).Id;

                var chatMessages = applicationDbContext.ChatMessages.Where(p => p.ChatRoomId == chatId).ToList();

                webSocketConnectionManager.AddSocketConnection(sessionId, connection);

                var webSocket = webSocketConnectionManager.GetConnectionBySession(sessionId);

                foreach (var mes in chatMessages)
                {
                    webSocket.Send(mes.Body);
                }
            }
        }
Пример #2
0
        static async Task OnMessage(
            IWebSocketConnection connection,
            SessionManagementService sessionManagement,
            WebSocketConnectionManager webSocketConnectionManager,
            ApplicationDbContext applicationDbContext,
            string message)
        {
            var json      = JObject.Parse(message);
            var sessionId = json["sessionId"].ToString();

            var userId = sessionManagement.GetUserBySession(sessionId);
            var user   = applicationDbContext.ApplicationUsers.Find(userId);

            webSocketConnectionManager.AddSocketConnection(sessionId, connection);

            foreach (var activeConnection in webSocketConnectionManager.GetAllActiveConnections())
            {
                await activeConnection.Send($"Пользователь {user.PhoneNumber} онлайн!");
            }

            await connection.Send("OK");
        }