using cmonitor.server.service; using cmonitor.server.service.messengers.hijack; using cmonitor.server.service.messengers.sign; using common.libs.extends; using MemoryPack; namespace cmonitor.server.api.services { public sealed class HijackClientService : IClientService { private readonly RuleConfig ruleConfig; private readonly SignCaching signCaching; private readonly MessengerSender messengerSender; public HijackClientService(RuleConfig ruleConfig, SignCaching signCaching, MessengerSender messengerSender) { this.ruleConfig = ruleConfig; this.signCaching = signCaching; this.messengerSender = messengerSender; } public Dictionary Info(ClientServiceParamsInfo param) { return ruleConfig.UserNames; } public string AddName(ClientServiceParamsInfo param) { return ruleConfig.AddName(param.Content); } public string AddProcessGroup(ClientServiceParamsInfo param) { return ruleConfig.AddProcessGroup(param.Content.DeJson()); } public string DeleteProcessGroup(ClientServiceParamsInfo param) { return ruleConfig.DeleteProcessGroup(param.Content.DeJson()); } public string AddProcess(ClientServiceParamsInfo param) { return ruleConfig.AddProcess(param.Content.DeJson()); } public string DeleteProcess(ClientServiceParamsInfo param) { return ruleConfig.DeleteProcess(param.Content.DeJson()); } public string AddRule(ClientServiceParamsInfo param) { return ruleConfig.AddRule(param.Content.DeJson()); } public string DeleteRule(ClientServiceParamsInfo param) { return ruleConfig.DeleteRule(param.Content.DeJson()); } public string UpdateDevices(ClientServiceParamsInfo param) { return ruleConfig.UpdateDevices(param.Content.DeJson()); } public async Task> SetRules(ClientServiceParamsInfo param) { List errorDevices = new List(); SetRuleParamInfo setRuleParamInfo = param.Content.DeJson(); if (setRuleParamInfo.Devices.Length > 0) { byte[] bytes = MemoryPackSerializer.Serialize(setRuleParamInfo.Rules); for (int i = 0; i < setRuleParamInfo.Devices.Length; i++) { if (signCaching.Get(setRuleParamInfo.Devices[i], out SignCacheInfo cache)) { bool res = await messengerSender.SendOnly(new MessageRequestWrap { Connection = cache.Connection, MessengerId = (ushort)HijackMessengerIds.Update, Payload = bytes }); if (res == false) { errorDevices.Add(setRuleParamInfo.Devices[i]); } } } } return errorDevices; } public sealed class SetRuleParamInfo { public string[] Devices { get; set; } public SetRuleInfo Rules { get; set; } } } }