@page "/" @using Frontend.Models @using Frontend.Services @using Katheryne @using Katheryne.Abstractions @inject IChatRobotFactory ChatRobotFactory @inject GrammarStorageService GrammarStorage @inject DefaultChatRobot DefaultRobot
@if (context.Selected) {

@context.Title

} else {

@context.Title

}
@code { private readonly Dictionary _chatDictionary = new(); private Guid _currentGuid; protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { await GrammarStorage.RestoreGrammar(); Chat chat = GetInitChat(); _chatDictionary.Add(chat.Guid, chat); _currentGuid = chat.Guid; StateHasChanged(); } await base.OnInitializedAsync(); } private void CreateChatClicked() { Chat chat = GetInitChat(); _chatDictionary.Add(chat.Guid, chat); _chatDictionary[_currentGuid].Selected = false; _currentGuid = chat.Guid; _chatDictionary[_currentGuid].Selected = true; } private void ChangeChatClicked(Guid guid) { _chatDictionary[_currentGuid].Selected = false; _currentGuid = guid; _chatDictionary[_currentGuid].Selected = true; } private Chat GetInitChat() { var chat = new Chat { Title = $"对话:{_chatDictionary.Count + 1}", Robot = ChatRobotFactory.GetRobot() }; foreach (string answer in chat.Robot.OnChatStart()) { chat.Messages.Add(new ChatMessage { Sender = chat.Robot.RobotName, Left = true, Text = answer }); } chat.Selected = true; return chat; } private List GetChatMessages() { return _chatDictionary.TryGetValue(_currentGuid, out Chat? chat) ? chat.Messages : new List(); } private IChatRobot GetChatRobot() { return _chatDictionary.TryGetValue(_currentGuid, out Chat? chat) ? chat.Robot : DefaultRobot; } }