Files
linker/cmonitor/server/api/services/HijackClientService.cs
snltty eb08f03738 init
2023-09-14 15:16:12 +08:00

96 lines
3.5 KiB
C#

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<string, UserNameInfo> 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<UpdateGroupInfo>());
}
public string DeleteProcessGroup(ClientServiceParamsInfo param)
{
return ruleConfig.DeleteProcessGroup(param.Content.DeJson<DeleteGroupInfo>());
}
public string AddProcess(ClientServiceParamsInfo param)
{
return ruleConfig.AddProcess(param.Content.DeJson<UpdateItemInfo>());
}
public string DeleteProcess(ClientServiceParamsInfo param)
{
return ruleConfig.DeleteProcess(param.Content.DeJson<DeleteItemInfo>());
}
public string AddRule(ClientServiceParamsInfo param)
{
return ruleConfig.AddRule(param.Content.DeJson<UpdateRuleInfo>());
}
public string DeleteRule(ClientServiceParamsInfo param)
{
return ruleConfig.DeleteRule(param.Content.DeJson<DeleteRuleInfo>());
}
public string UpdateDevices(ClientServiceParamsInfo param)
{
return ruleConfig.UpdateDevices(param.Content.DeJson<UpdateDevicesInfo>());
}
public async Task<List<string>> SetRules(ClientServiceParamsInfo param)
{
List<string> errorDevices = new List<string>();
SetRuleParamInfo setRuleParamInfo = param.Content.DeJson<SetRuleParamInfo>();
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; }
}
}
}