Beispiel #1
0
        /// <summary>
        /// Try apply text from user message to current active session.
        /// </summary>
        /// <param name="userId">User unique identifier.</param>
        /// <param name="text">Text for applying to session.</param>
        /// <param name="messages">Messages to user in abstract form.</param>
        protected bool TryApplyMessageTextToSession(TUserId userId, string text,
                                                    out IEnumerable <MessageAbstraction> messages)
        {
            if (SessionManager.TryGetSessionFromId(GetUserGlobalId(userId), out var session))
            {
                var result = session.ApplyMessageText(text);

                var sessionTypeName = session.GetType().Name;
                Logger?.LogInformation($"Session \"{sessionTypeName}\" applied message from user {userId}");

                if (result is SessionResultWithSaveData data)
                {
                    SaveDataFromSession(userId, data.SaveData);
                }

                ProcessCustomDataFromSessionResult(userId, result);

                messages = result.Messages;

                if (result.SessionEnd)
                {
                    SessionManager.CloseUserSession(GetUserGlobalId(userId));
                    messages = messages.AttachMessages(GetTemplateMessageAfterSessionEnd(userId));
                }

                return(true);
            }

            messages = null;
            return(false);
        }