| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | using InABox.API;using InABox.Core;using InABox.Database;namespace InABox.Rpc;public class RpcQueryHandler : RpcCommandHandler<IRpcServer, RpcQueryCommand, RpcQueryParameters, RpcQueryResult> {    protected override RpcQueryResult Execute(IRpcSession session, RpcQueryParameters parameters)    {        var user = CredentialsCache.ValidateAndRefresh(session.ID)            ?? throw new RpcException("User not found in Credentials Cache!", RpcError.UNAUTHENTICATED);        var response = new RpcQueryResult();        var tasks = new List<Task<RpcQueryTable>>();        foreach (var query in parameters.Queries)        {            var task = Task.Run(() =>            {                var table = new RpcQueryTable() { Key = query.Key };                try                {                    var store = DbFactory.FindStore(query.Type, user.ID, user.UserID, session.Platform, session.Version ?? "");                    table.Table = store.Query(query.Filter, query.Columns, query.Sort);                }                catch (Exception e)                {                    Logger.Send(                        LogType.Error,                         user.UserID,                        string.Format(                            "[{0} {1}] Error: {2}\n{3}",                             PlatformUtils.PlatformToString(session.Platform),                             session.Version,                            e.Message,                            e.StackTrace                        )                    );                                       }                return table;            });            tasks.Add(task);        }        Task.WaitAll(tasks.ToArray());        response.Tables = tasks.Select(x => x.Result).ToArray();                return response;    }    public RpcQueryHandler(IRpcServer sender) : base(sender)    {    }}
 |