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

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