From fa45c32020b68cf3a491d1d88e956d56a16bbdaf Mon Sep 17 00:00:00 2001 From: ren Date: Fri, 31 May 2024 23:24:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D0=B8=D0=B1=D0=BB.=20=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LauncherDM/Properties/Resources.Designer.cs | 38 ++- LauncherDM/Properties/Resources.en.resx | 12 + LauncherDM/Properties/Resources.resx | 12 + LauncherDM/Services/DialogWindowService.cs | 4 +- .../Interfaces/ILibraryUserControlService.cs | 7 +- .../Services/LibraryUserControlService.cs | 40 ++- LauncherDM/Services/ServerRequestService.cs | 6 +- LauncherDM/Styles/Other/ButtonStyle.xaml | 67 +++++ LauncherDM/Styles/Other/TextBlockStyle.xaml | 5 + LauncherDM/ViewModels/ItemsViewModel.cs | 11 +- .../ViewModels/LibrarySelectItemViewModel.cs | 1 + .../ViewModels/LibraryUserControlViewModel.cs | 265 +++++++++++++++++- LauncherDM/ViewModels/MainWindowViewModel.cs | 14 +- LauncherDM/ViewModels/SelectItemViewModel.cs | 11 +- .../ViewModels/StoreUserControlViewModel.cs | 26 +- .../UserControls/LibraryUserControl.xaml | 79 +++++- ServerTCP/DataBase/DataBaseCommands.cs | 35 ++- ServerTCP/MessageHeader.cs | 29 +- ServerTCP/Models/SaleGames.cs | 8 +- ServerTCP/Models/SalePrograms.cs | 7 +- ServerTCP/Program.cs | 48 ++++ ServerTCP/Token.cs | 4 +- 22 files changed, 686 insertions(+), 43 deletions(-) diff --git a/LauncherDM/Properties/Resources.Designer.cs b/LauncherDM/Properties/Resources.Designer.cs index 29d41ac..8254a7e 100644 --- a/LauncherDM/Properties/Resources.Designer.cs +++ b/LauncherDM/Properties/Resources.Designer.cs @@ -187,6 +187,15 @@ internal static string DeleteAccount { } } + /// + /// Ищет локализованную строку, похожую на СКАЧАТЬ. + /// + internal static string Download { + get { + return ResourceManager.GetString("Download", resourceCulture); + } + } + /// /// Ищет локализованную строку, похожую на Почта. /// @@ -286,6 +295,15 @@ internal static string Friends { } } + /// + /// Ищет локализованную строку, похожую на Игра. + /// + internal static string Game { + get { + return ResourceManager.GetString("Game", resourceCulture); + } + } + /// /// Ищет локализованную строку, похожую на Игры. /// @@ -296,7 +314,7 @@ internal static string Games { } /// - /// Ищет локализованную строку, похожую на . + /// Ищет локализованную строку, похожую на В библиотеке. /// internal static string InTheLibrary { get { @@ -424,6 +442,15 @@ internal static string PasswordError { } } + /// + /// Ищет локализованную строку, похожую на Программа . + /// + internal static string Program { + get { + return ResourceManager.GetString("Program", resourceCulture); + } + } + /// /// Ищет локализованную строку, похожую на Программы. /// @@ -460,6 +487,15 @@ internal static string RememberPassword { } } + /// + /// Ищет локализованную строку, похожую на . + /// + internal static string Run { + get { + return ResourceManager.GetString("Run", resourceCulture); + } + } + /// /// Ищет локализованную строку, похожую на Русский. /// diff --git a/LauncherDM/Properties/Resources.en.resx b/LauncherDM/Properties/Resources.en.resx index 229ed59..187b205 100644 --- a/LauncherDM/Properties/Resources.en.resx +++ b/LauncherDM/Properties/Resources.en.resx @@ -164,4 +164,16 @@ In the library + + Game + + + Program + + + DOWNLOAD + + + RUN + \ No newline at end of file diff --git a/LauncherDM/Properties/Resources.resx b/LauncherDM/Properties/Resources.resx index ce5eb00..3331c1f 100644 --- a/LauncherDM/Properties/Resources.resx +++ b/LauncherDM/Properties/Resources.resx @@ -286,4 +286,16 @@ В библиотеке + + Игра + + + Программа + + + СКАЧАТЬ + + + ЗАПУСТИТЬ + \ No newline at end of file diff --git a/LauncherDM/Services/DialogWindowService.cs b/LauncherDM/Services/DialogWindowService.cs index c223368..942b3ed 100644 --- a/LauncherDM/Services/DialogWindowService.cs +++ b/LauncherDM/Services/DialogWindowService.cs @@ -102,9 +102,11 @@ public void OpenAccountRecovery() public void OpenMainWindow() { var mainWindow = new MainWindow(); - mainWindow.DataContext = new MainWindowViewModel(mainWindow.Close, mainWindow.DragMove, + var MainWindowVM = new MainWindowViewModel(mainWindow.Close, mainWindow.DragMove, new ToolbarToWindowViewModel(new WindowService(mainWindow), mainWindow.Hide, widthMax: 30), ResourcesHelper, ServerRequest); + mainWindow.DataContext = MainWindowVM; + UpdateUI.PullUi.Subscribe(MainWindowVM); mainWindow.Owner = Application.Current.MainWindow; mainWindow.Show(); } diff --git a/LauncherDM/Services/Interfaces/ILibraryUserControlService.cs b/LauncherDM/Services/Interfaces/ILibraryUserControlService.cs index 515eac4..bb425c6 100644 --- a/LauncherDM/Services/Interfaces/ILibraryUserControlService.cs +++ b/LauncherDM/Services/Interfaces/ILibraryUserControlService.cs @@ -1,4 +1,5 @@ -using System; +using ServerTCP.Models; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,6 +9,8 @@ namespace LauncherDM.Services.Interfaces { interface ILibraryUserControlService { - string GetAllItems(); + SaleGamesForXml GetGamesItem(); + + SaleProgramsForXml GetProgramItem(); } } diff --git a/LauncherDM/Services/LibraryUserControlService.cs b/LauncherDM/Services/LibraryUserControlService.cs index 3d26260..513082b 100644 --- a/LauncherDM/Services/LibraryUserControlService.cs +++ b/LauncherDM/Services/LibraryUserControlService.cs @@ -1,5 +1,8 @@ using LauncherDM.Services.Interfaces; using ServerTCP; +using ServerTCP.Models; +using System.IO; +using System.Xml.Serialization; namespace LauncherDM.Services { @@ -12,10 +15,41 @@ public LibraryUserControlService(ServerRequestService serverRequest) _serverRequest = serverRequest; } - public string GetAllItems() + public SaleGamesForXml GetGamesItem() { - var requestMessageServer = _serverRequest.SendMessageRequest(MessageHeader.MessageType.AllGamesOrPrograms, true); - return requestMessageServer.Message.ToString(); + var requestMessageServer = _serverRequest.SendMessageRequest(MessageHeader.MessageType.GamesItemUser, true); + var xml = new XmlSerializer(typeof(SaleGamesForXml)); + var programsForXml = new SaleGamesForXml(); + using (StringReader textReader = new StringReader(requestMessageServer.Message.ToString())) + { + try + { + programsForXml = (SaleGamesForXml)xml.Deserialize(textReader); + } + catch + { } + } + return programsForXml; } + + SaleProgramsForXml ILibraryUserControlService.GetProgramItem() + { + var requestMessageServer = _serverRequest.SendMessageRequest(MessageHeader.MessageType.ProgramsItemUser, true); + + var xml = new XmlSerializer(typeof(SaleProgramsForXml)); + var programsForXml = new SaleProgramsForXml(); + using (StringReader textReader = new StringReader(requestMessageServer.Message.ToString())) + { + try + { + programsForXml = (SaleProgramsForXml)xml.Deserialize(textReader); + } + catch + { } + } + return programsForXml; + } + + } } diff --git a/LauncherDM/Services/ServerRequestService.cs b/LauncherDM/Services/ServerRequestService.cs index fb8ccdb..b0fe38c 100644 --- a/LauncherDM/Services/ServerRequestService.cs +++ b/LauncherDM/Services/ServerRequestService.cs @@ -73,7 +73,11 @@ public MessageHeader SendMessageRequest(MessageHeader.MessageType messageType, b tcpClient = new TcpClient(); tcpClient.Connect(_endPoint); - var messageHeader = new MessageHeader(messageType, MessageLanguages.Language); + MessageHeader messageHeader = null; + if (loadToken) + messageHeader = new MessageHeader(messageType, MessageLanguages.Language, SettingsApp.Default.Token); + else + messageHeader = new MessageHeader(messageType, MessageLanguages.Language); byte[] headerBytes = messageHeader.MessageToArray(loadToken); NetworkStream tcpStream = tcpClient.GetStream(); tcpStream.Write(headerBytes); diff --git a/LauncherDM/Styles/Other/ButtonStyle.xaml b/LauncherDM/Styles/Other/ButtonStyle.xaml index a9c6947..b11d83e 100644 --- a/LauncherDM/Styles/Other/ButtonStyle.xaml +++ b/LauncherDM/Styles/Other/ButtonStyle.xaml @@ -568,4 +568,71 @@ --> + + + + + \ No newline at end of file diff --git a/LauncherDM/Styles/Other/TextBlockStyle.xaml b/LauncherDM/Styles/Other/TextBlockStyle.xaml index e18c2b8..70c6b0d 100644 --- a/LauncherDM/Styles/Other/TextBlockStyle.xaml +++ b/LauncherDM/Styles/Other/TextBlockStyle.xaml @@ -20,4 +20,9 @@ + + \ No newline at end of file diff --git a/LauncherDM/ViewModels/ItemsViewModel.cs b/LauncherDM/ViewModels/ItemsViewModel.cs index 236cddf..5038031 100644 --- a/LauncherDM/ViewModels/ItemsViewModel.cs +++ b/LauncherDM/ViewModels/ItemsViewModel.cs @@ -1,11 +1,12 @@ using LauncherDM.Infastructure.Commands; using LauncherDM.Infastructure.Commands.Base; +using LauncherDM.Infrastructure.ReactiveUI; using ServerTCP; using ServerTCP.Models; namespace LauncherDM.ViewModels { - internal class ItemsViewModel : ViewModel.Base.ViewModel + internal class ItemsViewModel : ViewModel.Base.ViewModel, Infrastructure.ReactiveUI.Base.IObserver { #region Binding @@ -98,5 +99,13 @@ public ItemsViewModel(Games games, string progPath, LambdaCommand lambdaCommand ToolTipProgramsText = string.Concat(Description.Substring(0, Description.Length / 4), "..."); ClickProgramCommand = lambdaCommand; } + + public void Update(LoadUI data) + { + if (data.UpdateUI) + { + AllPropertyChanged(); + } + } } } diff --git a/LauncherDM/ViewModels/LibrarySelectItemViewModel.cs b/LauncherDM/ViewModels/LibrarySelectItemViewModel.cs index e0df3a0..554b922 100644 --- a/LauncherDM/ViewModels/LibrarySelectItemViewModel.cs +++ b/LauncherDM/ViewModels/LibrarySelectItemViewModel.cs @@ -1,5 +1,6 @@ using LauncherDM.Infastructure.Commands; using LauncherDM.Infastructure.Commands.Base; +using LauncherDM.Infrastructure.ReactiveUI; namespace LauncherDM.ViewModels { diff --git a/LauncherDM/ViewModels/LibraryUserControlViewModel.cs b/LauncherDM/ViewModels/LibraryUserControlViewModel.cs index 9c89a29..b2ca044 100644 --- a/LauncherDM/ViewModels/LibraryUserControlViewModel.cs +++ b/LauncherDM/ViewModels/LibraryUserControlViewModel.cs @@ -1,12 +1,21 @@ using LauncherDM.Infastructure.Commands; using LauncherDM.Services; using System.Collections.ObjectModel; +using System.Linq; using System.Windows.Forms.VisualStyles; +using LauncherDM.Infrastructure.ReactiveUI; using LauncherDM.Services.Interfaces; +using ServerTCP; +using Amazon.S3.Model; +using System.Security.Cryptography; +using LauncherDM.Infrastructure; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.Taskbar; +using System.Windows.Media; +using LauncherDM.Infastructure.Commands.Base; namespace LauncherDM.ViewModels { - class LibraryUserControlViewModel : ViewModel.Base.ViewModel + class LibraryUserControlViewModel : ViewModel.Base.ViewModel, Infrastructure.ReactiveUI.Base.IObserver { #region Service @@ -14,12 +23,105 @@ class LibraryUserControlViewModel : ViewModel.Base.ViewModel private readonly ILibraryUserControlService _libraryUserService; + private readonly IDialogWindowService _dialogWindow; + + private readonly IServerRequestService _serverRequest; + + #endregion + + #region Fields + + private const int MaxImageToItem = 5; + #endregion #region Bindings public string ItemTitle => _resourcesHelper.LocalizationGet("Programs"); + public string ButDow => _resourcesHelper.LocalizationGet("Download"); + + public string ButRun => _resourcesHelper.LocalizationGet("Run"); + + #region SourceMedia + + private string _sourceMedia = DefaultMediaSource; + + public string SourceMedia + { + get => _sourceMedia; + set => Set(ref _sourceMedia, value); + } + + #endregion + + #region Title + + private string _title = "---"; + + public string Title + { + get => _title; + set => Set(ref _title, value); + } + + #endregion + + #region ItemName + + private string _itemName; + + public string ItemName + { + get => _itemName; + set => Set(ref _itemName, value); + } + + #endregion + + #region Desc + + private string _descItem; + + public string DescItem + { + get => _descItem; + set => Set(ref _descItem, value); + } + + #endregion + + #region Tags + + private string _tags; + + public string Tags + { + get => _tags; + set => Set(ref _tags, value); + } + + #endregion + + #region ButtonWidth + + private int _widthDownload = 0; + + public int WidthDownload + { + get => _widthDownload; + set => Set(ref _widthDownload, value); + } + + private int _widthRun = 0; + + public int WidthRun + { + get => _widthRun; + set => Set(ref _widthRun, value); + } + + #endregion #region ItemListView @@ -33,32 +135,171 @@ public ObservableCollection ItemListView #endregion + #region ImageListView + + private ObservableCollection _imageListView; + public ObservableCollection ImageListView + { + get => _imageListView; + set => Set(ref _imageListView, value); + } + + #endregion + #endregion + #region Command + + public Command DownloadCommand { get; } + private bool CanDownloadCommandExecute(object p) => true; + private void OnDownloadCommandExecuted(object p) + { + + } + + public Command RunCommand { get; } + private bool CanRunCommandExecute(object p) => true; + private void OnRunCommandExecuted(object p) + { + + } + + + #endregion public LibraryUserControlViewModel(ResourcesHelperService resourcesHelper, ServerRequestService serverRequest) { _resourcesHelper = resourcesHelper; + _serverRequest = serverRequest; _libraryUserService = new LibraryUserControlService(serverRequest); - ItemListView = new ObservableCollection(); + _dialogWindow = new DialogWindowService(); + DownloadCommand = new LambdaCommand(OnDownloadCommandExecuted, CanDownloadCommandExecute); + RunCommand = new LambdaCommand(OnRunCommandExecuted, CanRunCommandExecute); LoadItems(); } private void LoadItems() { - var a = StoreUserControlViewModel.progArray; - var b = StoreUserControlViewModel.gamesArray; + ItemListView = new ObservableCollection(); + ImageListView = new ObservableCollection(); - var g = _libraryUserService.GetAllItems(); - ItemListView.Add(new LibrarySelectItemViewModel("sdads", "https://get.wallhere.com/photo/anime-anime-girls-2235748.jpg", new LambdaCommand(o => + var preLoadProg = StoreUserControlViewModel.progArray; + var preLoadGame = StoreUserControlViewModel.gamesArray; + var gamePath = StoreUserControlViewModel.gamesPath; + var progPath = StoreUserControlViewModel.progPath; + + var games = _libraryUserService.GetGamesItem(); + var programs = _libraryUserService.GetProgramItem(); + + ICheckNetworkService networkService = new CheckNetworkService(); + foreach (var game in games.SaleGamesArray) + { + var gameSelect = preLoadGame.GamesArray.First(x => x.id == game.game_id); + var image = string.Concat(gamePath, gameSelect.name, ".png"); + ItemListView.Add(new LibrarySelectItemViewModel(gameSelect.name, image, + new LambdaCommand(o => + { + NowGame = true; + TitleLoad(true); + ItemName = gameSelect.name; + Tags = gameSelect.tag; + WidthDownload = 150; + SourceMedia = string.Concat(gamePath, gameSelect.name, ".mp4"); + + // Todo: костыль + DescEng = gameSelect.descriptionEng; // костыль + Desc = gameSelect.description; // костыль + DescLoad(); + ImageListView.Clear(); + + var countLoadImage = 1; + while (MaxImageToItem >= countLoadImage) + { + var imageDop = string.Concat(gamePath, gameSelect.name, + countLoadImage.ToString(), ".png"); + if (networkService.CheckingUriFileConnection(imageDop)) + ImageListView.Add(new SelectItemViewModel(imageDop, new LambdaCommand(o => + { + _dialogWindow.OpenImageItemWindow(imageDop); + }, o => true))); + else + break; + + countLoadImage++; + } + + }, o => true))); + } + + foreach (var prog in programs.SaleProgramsArray) + { + var progSelect = preLoadProg.ProgramsArray.First(x => x.id == prog.program_id); + var image = string.Concat(progPath, progSelect.name, ".png"); + ItemListView.Add(new LibrarySelectItemViewModel(progSelect.name, image, + new LambdaCommand(o => + { + // Todo: костыль + NowGame = false; + TitleLoad(false); + DescEng = progSelect.descriptionEng; + Desc = progSelect.description; + DescLoad(); + ItemName = progSelect.name; + Tags = progSelect.tag; + WidthDownload = 150; + ImageListView.Clear(); + //SourceMedia = DefaultMediaSource1; + + var countLoadImage = 1; + while (MaxImageToItem >= countLoadImage) + { + var imageDop = string.Concat(progPath, progSelect.name, + countLoadImage.ToString(), ".png"); + if (networkService.CheckingUriFileConnection(imageDop)) + ImageListView.Add(new SelectItemViewModel(imageDop, new LambdaCommand(o => + { + _dialogWindow.OpenImageItemWindow(imageDop); + }, o => true))); + else + break; + + countLoadImage++; + } + + + }, o => true))); + } + } + + private bool NowGame; + + private string DescEng; + + private string Desc; + + private const string DefaultMediaSource = "https://darkmilk.store/Launcher/Video/wallper.mp4"; + + + private void TitleLoad(bool game) + { + Title = game ? _resourcesHelper.LocalizationGet("Game") : _resourcesHelper.LocalizationGet("Program"); + } + + private void DescLoad() + { + DescItem = MessageLanguages.Language == MessageLanguages.Languages.rus ? Desc : DescEng; + } + + public void Update(LoadUI data) + { + if (data.UpdateUI) { - //ImageItem = image; - }, o => true))); - ItemListView.Add(new LibrarySelectItemViewModel("sdads", "https://get.wallhere.com/photo/anime-anime-girls-2235748.jpg")); - ItemListView.Add(new LibrarySelectItemViewModel("sdads", "https://get.wallhere.com/photo/anime-anime-girls-2235748.jpg")); - ItemListView.Add(new LibrarySelectItemViewModel("sdads", "https://get.wallhere.com/photo/anime-anime-girls-2235748.jpg")); - ItemListView.Add(new LibrarySelectItemViewModel("sdads", "https://get.wallhere.com/photo/anime-anime-girls-2235748.jpg")); + AllPropertyChanged(); + TitleLoad(NowGame); + DescLoad(); + LoadItems(); + } } } } diff --git a/LauncherDM/ViewModels/MainWindowViewModel.cs b/LauncherDM/ViewModels/MainWindowViewModel.cs index 21177c6..4ee9544 100644 --- a/LauncherDM/ViewModels/MainWindowViewModel.cs +++ b/LauncherDM/ViewModels/MainWindowViewModel.cs @@ -7,10 +7,12 @@ using System.Windows.Input; using LauncherDM.ViewModels; using LauncherDM.Views.UserControls; +using LauncherDM.Infrastructure.ReactiveUI; +using LauncherDM.Infrastructure; namespace LauncherDM.ViewModel { - internal class MainWindowViewModel : Base.ViewModel + internal class MainWindowViewModel : Base.ViewModel, Infrastructure.ReactiveUI.Base.IObserver { #region Services @@ -139,10 +141,20 @@ public MainWindowViewModel(Action closeAction, Action dragMove, ToolbarToWindowV _resourcesHelper = resourcesHelper; _dialogWindow = new DialogWindowService(); StoreUserControlVM = new StoreUserControlViewModel(resourcesHelper, serverRequest); + UpdateUI.PullUi.Subscribe(StoreUserControlVM); SettingsUserControlVM = new SettingsUserControlViewModel(closeAction, resourcesHelper); MyAccountUserControlVM = new MyAccountUserControlViewModel(); LibraryUserControlVM = new LibraryUserControlViewModel(resourcesHelper, serverRequest); + UpdateUI.PullUi.Subscribe(LibraryUserControlVM); MoveWindowCommand = new LambdaCommand(OnMoveWindowCommandExecuted, CanMoveWindowCommandExecute); } + + public void Update(LoadUI data) + { + if (data.UpdateUI) + { + AllPropertyChanged(); + } + } } } diff --git a/LauncherDM/ViewModels/SelectItemViewModel.cs b/LauncherDM/ViewModels/SelectItemViewModel.cs index 1897b9c..257de9a 100644 --- a/LauncherDM/ViewModels/SelectItemViewModel.cs +++ b/LauncherDM/ViewModels/SelectItemViewModel.cs @@ -1,9 +1,10 @@ using LauncherDM.Infastructure.Commands; using LauncherDM.Infastructure.Commands.Base; +using LauncherDM.Infrastructure.ReactiveUI; namespace LauncherDM.ViewModels { - class SelectItemViewModel : ViewModel.Base.ViewModel + class SelectItemViewModel : ViewModel.Base.ViewModel, Infrastructure.ReactiveUI.Base.IObserver { #region Binding @@ -32,5 +33,13 @@ public SelectItemViewModel(string imageItemPath, LambdaCommand lambdaCommand = n ImageItemPath = imageItemPath; ClickItemCommand = lambdaCommand; } + + public void Update(LoadUI data) + { + if (data.UpdateUI) + { + AllPropertyChanged(); + } + } } } diff --git a/LauncherDM/ViewModels/StoreUserControlViewModel.cs b/LauncherDM/ViewModels/StoreUserControlViewModel.cs index eab7b2f..6faa90d 100644 --- a/LauncherDM/ViewModels/StoreUserControlViewModel.cs +++ b/LauncherDM/ViewModels/StoreUserControlViewModel.cs @@ -9,19 +9,26 @@ using System.Windows.Input; using LauncherDM.Infastructure.Commands.Base; using System.Windows.Media; +using ServerTCP; using ServerTCP.Models; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Taskbar; +using LauncherDM.Infrastructure.ReactiveUI; +using LauncherDM.Infrastructure; namespace LauncherDM.ViewModels { - internal class StoreUserControlViewModel : ViewModel.Base.ViewModel + internal class StoreUserControlViewModel : ViewModel.Base.ViewModel, Infrastructure.ReactiveUI.Base.IObserver { //Todo: убрать эти костыли public static GamesForXml gamesArray; + public static string gamesPath; + public static ProgramsForXml progArray; + public static string progPath; + #region Fields private const int MaxImageToItem = 5; @@ -151,6 +158,7 @@ private void OnSaleItemCommandExecuted(object p) BackgroundButton = (SolidColorBrush)new BrushConverter().ConvertFrom("#33c02b"); _payButtonText = "InTheLibrary"; OnPropertyChanged("PayButtonText"); + UpdateUI.PullUi.Notify(new LoadUI(true)); } #endregion @@ -177,7 +185,7 @@ public void LoadStore(ServerRequestService serverRequest) { ICheckNetworkService networkService = new CheckNetworkService(); progArray = _storeService.GetPrograms(); - var progPath = _storeService.GetProgramsPath(); + progPath = _storeService.GetProgramsPath(); foreach (var prog in progArray.ProgramsArray) { ProgramsListView.Add(new ItemsViewModel(prog, progPath, new LambdaCommand(o => @@ -185,7 +193,7 @@ public void LoadStore(ServerRequestService serverRequest) TitleItem = prog.name; TagText = prog.tag; ImageItem = string.Concat(progPath, TitleItem, ".png"); - DescItem = prog.description; + DescItem = MessageLanguages.Language == MessageLanguages.Languages.rus ? prog.description : prog.descriptionEng; var countLoadImage = 1; ItemListView = new ObservableCollection(); @@ -212,7 +220,7 @@ public void LoadStore(ServerRequestService serverRequest) } gamesArray = _storeService.GetGames(); - var gamesPath = _storeService.GetGamesPath(); + gamesPath = _storeService.GetGamesPath(); foreach (var games in gamesArray.GamesArray) { GamesListView.Add(new ItemsViewModel(games, gamesPath, new LambdaCommand(o => @@ -220,7 +228,7 @@ public void LoadStore(ServerRequestService serverRequest) TitleItem = games.name; TagText = games.tag; ImageItem = string.Concat(gamesPath, TitleItem, ".png"); - DescItem = games.description; + DescItem = MessageLanguages.Language == MessageLanguages.Languages.rus ? games.description : games.descriptionEng; var countLoadImage = 1; ItemListView = new ObservableCollection(); @@ -255,5 +263,13 @@ private void AnimationItemShow() buttonAnimation.Duration = TimeSpan.FromSeconds(1); ItemProgram.BeginAnimation(Button.WidthProperty, buttonAnimation); } + + public void Update(LoadUI data) + { + if (data.UpdateUI) + { + AllPropertyChanged(); + } + } } } diff --git a/LauncherDM/Views/UserControls/LibraryUserControl.xaml b/LauncherDM/Views/UserControls/LibraryUserControl.xaml index ea30398..8d06e73 100644 --- a/LauncherDM/Views/UserControls/LibraryUserControl.xaml +++ b/LauncherDM/Views/UserControls/LibraryUserControl.xaml @@ -29,7 +29,7 @@ - + @@ -41,7 +41,7 @@ - + @@ -61,11 +61,11 @@ - + + + + + + + + + + + + + + + + + + + + + diff --git a/ServerTCP/DataBase/DataBaseCommands.cs b/ServerTCP/DataBase/DataBaseCommands.cs index 1c827da..a0fd42a 100644 --- a/ServerTCP/DataBase/DataBaseCommands.cs +++ b/ServerTCP/DataBase/DataBaseCommands.cs @@ -2,6 +2,7 @@ using ServerTCP.Models.Data; using System.Linq; using Microsoft.EntityFrameworkCore.Internal; +using Microsoft.EntityFrameworkCore.Metadata.Internal; namespace ServerTCP.DataBase { @@ -71,6 +72,13 @@ public static bool Insert(object table, MessageHeader.MessageType messageType) if (idMax != 0) saleGames.id = idMax + 1; } + + checkData = db.sale_games.Where(x => x.id == saleGames.id + && x.game_id == saleGames.game_id + && x.user_id == saleGames.user_id).ToArray(); + if (checkData.Length > 0) + return false; + db.sale_games.Add(saleGames); } else @@ -91,8 +99,15 @@ public static bool Insert(object table, MessageHeader.MessageType messageType) { var idMax = db.sale_programs?.Max(x => x.id) ?? 0; if (idMax != 0) - saleGames.id = idMax + 1; + salePrograms.id = idMax + 1; } + + checkData = db.sale_programs.Where(x => x.id == salePrograms.id + && x.program_id == salePrograms.program_id + && x.user_id == salePrograms.user_id).ToArray(); + if (checkData.Length > 0) + return false; + db.sale_programs.Add(salePrograms); } @@ -134,6 +149,24 @@ public static object Select(MessageHeader.MessageType messageType, params string var userCheck = db.users.Where(x => x.username == data[0]).ToArray(); result = userCheck.Length > 0; break; + case MessageHeader.MessageType.GamesItemUser: + var dataMessageForGame = data[0].ToString().Split(","); + var getUserForGame = db.users.Where(x => x.login == dataMessageForGame[1]).ToArray(); + var saleGames = db.sale_games.Where(x => x.user_id == getUserForGame[0].id); + + var saleGameXml = new SaleGamesForXml(); + saleGameXml.SaleGamesArray = saleGames.ToArray(); + return saleGameXml; + break; + case MessageHeader.MessageType.ProgramsItemUser: + var dataMessageForProg = data[0].ToString().Split(","); + var getUserForProg = db.users.Where(x => x.login == dataMessageForProg[1]).ToArray(); + var salePrograms = db.sale_programs.Where(x => x.user_id == getUserForProg[0].id).ToArray(); + + var saleProgXml = new SaleProgramsForXml(); + saleProgXml.SaleProgramsArray = salePrograms.ToArray(); + return saleProgXml; + break; default: result = null; break; diff --git a/ServerTCP/MessageHeader.cs b/ServerTCP/MessageHeader.cs index d7667f2..334e76f 100644 --- a/ServerTCP/MessageHeader.cs +++ b/ServerTCP/MessageHeader.cs @@ -26,7 +26,8 @@ public enum MessageType : byte Programs, ProgramsPath, Games, - AllGamesOrPrograms, + GamesItemUser, + ProgramsItemUser, GamesPath, RecoveryAccount, Log, @@ -143,7 +144,8 @@ public byte[] MessageToArray(bool loadToken = false) Array.Copy(message ?? [0], 0, result, LengthAndDataType, messageLength); Array.Copy(token ?? [0], 0, result, LengthAndDataType + messageLength, tokenLength); break; - case MessageType.AllGamesOrPrograms: + case MessageType.GamesItemUser: + case MessageType.ProgramsItemUser: Array.Copy(token ?? [0], 0, result, LengthAndDataType + messageLength, tokenLength); break; } @@ -166,7 +168,6 @@ internal byte[] MessageServerToArray(bool loadToken = false) case MessageType.Token: case MessageType.Sale: case MessageType.Login: - case MessageType.AllGamesOrPrograms: case MessageType.Registration: case MessageType.TitleLoading: case MessageType.ProgramsPath: @@ -193,6 +194,22 @@ internal byte[] MessageServerToArray(bool loadToken = false) message = Encoding.UTF8.GetBytes(textWriter.ToString()); } break; + case MessageType.GamesItemUser: + var xmlSaleGame = new XmlSerializer(typeof(SaleGamesForXml)); + using (var textWriter = new StringWriter()) + { + xmlSaleGame.Serialize(textWriter, Message); + message = Encoding.UTF8.GetBytes(textWriter.ToString()); + } + break; + case MessageType.ProgramsItemUser: + var xmlSaleProg = new XmlSerializer(typeof(SaleProgramsForXml)); + using (var textWriter = new StringWriter()) + { + xmlSaleProg.Serialize(textWriter, Message); + message = Encoding.UTF8.GetBytes(textWriter.ToString()); + } + break; } @@ -232,7 +249,8 @@ public static MessageHeader FromArray(ReadOnlySpan buffer) case MessageHeader.MessageType.PublicKey: case MessageHeader.MessageType.Login: case MessageHeader.MessageType.Registration: - case MessageHeader.MessageType.AllGamesOrPrograms: + case MessageHeader.MessageType.GamesItemUser: + case MessageHeader.MessageType.ProgramsItemUser: case MessageHeader.MessageType.TitleLoading: case MessageHeader.MessageType.RecoveryAccount: case MessageHeader.MessageType.Programs: @@ -277,7 +295,8 @@ public static MessageHeader ServerFromArray(ReadOnlySpan buffer) case MessageHeader.MessageType.PublicKey: case MessageHeader.MessageType.Login: case MessageHeader.MessageType.Programs: - case MessageHeader.MessageType.AllGamesOrPrograms: + case MessageHeader.MessageType.GamesItemUser: + case MessageHeader.MessageType.ProgramsItemUser: case MessageHeader.MessageType.ProgramsPath: case MessageHeader.MessageType.RecoveryAccount: case MessageHeader.MessageType.Games: diff --git a/ServerTCP/Models/SaleGames.cs b/ServerTCP/Models/SaleGames.cs index f607336..2c65475 100644 --- a/ServerTCP/Models/SaleGames.cs +++ b/ServerTCP/Models/SaleGames.cs @@ -3,7 +3,13 @@ namespace ServerTCP.Models { - internal class SaleGames + + public class SaleGamesForXml + { + public SaleGames[] SaleGamesArray { get; set; } + } + + public class SaleGames { [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int id { get; set; } diff --git a/ServerTCP/Models/SalePrograms.cs b/ServerTCP/Models/SalePrograms.cs index 32c4a8a..7fc13ea 100644 --- a/ServerTCP/Models/SalePrograms.cs +++ b/ServerTCP/Models/SalePrograms.cs @@ -3,7 +3,12 @@ namespace ServerTCP.Models { - internal class SalePrograms + public class SaleProgramsForXml + { + public SalePrograms[] SaleProgramsArray { get; set; } + } + + public class SalePrograms { [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int id { get; set; } diff --git a/ServerTCP/Program.cs b/ServerTCP/Program.cs index c7927cc..49c76c6 100644 --- a/ServerTCP/Program.cs +++ b/ServerTCP/Program.cs @@ -177,6 +177,54 @@ static void Main(string[] args) ? new MessageHeader("1", header.Type) : new MessageHeader("0", header.Type); break; + + case MessageHeader.MessageType.GamesItemUser: + var messageAll = header.Message.ToString(); + var tokenAll = string.Empty; + try + { + tokenAll = Token.Tokens[messageAll]; + } + catch + { + ConsoleExtension.WriteLineColor("Токена не существует!", ConsoleColor.DarkRed); + } + + if (string.IsNullOrEmpty(tokenAll)) + { + headerRequest = new MessageHeader(new SaleGamesForXml(), header.Type); + } + else + { + var insertMessage = messageAll + "," + tokenAll; + var gameSelect = DataBaseCommands.Select(header.Type, insertMessage); + headerRequest = new MessageHeader(gameSelect, header.Type); + } + break; + + case MessageHeader.MessageType.ProgramsItemUser: + messageAll = header.Message.ToString(); + tokenAll = string.Empty; + try + { + tokenAll = Token.Tokens[messageAll]; + } + catch + { + ConsoleExtension.WriteLineColor("Токена не существует!", ConsoleColor.DarkRed); + } + + if (string.IsNullOrEmpty(tokenAll)) + { + headerRequest = new MessageHeader(new SaleProgramsForXml(), header.Type); + } + else + { + var insertMessage = messageAll + "," + tokenAll; + var progSelect = DataBaseCommands.Select(header.Type, insertMessage); + headerRequest = new MessageHeader(progSelect, header.Type); + } + break; } if (headerRequest is not null) diff --git a/ServerTCP/Token.cs b/ServerTCP/Token.cs index 34b408d..983dc35 100644 --- a/ServerTCP/Token.cs +++ b/ServerTCP/Token.cs @@ -12,7 +12,7 @@ public class Token public static string GenerateToken(string login, string password) { - var tokenData = string.Concat(login, ",", password); + //var tokenData = string.Concat(login, ",", password); var regToken = string.Concat(login, ",", DateTime.Now); using (var myAes = Aes.Create()) { @@ -20,7 +20,7 @@ public static string GenerateToken(string login, string password) byte[] aesIV = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(Key)); myAes.Key = aesKey; myAes.IV = aesIV; - var tokenResult = Convert.ToBase64String(CryptoAes.EncryptStringToBytes_Aes(tokenData, myAes.Key, myAes.IV)); + var tokenResult = Convert.ToBase64String(CryptoAes.EncryptStringToBytes_Aes(regToken, myAes.Key, myAes.IV)); if(!Tokens.ContainsKey(tokenResult)) Tokens.Add(tokenResult, regToken);