using System.Net; using System.Text; using System.Text.Json; using XFEExtension.NetCore.DelegateExtension; using XFEExtension.NetCore.ServerInteractive.Models; using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels; using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers; using XFEExtension.NetCore.StringExtension.Json; namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester; /// /// 表格请求器 /// public class TableRequester { /// /// 请求地址 /// public string RequestAddress { get; set; } = string.Empty; /// /// 电脑信息 /// public string DeviceInfo { get; set; } = string.Empty; /// /// 用户登录Session /// public string Session { get; set; } = string.Empty; /// /// Json序列化选项 /// public JsonSerializerOptions? JsonSerializerOptions { get; set; } /// /// 请求消息返回事件 /// public event XFEEventHandler? MessageReceived; private static string GetRequestName() => $"{typeof(T).Name[0]}".ToLower() + typeof(T).Name[1..]; /// /// 获取Table列表(分页) /// /// 数据类型 /// 表名称 /// 每页个数 /// 当前页面 /// 表内容 public async Task> Get(string tableName, int pageCount, int page) where T : IIdModel { try { var (response, code) = await InteractiveHelper.GetServerResponse($"{RequestAddress}/table/get/{tableName}", new { pageCount, page, session = Session, deviceInfo = DeviceInfo }.ToJson()); if (code == HttpStatusCode.OK) { MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code)); var result = JsonSerializer.Deserialize>(response, JsonSerializerOptions); return result ?? new(); } MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code)); return new(); } catch (Exception ex) { MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError)); return new(); } } /// /// 获取Table列表(分页) /// /// 数据类型 /// 表内容 public async Task> Get(int pageCount, int page) where T : IIdModel => await Get(GetRequestName(), pageCount, page); /// /// 获取Table列表 /// /// 数据类型 /// 表内容 public async Task> Get() where T : IIdModel => await Get(-1, -1); /// /// 向表中添加一个数据 /// /// 数据类型 /// 表名称 /// 数据 /// 是否添加成功 public async Task Add(string tableName, T data) where T : IIdModel { try { var (response, code) = await InteractiveHelper.GetServerResponse($"{RequestAddress}/table/add/{tableName}", new { data = Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonSerializer.Serialize(data, JsonSerializerOptions))), session = Session, deviceInfo = DeviceInfo }.ToJson()); if (code == HttpStatusCode.OK) { MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code)); return true; } MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code)); return false; } catch (Exception ex) { MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError)); return false; } } /// /// 向表中添加一个数据 /// /// 数据类型 /// 数据 /// 是否添加成功 public async Task Add(T data) where T : IIdModel => await Add(GetRequestName(), data); /// /// 从表中删除一个数据 /// /// 数据类型 /// 表名称 /// 元素的ID /// 是否删除成功 public async Task Remove(string tableName, string id) where T : IIdModel { try { var (response, code) = await InteractiveHelper.GetServerResponse($"{RequestAddress}/table/remove/{tableName}", new { id, session = Session, deviceInfo = DeviceInfo }.ToJson()); if (code == HttpStatusCode.OK) { MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code)); return true; } MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code)); return false; } catch (Exception ex) { MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError)); return false; } } /// /// 从表中删除一个数据 /// /// 数据类型 /// 元素的ID /// 是否删除成功 public async Task Remove(string id) where T : IIdModel => await Remove(GetRequestName(), id); /// /// 更改表中的数据 /// /// 数据类型 /// 表名称 /// 数据 /// public async Task Change(string tableName, T data) where T : IIdModel { try { var (response, code) = await InteractiveHelper.GetServerResponse($"{RequestAddress}/table/change/{tableName}", new { data = Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonSerializer.Serialize(data, JsonSerializerOptions))), session = Session, deviceInfo = DeviceInfo }.ToJson()); if (code == HttpStatusCode.OK) { MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code)); return true; } MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code)); return false; } catch (Exception ex) { MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError)); return false; } } /// /// 更改表中的数据 /// /// 数据类型 /// 数据 /// 是否修改成功 public async Task Change(T data) where T : IIdModel => await Change(GetRequestName(), data); }