diff --git a/LauncherDM/App.xaml b/LauncherDM/App.xaml
index 643efc3..bae8e50 100644
--- a/LauncherDM/App.xaml
+++ b/LauncherDM/App.xaml
@@ -19,6 +19,7 @@
+
diff --git a/LauncherDM/Properties/Resources.Designer.cs b/LauncherDM/Properties/Resources.Designer.cs
index 7c2c667..29d41ac 100644
--- a/LauncherDM/Properties/Resources.Designer.cs
+++ b/LauncherDM/Properties/Resources.Designer.cs
@@ -241,6 +241,15 @@ internal static string ErrorLoginloggedIn {
}
}
+ ///
+ /// Ищет локализованную строку, похожую на .
+ ///
+ internal static string ErrorSend {
+ get {
+ return ResourceManager.GetString("ErrorSend", resourceCulture);
+ }
+ }
+
///
/// Ищет локализованную строку, похожую на Нет подключения к интернету..
///
@@ -286,6 +295,15 @@ internal static string Games {
}
}
+ ///
+ /// Ищет локализованную строку, похожую на .
+ ///
+ internal static string InTheLibrary {
+ get {
+ return ResourceManager.GetString("InTheLibrary", resourceCulture);
+ }
+ }
+
///
/// Ищет локализованную строку, похожую на В пункте "{0}", "{1}" не может быть пустым..
///
diff --git a/LauncherDM/Properties/Resources.en.resx b/LauncherDM/Properties/Resources.en.resx
index 89732e7..229ed59 100644
--- a/LauncherDM/Properties/Resources.en.resx
+++ b/LauncherDM/Properties/Resources.en.resx
@@ -161,4 +161,7 @@
Change account
+
+ In the library
+
\ No newline at end of file
diff --git a/LauncherDM/Properties/Resources.resx b/LauncherDM/Properties/Resources.resx
index c62a5bf..ce5eb00 100644
--- a/LauncherDM/Properties/Resources.resx
+++ b/LauncherDM/Properties/Resources.resx
@@ -280,4 +280,10 @@
Сменить аккаунт
+
+
+
+
+ В библиотеке
+
\ No newline at end of file
diff --git a/LauncherDM/Services/Interfaces/ILibraryUserControlService.cs b/LauncherDM/Services/Interfaces/ILibraryUserControlService.cs
new file mode 100644
index 0000000..515eac4
--- /dev/null
+++ b/LauncherDM/Services/Interfaces/ILibraryUserControlService.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LauncherDM.Services.Interfaces
+{
+ interface ILibraryUserControlService
+ {
+ string GetAllItems();
+ }
+}
diff --git a/LauncherDM/Services/Interfaces/IStoreUserControlService.cs b/LauncherDM/Services/Interfaces/IStoreUserControlService.cs
index 3168d33..96ad376 100644
--- a/LauncherDM/Services/Interfaces/IStoreUserControlService.cs
+++ b/LauncherDM/Services/Interfaces/IStoreUserControlService.cs
@@ -11,5 +11,7 @@ interface IStoreUserControlService
GamesForXml GetGames();
string GetGamesPath();
+
+ bool SaleItem(string item);
}
}
diff --git a/LauncherDM/Services/LibraryUserControlService.cs b/LauncherDM/Services/LibraryUserControlService.cs
new file mode 100644
index 0000000..3d26260
--- /dev/null
+++ b/LauncherDM/Services/LibraryUserControlService.cs
@@ -0,0 +1,21 @@
+using LauncherDM.Services.Interfaces;
+using ServerTCP;
+
+namespace LauncherDM.Services
+{
+ class LibraryUserControlService : ILibraryUserControlService
+ {
+ private IServerRequestService _serverRequest;
+
+ public LibraryUserControlService(ServerRequestService serverRequest)
+ {
+ _serverRequest = serverRequest;
+ }
+
+ public string GetAllItems()
+ {
+ var requestMessageServer = _serverRequest.SendMessageRequest(MessageHeader.MessageType.AllGamesOrPrograms, true);
+ return requestMessageServer.Message.ToString();
+ }
+ }
+}
diff --git a/LauncherDM/Services/ServerRequestService.cs b/LauncherDM/Services/ServerRequestService.cs
index dfd609a..fb8ccdb 100644
--- a/LauncherDM/Services/ServerRequestService.cs
+++ b/LauncherDM/Services/ServerRequestService.cs
@@ -32,8 +32,11 @@ public MessageHeader SendMessageRequest(object data, MessageHeader.MessageType m
{
tcpClient = new TcpClient();
tcpClient.Connect(_endPoint);
-
- var messageHeader = new MessageHeader(data, messageType, MessageLanguages.Language);
+ MessageHeader messageHeader = null;
+ if (loadToken)
+ messageHeader = new MessageHeader(data, messageType, MessageLanguages.Language, SettingsApp.Default.Token);
+ else
+ messageHeader = new MessageHeader(data, messageType, MessageLanguages.Language);
byte[] headerBytes = messageHeader.MessageToArray(loadToken);
NetworkStream tcpStream = tcpClient.GetStream();
tcpStream.Write(headerBytes);
diff --git a/LauncherDM/Services/StoreUserControlService.cs b/LauncherDM/Services/StoreUserControlService.cs
index e65a2a1..b23e8bf 100644
--- a/LauncherDM/Services/StoreUserControlService.cs
+++ b/LauncherDM/Services/StoreUserControlService.cs
@@ -1,4 +1,5 @@
-using LauncherDM.Models;
+using System;
+using LauncherDM.Models;
using LauncherDM.Services.Interfaces;
using ServerTCP;
using ServerTCP.Models;
@@ -66,5 +67,11 @@ public string GetGamesPath()
var requestMessageServer = _serverRequest.SendMessageRequest(MessageHeader.MessageType.GamesPath);
return requestMessageServer.Message.ToString();
}
+
+ public bool SaleItem(string item)
+ {
+ var requestMessageServer = _serverRequest.SendMessageRequest(item, MessageHeader.MessageType.Sale, true);
+ return requestMessageServer.Message.ToString() == "1";
+ }
}
}
diff --git a/LauncherDM/Styles/Other/BorderStyle.xaml b/LauncherDM/Styles/Other/BorderStyle.xaml
index 8980b3e..b723de6 100644
--- a/LauncherDM/Styles/Other/BorderStyle.xaml
+++ b/LauncherDM/Styles/Other/BorderStyle.xaml
@@ -7,6 +7,12 @@
+
+
\ No newline at end of file
diff --git a/LauncherDM/Styles/Other/ButtonStyle.xaml b/LauncherDM/Styles/Other/ButtonStyle.xaml
index 4f57859..a9c6947 100644
--- a/LauncherDM/Styles/Other/ButtonStyle.xaml
+++ b/LauncherDM/Styles/Other/ButtonStyle.xaml
@@ -533,4 +533,39 @@
+
+
\ No newline at end of file
diff --git a/LauncherDM/Styles/Other/ProgressBarStyle.xaml b/LauncherDM/Styles/Other/ProgressBarStyle.xaml
new file mode 100644
index 0000000..9d2f37f
--- /dev/null
+++ b/LauncherDM/Styles/Other/ProgressBarStyle.xaml
@@ -0,0 +1,18 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/LauncherDM/ViewModels/LibrarySelectItemViewModel.cs b/LauncherDM/ViewModels/LibrarySelectItemViewModel.cs
new file mode 100644
index 0000000..e0df3a0
--- /dev/null
+++ b/LauncherDM/ViewModels/LibrarySelectItemViewModel.cs
@@ -0,0 +1,42 @@
+using LauncherDM.Infastructure.Commands;
+using LauncherDM.Infastructure.Commands.Base;
+
+namespace LauncherDM.ViewModels
+{
+ class LibrarySelectItemViewModel : ViewModel.Base.ViewModel
+ {
+ private string _nameItem;
+
+ public string NameItem
+ {
+ get => _nameItem;
+ set => Set(ref _nameItem, value);
+ }
+
+
+ #region ImageItemPath
+
+ private string _imageItemPath;
+
+ public string ImageItemPath
+ {
+ get => _imageItemPath;
+ set => Set(ref _imageItemPath, value);
+ }
+
+ #endregion
+
+ #region Command
+
+ public Command ClickItemCommand { get; }
+
+ #endregion
+
+ public LibrarySelectItemViewModel(string nameItem, string imageItemPath, LambdaCommand lambdaCommand = null)
+ {
+ NameItem = nameItem;
+ ImageItemPath = imageItemPath;
+ ClickItemCommand = lambdaCommand;
+ }
+ }
+}
diff --git a/LauncherDM/ViewModels/LibraryUserControlViewModel.cs b/LauncherDM/ViewModels/LibraryUserControlViewModel.cs
new file mode 100644
index 0000000..9c89a29
--- /dev/null
+++ b/LauncherDM/ViewModels/LibraryUserControlViewModel.cs
@@ -0,0 +1,64 @@
+using LauncherDM.Infastructure.Commands;
+using LauncherDM.Services;
+using System.Collections.ObjectModel;
+using System.Windows.Forms.VisualStyles;
+using LauncherDM.Services.Interfaces;
+
+namespace LauncherDM.ViewModels
+{
+ class LibraryUserControlViewModel : ViewModel.Base.ViewModel
+ {
+ #region Service
+
+ private readonly IResourcesHelperService _resourcesHelper;
+
+ private readonly ILibraryUserControlService _libraryUserService;
+
+ #endregion
+
+ #region Bindings
+
+ public string ItemTitle => _resourcesHelper.LocalizationGet("Programs");
+
+
+ #region ItemListView
+
+ private ObservableCollection _itemListView;
+
+ public ObservableCollection ItemListView
+ {
+ get => _itemListView;
+ set => Set(ref _itemListView, value);
+ }
+
+ #endregion
+
+ #endregion
+
+
+
+ public LibraryUserControlViewModel(ResourcesHelperService resourcesHelper, ServerRequestService serverRequest)
+ {
+ _resourcesHelper = resourcesHelper;
+ _libraryUserService = new LibraryUserControlService(serverRequest);
+ ItemListView = new ObservableCollection();
+ LoadItems();
+ }
+
+ private void LoadItems()
+ {
+ var a = StoreUserControlViewModel.progArray;
+ var b = StoreUserControlViewModel.gamesArray;
+
+ var g = _libraryUserService.GetAllItems();
+ ItemListView.Add(new LibrarySelectItemViewModel("sdads", "https://get.wallhere.com/photo/anime-anime-girls-2235748.jpg", new LambdaCommand(o =>
+ {
+ //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"));
+ }
+ }
+}
diff --git a/LauncherDM/ViewModels/MainWindowViewModel.cs b/LauncherDM/ViewModels/MainWindowViewModel.cs
index f5b68ae..21177c6 100644
--- a/LauncherDM/ViewModels/MainWindowViewModel.cs
+++ b/LauncherDM/ViewModels/MainWindowViewModel.cs
@@ -6,6 +6,7 @@
using System;
using System.Windows.Input;
using LauncherDM.ViewModels;
+using LauncherDM.Views.UserControls;
namespace LauncherDM.ViewModel
{
@@ -97,6 +98,18 @@ public MyAccountUserControlViewModel MyAccountUserControlVM
#endregion
+ #region LibraryUserControlViewModel
+
+ private LibraryUserControlViewModel _libraryUserControlVM;
+
+ public LibraryUserControlViewModel LibraryUserControlVM
+ {
+ get => _libraryUserControlVM;
+ set => Set(ref _libraryUserControlVM, value);
+ }
+
+ #endregion
+
#endregion
#region Command
@@ -128,6 +141,7 @@ public MainWindowViewModel(Action closeAction, Action dragMove, ToolbarToWindowV
StoreUserControlVM = new StoreUserControlViewModel(resourcesHelper, serverRequest);
SettingsUserControlVM = new SettingsUserControlViewModel(closeAction, resourcesHelper);
MyAccountUserControlVM = new MyAccountUserControlViewModel();
+ LibraryUserControlVM = new LibraryUserControlViewModel(resourcesHelper, serverRequest);
MoveWindowCommand = new LambdaCommand(OnMoveWindowCommandExecuted, CanMoveWindowCommandExecute);
}
}
diff --git a/LauncherDM/ViewModels/SelectItemViewModel.cs b/LauncherDM/ViewModels/SelectItemViewModel.cs
index f85904d..1897b9c 100644
--- a/LauncherDM/ViewModels/SelectItemViewModel.cs
+++ b/LauncherDM/ViewModels/SelectItemViewModel.cs
@@ -19,7 +19,6 @@ public string ImageItemPath
#endregion
-
#endregion
#region Command
diff --git a/LauncherDM/ViewModels/StoreUserControlViewModel.cs b/LauncherDM/ViewModels/StoreUserControlViewModel.cs
index 287e0db..eab7b2f 100644
--- a/LauncherDM/ViewModels/StoreUserControlViewModel.cs
+++ b/LauncherDM/ViewModels/StoreUserControlViewModel.cs
@@ -5,13 +5,23 @@
using LauncherDM.Services.Interfaces;
using System.Windows.Media.Animation;
using System;
+using System.Drawing;
using System.Windows.Input;
using LauncherDM.Infastructure.Commands.Base;
+using System.Windows.Media;
+using ServerTCP.Models;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.Taskbar;
namespace LauncherDM.ViewModels
{
internal class StoreUserControlViewModel : ViewModel.Base.ViewModel
{
+ //Todo: убрать эти костыли
+
+ public static GamesForXml gamesArray;
+
+ public static ProgramsForXml progArray;
+
#region Fields
private const int MaxImageToItem = 5;
@@ -24,6 +34,8 @@ internal class StoreUserControlViewModel : ViewModel.Base.ViewModel
private readonly IDialogWindowService _dialogWindow;
+ private readonly IStoreUserControlService _storeService;
+
#endregion
#region Binding
@@ -32,7 +44,8 @@ internal class StoreUserControlViewModel : ViewModel.Base.ViewModel
public string GamesText => _resourcesHelper.LocalizationGet("Games");
- public string PayButtonText => _resourcesHelper.LocalizationGet("AddLibrary");
+ private string _payButtonText = "AddLibrary";
+ public string PayButtonText => _resourcesHelper.LocalizationGet(_payButtonText);
#region ProgramsViewModel
@@ -100,6 +113,14 @@ public ObservableCollection ItemListView
set => Set(ref _itemListView, value);
}
+ private SolidColorBrush _backgroundButton;
+
+ public SolidColorBrush BackgroundButton
+ {
+ get => _backgroundButton;
+ set => Set(ref _backgroundButton, value);
+ }
+
#endregion
#endregion
@@ -117,6 +138,23 @@ private void OnClickImageItemCommandExecuted(object p)
#endregion
+ #region SaleItemCommand
+
+ public Command SaleItemCommand { get; }
+ private bool CanSaleItemCommandExecute(object p) => true;
+ private void OnSaleItemCommandExecuted(object p)
+ {
+ if (_storeService.SaleItem(TitleItem))
+ {
+
+ }
+ BackgroundButton = (SolidColorBrush)new BrushConverter().ConvertFrom("#33c02b");
+ _payButtonText = "InTheLibrary";
+ OnPropertyChanged("PayButtonText");
+ }
+
+ #endregion
+
#endregion
// Todo: надо убрать это безобразие
@@ -124,20 +162,22 @@ private void OnClickImageItemCommandExecuted(object p)
public StoreUserControlViewModel(ResourcesHelperService resourcesHelper, ServerRequestService serverRequest)
{
+ BackgroundButton = (SolidColorBrush)new BrushConverter().ConvertFrom("#738aea");
_resourcesHelper = resourcesHelper;
_dialogWindow = new DialogWindowService();
ProgramsListView = new ObservableCollection();
GamesListView = new ObservableCollection();
ClickImageItemCommand = new LambdaCommand(OnClickImageItemCommandExecuted, CanClickImageItemCommandExecute);
+ SaleItemCommand = new LambdaCommand(OnSaleItemCommandExecuted, CanSaleItemCommandExecute);
+ _storeService = new StoreUserControlService(serverRequest);
LoadStore(serverRequest);
}
public void LoadStore(ServerRequestService serverRequest)
{
- IStoreUserControlService store = new StoreUserControlService(serverRequest);
ICheckNetworkService networkService = new CheckNetworkService();
- var progArray = store.GetPrograms();
- var progPath = store.GetProgramsPath();
+ progArray = _storeService.GetPrograms();
+ var progPath = _storeService.GetProgramsPath();
foreach (var prog in progArray.ProgramsArray)
{
ProgramsListView.Add(new ItemsViewModel(prog, progPath, new LambdaCommand(o =>
@@ -164,12 +204,15 @@ public void LoadStore(ServerRequestService serverRequest)
countLoadImage++;
}
+ BackgroundButton = (SolidColorBrush)new BrushConverter().ConvertFrom("#738aea");
+ _payButtonText = "AddLibrary";
+ OnPropertyChanged("PayButtonText");
AnimationItemShow();
}, o => true)));
}
- var gamesArray = store.GetGames();
- var gamesPath = store.GetGamesPath();
+ gamesArray = _storeService.GetGames();
+ var gamesPath = _storeService.GetGamesPath();
foreach (var games in gamesArray.GamesArray)
{
GamesListView.Add(new ItemsViewModel(games, gamesPath, new LambdaCommand(o =>
@@ -196,12 +239,15 @@ public void LoadStore(ServerRequestService serverRequest)
countLoadImage++;
}
+ BackgroundButton = (SolidColorBrush)new BrushConverter().ConvertFrom("#738aea");
+ _payButtonText = "AddLibrary";
+ OnPropertyChanged("PayButtonText");
AnimationItemShow();
}, o => true)));
}
}
- public void AnimationItemShow()
+ private void AnimationItemShow()
{
var buttonAnimation = new DoubleAnimation();
buttonAnimation.From = ItemProgram.ActualWidth;
diff --git a/LauncherDM/Views/UserControls/LibraryUserControl.xaml b/LauncherDM/Views/UserControls/LibraryUserControl.xaml
index 35432e8..ea30398 100644
--- a/LauncherDM/Views/UserControls/LibraryUserControl.xaml
+++ b/LauncherDM/Views/UserControls/LibraryUserControl.xaml
@@ -5,8 +5,80 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:LauncherDM.Views.UserControls"
mc:Ignorable="d"
- d:DesignHeight="450" d:DesignWidth="800">
+ d:DesignHeight="450" d:DesignWidth="800"
+ Background="Black" x:Name="LibraryControl">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LauncherDM/Views/UserControls/LibraryUserControl.xaml.cs b/LauncherDM/Views/UserControls/LibraryUserControl.xaml.cs
index 7321e37..d566d70 100644
--- a/LauncherDM/Views/UserControls/LibraryUserControl.xaml.cs
+++ b/LauncherDM/Views/UserControls/LibraryUserControl.xaml.cs
@@ -1,17 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
+using System.Windows.Controls;
namespace LauncherDM.Views.UserControls
{
diff --git a/LauncherDM/Views/UserControls/StoreUserControl.xaml b/LauncherDM/Views/UserControls/StoreUserControl.xaml
index 5099d4d..4820fbf 100644
--- a/LauncherDM/Views/UserControls/StoreUserControl.xaml
+++ b/LauncherDM/Views/UserControls/StoreUserControl.xaml
@@ -166,7 +166,7 @@
-
+
@@ -213,7 +213,7 @@
-
+
diff --git a/LauncherDM/Views/Windows/MainWindow.xaml b/LauncherDM/Views/Windows/MainWindow.xaml
index 76fb15e..f78242a 100644
--- a/LauncherDM/Views/Windows/MainWindow.xaml
+++ b/LauncherDM/Views/Windows/MainWindow.xaml
@@ -27,12 +27,12 @@
-
-
+
+
-
-
+
+
@@ -88,6 +88,7 @@
+
@@ -115,7 +116,7 @@
-->
-
+
@@ -149,5 +150,6 @@
+
diff --git a/ServerTCP/DataBase/DataBaseCommands.cs b/ServerTCP/DataBase/DataBaseCommands.cs
index 6eb4ae9..1c827da 100644
--- a/ServerTCP/DataBase/DataBaseCommands.cs
+++ b/ServerTCP/DataBase/DataBaseCommands.cs
@@ -1,5 +1,7 @@
using ServerTCP.Models;
using ServerTCP.Models.Data;
+using System.Linq;
+using Microsoft.EntityFrameworkCore.Internal;
namespace ServerTCP.DataBase
{
@@ -38,6 +40,62 @@ public static bool Insert(object table, MessageHeader.MessageType messageType)
}
db.recovery_account.Add(account);
}
+ break;
+ case MessageHeader.MessageType.Sale:
+ var data = table.ToString().Split(",");
+
+ var games = db.games.Where(x => x.name == data[0]).ToArray();
+ var programs = db.programs.Where(x => x.name == data[0]).ToArray();
+ var users = db.users.Where(x => x.login == data[1]).ToArray();
+
+ SalePrograms salePrograms = null;
+ SaleGames saleGames = null;
+
+ if (games.Length > 0)
+ {
+ saleGames = new SaleGames()
+ {
+ id = 1,
+ game_id = games[0].id,
+ user_id = users[0].id
+ };
+ var 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;
+
+ if (db.sale_games.Count() != 0)
+ {
+ var idMax = db.sale_games?.Max(x => x.id) ?? 0;
+ if (idMax != 0)
+ saleGames.id = idMax + 1;
+ }
+ db.sale_games.Add(saleGames);
+ }
+ else
+ {
+ salePrograms = new SalePrograms()
+ {
+ id = 1,
+ program_id = programs[0].id,
+ user_id = users[0].id
+ };
+ var 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;
+
+ if (db.sale_programs.Count() != 0)
+ {
+ var idMax = db.sale_programs?.Max(x => x.id) ?? 0;
+ if (idMax != 0)
+ saleGames.id = idMax + 1;
+ }
+ db.sale_programs.Add(salePrograms);
+ }
+
break;
}
return db.SaveChanges() == 1;
diff --git a/ServerTCP/MessageHeader.cs b/ServerTCP/MessageHeader.cs
index 3bbae34..d7667f2 100644
--- a/ServerTCP/MessageHeader.cs
+++ b/ServerTCP/MessageHeader.cs
@@ -12,18 +12,21 @@ namespace ServerTCP
public class MessageHeader
{
public const int LengthAndDataType = 6; // 1 байт тип данных, 5 байт размер
- public const int TokenLength = 10; // 10 байт под токен
+
+ public const string EndMessage = "|0|"; // 1 байт тип данных, 5 байт размер
public enum MessageType : byte
{
Session,
Token,
Login,
+ Sale,
Registration,
Version,
Programs,
ProgramsPath,
Games,
+ AllGamesOrPrograms,
GamesPath,
RecoveryAccount,
Log,
@@ -96,6 +99,7 @@ public MessageHeader(MessageType type)
public byte[] MessageToArray(bool loadToken = false)
{
var message = new byte[]{};
+ var token = new byte[]{};
switch (Type)
{
@@ -104,10 +108,17 @@ public byte[] MessageToArray(bool loadToken = false)
case MessageType.RecoveryAccount:
message = Encoding.UTF8.GetBytes(Message.ToString());
break;
+ case MessageType.Sale:
+ message = Encoding.UTF8.GetBytes(Message.ToString() + EndMessage);
+ break;
}
+ if (loadToken)
+ token = Encoding.UTF8.GetBytes(Token);
+
+ var tokenLength = token.Length;
var messageLength = message.Length;
- int lengthByte = loadToken ? messageLength + TokenLength + LengthAndDataType : messageLength + LengthAndDataType;
+ var lengthByte = messageLength + tokenLength + LengthAndDataType;
var result = new byte[lengthByte];
result[0] = (byte)Type;
@@ -127,6 +138,14 @@ public byte[] MessageToArray(bool loadToken = false)
Array.Copy(bytes, 0, result, 3, bytes.Length);
Array.Copy(message ?? [0], 0, result, LengthAndDataType, messageLength);
break;
+ case MessageType.Sale:
+ Array.Copy(bytes, 0, result, 3, bytes.Length);
+ Array.Copy(message ?? [0], 0, result, LengthAndDataType, messageLength);
+ Array.Copy(token ?? [0], 0, result, LengthAndDataType + messageLength, tokenLength);
+ break;
+ case MessageType.AllGamesOrPrograms:
+ Array.Copy(token ?? [0], 0, result, LengthAndDataType + messageLength, tokenLength);
+ break;
}
return result;
@@ -140,11 +159,14 @@ public byte[] MessageToArray(bool loadToken = false)
internal byte[] MessageServerToArray(bool loadToken = false)
{
var message = new byte[] { };
+ var token = new byte[] { };
switch (Type)
{
case MessageType.Token:
+ case MessageType.Sale:
case MessageType.Login:
+ case MessageType.AllGamesOrPrograms:
case MessageType.Registration:
case MessageType.TitleLoading:
case MessageType.ProgramsPath:
@@ -173,8 +195,14 @@ internal byte[] MessageServerToArray(bool loadToken = false)
break;
}
+
+ if (loadToken)
+ token = Encoding.UTF8.GetBytes(Token);
+
+ var tokenLength = token.Length;
var messageLength = message.Length;
- var lengthByte = loadToken ? messageLength + TokenLength + LengthAndDataType : messageLength + LengthAndDataType;
+ var lengthByte = messageLength + tokenLength + LengthAndDataType;
+
var result = new byte[lengthByte];
result[0] = (byte)Type;
result[1] = (byte)Language;
@@ -200,9 +228,11 @@ public static MessageHeader FromArray(ReadOnlySpan buffer)
switch ((MessageType)buffer[0])
{
case MessageHeader.MessageType.Version:
+ case MessageHeader.MessageType.Sale:
case MessageHeader.MessageType.PublicKey:
case MessageHeader.MessageType.Login:
case MessageHeader.MessageType.Registration:
+ case MessageHeader.MessageType.AllGamesOrPrograms:
case MessageHeader.MessageType.TitleLoading:
case MessageHeader.MessageType.RecoveryAccount:
case MessageHeader.MessageType.Programs:
@@ -247,12 +277,14 @@ 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.ProgramsPath:
case MessageHeader.MessageType.RecoveryAccount:
case MessageHeader.MessageType.Games:
case MessageHeader.MessageType.GamesPath:
case MessageHeader.MessageType.Registration:
case MessageHeader.MessageType.TitleLoading:
+ case MessageHeader.MessageType.Sale:
case MessageHeader.MessageType.Check:
return new MessageHeader(Encoding.UTF8.GetString(buffer.ToArray(), LengthAndDataType, buffer.Length - LengthAndDataType), (MessageType)buffer[0], (MessageLanguages.Languages)buffer[1]);
break;
@@ -266,11 +298,6 @@ public static MessageHeader ServerFromArray(ReadOnlySpan buffer)
return new MessageHeader((MessageType)buffer[0],
Encoding.UTF8.GetString(buffer.ToArray(), LengthAndDataType, buffer.Length - LengthAndDataType));
break;
- //case MessageHeader.MessageType.Login:
- // var result = buffer[LengthAndDataType..buffer.Length];
- // return new MessageHeader(result.ToArray(),
- // (MessageType)buffer[0]);
- // break;
default:
return null;
break;
diff --git a/ServerTCP/Models/Data/ApplicationContext.cs b/ServerTCP/Models/Data/ApplicationContext.cs
index 8010150..d33553e 100644
--- a/ServerTCP/Models/Data/ApplicationContext.cs
+++ b/ServerTCP/Models/Data/ApplicationContext.cs
@@ -17,6 +17,10 @@ internal class ApplicationContext : DbContext
public DbSet recovery_account { get; set; }
+ public DbSet sale_games { get; set; }
+
+ public DbSet sale_programs { get; set; }
+
private const string ConnectionString =
"Host=81.31.246.203;Port=5432;Database=DarkMilkBD;Username=gen_user;Password=lY8\\b@slc^g\\xJ";
diff --git a/ServerTCP/Models/SaleGames.cs b/ServerTCP/Models/SaleGames.cs
new file mode 100644
index 0000000..f607336
--- /dev/null
+++ b/ServerTCP/Models/SaleGames.cs
@@ -0,0 +1,15 @@
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+
+namespace ServerTCP.Models
+{
+ internal class SaleGames
+ {
+ [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+ public int id { get; set; }
+
+ public int user_id { get; set; }
+
+ public int game_id { get; set; }
+ }
+}
diff --git a/ServerTCP/Models/SalePrograms.cs b/ServerTCP/Models/SalePrograms.cs
new file mode 100644
index 0000000..32c4a8a
--- /dev/null
+++ b/ServerTCP/Models/SalePrograms.cs
@@ -0,0 +1,15 @@
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+
+namespace ServerTCP.Models
+{
+ internal class SalePrograms
+ {
+ [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+ public int id { get; set; }
+
+ public int user_id { get; set; }
+
+ public int program_id { get; set; }
+ }
+}
diff --git a/ServerTCP/Program.cs b/ServerTCP/Program.cs
index 85477f9..c7927cc 100644
--- a/ServerTCP/Program.cs
+++ b/ServerTCP/Program.cs
@@ -40,8 +40,7 @@ static void Main(string[] args)
try
{
Console.WriteLine("Подключился!");
- var buffer =
- new byte[listener.ReceiveBufferSize]; // размер буфера . максимум сообщение из 256 байт
+ var buffer = new byte[listener.ReceiveBufferSize]; // размер буфера . максимум сообщение из 256 байт
var size = 0; // количество реально полученных количества байт, потом чтобы оптимизировать память
do
{
@@ -52,6 +51,7 @@ static void Main(string[] args)
byte[] headerRequestBytes;
string message = string.Empty;
bool loadToken = false;
+ bool result;
switch (header.Type)
{
case MessageHeader.MessageType.Check:
@@ -90,7 +90,6 @@ static void Main(string[] args)
password = convertHash
};
- bool result;
if ((bool)DataBaseCommands.Select(header.Type, user.login))
result = false;
else
@@ -150,6 +149,34 @@ static void Main(string[] args)
? new MessageHeader("1", header.Type)
: new MessageHeader("0", header.Type);
break;
+
+ case MessageHeader.MessageType.Sale:
+ var messageSale = header.Message.ToString().Split(MessageHeader.EndMessage);
+ if (messageSale.Length != 2)
+ throw new ArgumentException(messageSale.Length.ToString());
+
+ var token = string.Empty;
+ try
+ {
+ token = Token.Tokens[messageSale[1]];
+ }
+ catch
+ {
+ ConsoleExtension.WriteLineColor("Токена не существует!", ConsoleColor.DarkRed);
+ }
+
+ if(string.IsNullOrEmpty(token))
+ result = false;
+ else
+ {
+ var insertMessage = messageSale[0].ToString() + "," + token;
+ result = DataBaseCommands.Insert(insertMessage, header.Type);
+ }
+
+ headerRequest = result
+ ? new MessageHeader("1", header.Type)
+ : new MessageHeader("0", header.Type);
+ break;
}
if (headerRequest is not null)
diff --git a/ServerTCP/Token.cs b/ServerTCP/Token.cs
index f3ea0af..34b408d 100644
--- a/ServerTCP/Token.cs
+++ b/ServerTCP/Token.cs
@@ -4,7 +4,7 @@
namespace ServerTCP
{
- internal class Token
+ public class Token
{
private static string Key = "sdkjoidarkmilk=";