Browse Source

Initial commit

master
j4ck 2 years ago
commit
af978406a4
  1. 34
      .gitignore
  2. 13
      .idea/.idea.RSND/.idea/.gitignore
  3. 4
      .idea/.idea.RSND/.idea/encodings.xml
  4. 8
      .idea/.idea.RSND/.idea/indexLayout.xml
  5. 16
      RSND.sln
  6. 47
      RSND/Core/Database.cs
  7. 93
      RSND/Core/DbClient.cs
  8. 11
      RSND/Core/DbInternals/Column.cs
  9. 6
      RSND/Core/DbInternals/Row.cs
  10. 7
      RSND/Core/DbInternals/Table.cs
  11. 14
      RSND/Core/Querying/BaseQuery.cs
  12. 6
      RSND/Core/Querying/IQuery.cs
  13. 9
      RSND/Core/Querying/Queries/GetQuery.cs
  14. 22
      RSND/Core/Querying/QueryHelper.cs
  15. 7
      RSND/Core/Querying/QueryType.cs
  16. 7
      RSND/Core/Response.cs
  17. 3
      RSND/Program.cs
  18. 15
      RSND/RSND.csproj
  19. 27
      RSND/RsndMain.cs

34
.gitignore

@ -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

13
.idea/.idea.RSND/.idea/.gitignore

@ -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

4
.idea/.idea.RSND/.idea/encodings.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>

8
.idea/.idea.RSND/.idea/indexLayout.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

16
RSND.sln

@ -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

47
RSND/Core/Database.cs

@ -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)
{
}
}
}

93
RSND/Core/DbClient.cs

@ -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();
}
}
}

11
RSND/Core/DbInternals/Column.cs

@ -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);
}
}

6
RSND/Core/DbInternals/Row.cs

@ -0,0 +1,6 @@
namespace RSND.Core.DbInternals;
public class Row
{
public Column[]? Columns;
}

7
RSND/Core/DbInternals/Table.cs

@ -0,0 +1,7 @@
namespace RSND.Core.DbInternals;
public class Table
{
public string? Name;
public Row[]? Rows;
}

14
RSND/Core/Querying/BaseQuery.cs

@ -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; }
}

6
RSND/Core/Querying/IQuery.cs

@ -0,0 +1,6 @@
namespace RSND.Core.Querying;
public interface IQuery
{
}

9
RSND/Core/Querying/Queries/GetQuery.cs

@ -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; }
}

22
RSND/Core/Querying/QueryHelper.cs

@ -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;
}
}

7
RSND/Core/Querying/QueryType.cs

@ -0,0 +1,7 @@
namespace RSND.Core.Querying;
public enum QueryType
{
GetValue,
CreateTable
}

7
RSND/Core/Response.cs

@ -0,0 +1,7 @@
namespace RSND.Core;
public class Response
{
public bool Success { get; set; }
public string Message { get; set; }
}

3
RSND/Program.cs

@ -0,0 +1,3 @@
using RSND;
RsndMain.Run();

15
RSND/RSND.csproj

@ -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>

27
RSND/RsndMain.cs

@ -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…
Cancel
Save