1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using InABox.API;
- using InABox.Core;
- using InABox.Database;
- using InABox.Server;
- 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)
- {
- }
- }
|