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