Initial commit
This commit is contained in:
		
						commit
						af978406a4
					
				|  | @ -0,0 +1,34 @@ | ||||||
|  | # Common IntelliJ Platform excludes | ||||||
|  | 
 | ||||||
|  | # User specific | ||||||
|  | **/.idea/**/workspace.xml | ||||||
|  | **/.idea/**/tasks.xml | ||||||
|  | **/.idea/shelf/* | ||||||
|  | **/.idea/dictionaries | ||||||
|  | **/.idea/httpRequests/ | ||||||
|  | 
 | ||||||
|  | # Sensitive or high-churn files | ||||||
|  | **/.idea/**/dataSources/ | ||||||
|  | **/.idea/**/dataSources.ids | ||||||
|  | **/.idea/**/dataSources.xml | ||||||
|  | **/.idea/**/dataSources.local.xml | ||||||
|  | **/.idea/**/sqlDataSources.xml | ||||||
|  | **/.idea/**/dynamic.xml | ||||||
|  | 
 | ||||||
|  | # Rider | ||||||
|  | # Rider auto-generates .iml files, and contentModel.xml | ||||||
|  | **/.idea/**/*.iml | ||||||
|  | **/.idea/**/contentModel.xml | ||||||
|  | **/.idea/**/modules.xml | ||||||
|  | 
 | ||||||
|  | *.suo | ||||||
|  | *.user | ||||||
|  | .vs/ | ||||||
|  | [Bb]in/ | ||||||
|  | [Oo]bj/ | ||||||
|  | _UpgradeReport_Files/ | ||||||
|  | [Pp]ackages/ | ||||||
|  | 
 | ||||||
|  | Thumbs.db | ||||||
|  | Desktop.ini | ||||||
|  | .DS_Store | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | # Default ignored files | ||||||
|  | /shelf/ | ||||||
|  | /workspace.xml | ||||||
|  | # Rider ignored files | ||||||
|  | /modules.xml | ||||||
|  | /.idea.RSND.iml | ||||||
|  | /contentModel.xml | ||||||
|  | /projectSettingsUpdater.xml | ||||||
|  | # Editor-based HTTP Client requests | ||||||
|  | /httpRequests/ | ||||||
|  | # Datasource local storage ignored files | ||||||
|  | /dataSources/ | ||||||
|  | /dataSources.local.xml | ||||||
|  | @ -0,0 +1,4 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" /> | ||||||
|  | </project> | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="UserContentModel"> | ||||||
|  |     <attachedFolders /> | ||||||
|  |     <explicitIncludes /> | ||||||
|  |     <explicitExcludes /> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
|  | @ -0,0 +1,16 @@ | ||||||
|  |  | ||||||
|  | Microsoft Visual Studio Solution File, Format Version 12.00 | ||||||
|  | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RSND", "RSND\RSND.csproj", "{1C728CE6-0609-415C-99A9-9345B32243F8}" | ||||||
|  | EndProject | ||||||
|  | Global | ||||||
|  | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
|  | 		Debug|Any CPU = Debug|Any CPU | ||||||
|  | 		Release|Any CPU = Release|Any CPU | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||||
|  | 		{1C728CE6-0609-415C-99A9-9345B32243F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||||
|  | 		{1C728CE6-0609-415C-99A9-9345B32243F8}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
|  | 		{1C728CE6-0609-415C-99A9-9345B32243F8}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
|  | 		{1C728CE6-0609-415C-99A9-9345B32243F8}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
|  | 	EndGlobalSection | ||||||
|  | EndGlobal | ||||||
|  | @ -0,0 +1,47 @@ | ||||||
|  | using Newtonsoft.Json; | ||||||
|  | using RSND.Core.DbInternals; | ||||||
|  | using RSND.Core.Querying.Queries; | ||||||
|  | 
 | ||||||
|  | namespace RSND.Core; | ||||||
|  | 
 | ||||||
|  | public class Database | ||||||
|  | { | ||||||
|  |     List<Table> tables = new(); | ||||||
|  | 
 | ||||||
|  |     public void CreateTable(Table table) | ||||||
|  |     { | ||||||
|  |         tables.Add(table); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private static string GetRowsJson(Row[]? rows) | ||||||
|  |     { | ||||||
|  |         return JsonConvert.SerializeObject(new { Rows = rows }); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public string GetValue(GetQuery? query) | ||||||
|  |     { | ||||||
|  |         Console.WriteLine(tables.Count); | ||||||
|  |         var table = query?.Table; | ||||||
|  |         var where = query?.Where; | ||||||
|  | 
 | ||||||
|  |         var split = where?.Split("|"); | ||||||
|  |         var colName = split?[0]; | ||||||
|  |         var condition = split?[1]; | ||||||
|  |         var param = split?[2]; | ||||||
|  | 
 | ||||||
|  |         if (query?.Select != "*") return ""; | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         var tableToReturn = tables.Find(x => x.Name == table); | ||||||
|  |         var rows = tableToReturn?.Rows?.Where(x => x.Columns.FirstOrDefault(y => y.Data.Key == colName)?.Data.Value == param).ToArray(); | ||||||
|  |          | ||||||
|  |         return GetRowsJson(rows); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public static void Loop() | ||||||
|  |     { | ||||||
|  |         while (true) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,93 @@ | ||||||
|  | using Fleck; | ||||||
|  | using Newtonsoft.Json; | ||||||
|  | using RSND.Core.DbInternals; | ||||||
|  | using RSND.Core.Querying; | ||||||
|  | using RSND.Core.Querying.Queries; | ||||||
|  | 
 | ||||||
|  | namespace RSND.Core; | ||||||
|  | 
 | ||||||
|  | public class DbClient | ||||||
|  | { | ||||||
|  |     private readonly IWebSocketConnection _socket; | ||||||
|  |      | ||||||
|  |     public DbClient(IWebSocketConnection socket) | ||||||
|  |     { | ||||||
|  |         _socket = socket; | ||||||
|  |          | ||||||
|  |         RsndMain.Db.CreateTable(new Table | ||||||
|  |         { | ||||||
|  |             Name = "j4ces.table", | ||||||
|  |             Rows = new [] | ||||||
|  |             { | ||||||
|  |                 new Row | ||||||
|  |                 { | ||||||
|  |                     Columns = new [] | ||||||
|  |                     { | ||||||
|  |                         new Column("id", "1"), | ||||||
|  |                         new Column("amog us", "is THE GAME") | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |                 new Row | ||||||
|  |                 { | ||||||
|  |                     Columns = new [] | ||||||
|  |                     { | ||||||
|  |                         new Column("id", "1"), | ||||||
|  |                         new Column("fortnite", "is THE GAME") | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void InvalidQuery() | ||||||
|  |     { | ||||||
|  |         _socket.Send(JsonConvert.SerializeObject(new Response | ||||||
|  |         { | ||||||
|  |             Success = false, | ||||||
|  |             Message = "Invalid query" | ||||||
|  |         })); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public void Handle() | ||||||
|  |     { | ||||||
|  |         _socket.OnMessage = message => | ||||||
|  |         { | ||||||
|  |             QueryType? queryType = QueryHelper.GetQueryType(message); | ||||||
|  |              | ||||||
|  |             RunQuery(message, queryType); | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void RunQuery(string? query, QueryType? queryType) | ||||||
|  |     { | ||||||
|  |         if (query == null || queryType == null) | ||||||
|  |             InvalidQuery(); | ||||||
|  | 
 | ||||||
|  |         // check if  | ||||||
|  |         switch (queryType) | ||||||
|  |         { | ||||||
|  |             case QueryType.GetValue: | ||||||
|  |             { | ||||||
|  |                 GetQuery getQuery = JsonConvert.DeserializeObject<GetQuery>(query); | ||||||
|  |                 var queryResult = RsndMain.Db.GetValue(getQuery); | ||||||
|  |                 _socket.Send(queryResult); | ||||||
|  |                 Console.WriteLine($"Yooo: {queryResult}"); | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             case QueryType.CreateTable: | ||||||
|  |             { | ||||||
|  |                 /*RsndMain.Db.CreateTable(new Table | ||||||
|  |                 { | ||||||
|  |                     Name = query.Table | ||||||
|  |                 });*/ | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             case null: | ||||||
|  |                 break; | ||||||
|  |             default: | ||||||
|  |                 throw new ArgumentOutOfRangeException(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | namespace RSND.Core.DbInternals; | ||||||
|  | 
 | ||||||
|  | public class Column | ||||||
|  | { | ||||||
|  |     public KeyValuePair<string, string> Data; | ||||||
|  |      | ||||||
|  |     public Column(string name, string value) | ||||||
|  |     { | ||||||
|  |         Data = new KeyValuePair<string, string>(name, value); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | namespace RSND.Core.DbInternals; | ||||||
|  | 
 | ||||||
|  | public class Row | ||||||
|  | { | ||||||
|  |     public Column[]? Columns; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | namespace RSND.Core.DbInternals; | ||||||
|  | 
 | ||||||
|  | public class Table | ||||||
|  | { | ||||||
|  |     public string? Name; | ||||||
|  |     public Row[]? Rows; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | namespace RSND.Core.Querying; | ||||||
|  | 
 | ||||||
|  | /// <summary> | ||||||
|  | /// The required values that any query must have. | ||||||
|  | /// </summary> | ||||||
|  | public class BaseQuery | ||||||
|  | { | ||||||
|  |     public BaseQuery(string type) | ||||||
|  |     { | ||||||
|  |         Type = type; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public string Type { get; set; } | ||||||
|  | }  | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | namespace RSND.Core.Querying; | ||||||
|  | 
 | ||||||
|  | public interface IQuery | ||||||
|  | { | ||||||
|  |      | ||||||
|  | } | ||||||
|  | @ -0,0 +1,9 @@ | ||||||
|  | namespace RSND.Core.Querying.Queries; | ||||||
|  | 
 | ||||||
|  | public class GetQuery : IQuery | ||||||
|  | { | ||||||
|  |     public string Type { get; set; } | ||||||
|  |     public string Table { get; set; } | ||||||
|  |     public string Select { get; set; } | ||||||
|  |     public string Where { get; set; } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,22 @@ | ||||||
|  | using Newtonsoft.Json; | ||||||
|  | 
 | ||||||
|  | namespace RSND.Core.Querying.Queries; | ||||||
|  | 
 | ||||||
|  | public static class QueryHelper | ||||||
|  | { | ||||||
|  |     public static QueryType? GetQueryType(string queryJson) | ||||||
|  |     { | ||||||
|  |         BaseQuery? query = JsonConvert.DeserializeObject<BaseQuery>(queryJson); | ||||||
|  |          | ||||||
|  |         if (query != null) | ||||||
|  |         { | ||||||
|  |             return query.Type switch | ||||||
|  |             { | ||||||
|  |                 "GetValue" => QueryType.GetValue, | ||||||
|  |                 _ => null | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | namespace RSND.Core.Querying; | ||||||
|  | 
 | ||||||
|  | public enum QueryType | ||||||
|  | { | ||||||
|  |     GetValue, | ||||||
|  |     CreateTable | ||||||
|  | } | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | namespace RSND.Core; | ||||||
|  | 
 | ||||||
|  | public class Response | ||||||
|  | { | ||||||
|  |     public bool Success { get; set; } | ||||||
|  |     public string Message { get; set; } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | using RSND; | ||||||
|  | 
 | ||||||
|  | RsndMain.Run(); | ||||||
|  | @ -0,0 +1,15 @@ | ||||||
|  | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|  | 
 | ||||||
|  |     <PropertyGroup> | ||||||
|  |         <OutputType>Exe</OutputType> | ||||||
|  |         <TargetFramework>net6.0</TargetFramework> | ||||||
|  |         <ImplicitUsings>enable</ImplicitUsings> | ||||||
|  |         <Nullable>enable</Nullable> | ||||||
|  |     </PropertyGroup> | ||||||
|  | 
 | ||||||
|  |     <ItemGroup> | ||||||
|  |       <PackageReference Include="Fleck" Version="1.2.0" /> | ||||||
|  |       <PackageReference Include="Newtonsoft.Json" Version="13.0.2-beta1" /> | ||||||
|  |     </ItemGroup> | ||||||
|  | 
 | ||||||
|  | </Project> | ||||||
|  | @ -0,0 +1,27 @@ | ||||||
|  | using Fleck; | ||||||
|  | using RSND.Core; | ||||||
|  | 
 | ||||||
|  | namespace RSND; | ||||||
|  | 
 | ||||||
|  | public static class RsndMain | ||||||
|  | { | ||||||
|  |     public static Database Db = new(); | ||||||
|  |      | ||||||
|  |     public static void Run() | ||||||
|  |     { | ||||||
|  |         WebSocketServer server = new WebSocketServer("ws://0.0.0.0:7878"); | ||||||
|  | 
 | ||||||
|  |         FleckLog.Level = LogLevel.Error; | ||||||
|  | 
 | ||||||
|  |         server.Start(socket => | ||||||
|  |         { | ||||||
|  |             socket.OnOpen = () => | ||||||
|  |             { | ||||||
|  |                 var dbClient = new DbClient(socket); | ||||||
|  |                 dbClient.Handle(); | ||||||
|  |             }; | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         Database.Loop(); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue