You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
using Fleck;
|
|
using Newtonsoft.Json;
|
|
using Pastel;
|
|
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;
|
|
}
|
|
|
|
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();
|
|
|
|
switch (queryType)
|
|
{
|
|
case QueryType.GetValue:
|
|
{
|
|
GetQuery getQuery = JsonConvert.DeserializeObject<GetQuery>(query);
|
|
var queryResult = RsndMain.Db.GetValue(getQuery);
|
|
_socket.Send(queryResult);
|
|
Console.WriteLine($"Sent: {queryResult}".Pastel("#71C562"));
|
|
break;
|
|
}
|
|
|
|
case QueryType.CreateTable:
|
|
{
|
|
CreateTableQuery createTableQuery = JsonConvert.DeserializeObject<CreateTableQuery>(query);
|
|
RsndMain.Db.CreateTable(new Table
|
|
{
|
|
Name = createTableQuery?.TableName,
|
|
Rows = createTableQuery?.Rows
|
|
});
|
|
break;
|
|
}
|
|
|
|
case null:
|
|
break;
|
|
default:
|
|
throw new ArgumentOutOfRangeException();
|
|
}
|
|
}
|
|
}
|