using linker.libs;
using linker.messenger.signin;
namespace linker.messenger.plan
{
///
/// 计划任务客户端
///
public class PlanClientMessenger : IMessenger
{
private readonly PlanTransfer planTransfer;
private readonly ISerializer serializer;
public PlanClientMessenger(PlanTransfer planTransfer, ISerializer serializer)
{
this.planTransfer = planTransfer;
this.serializer = serializer;
}
///
/// 获取
///
///
[MessengerId((ushort)PlanMessengerIds.Get)]
public void Get(IConnection connection)
{
PlanGetInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
List result = planTransfer.Get(info.Category).ToList();
connection.Write(serializer.Serialize(result));
}
///
/// 添加
///
///
[MessengerId((ushort)PlanMessengerIds.Add)]
public void AddClient(IConnection connection)
{
PlanAddInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
planTransfer.Add(info.Plan);
connection.Write(Helper.TrueArray);
}
//
/// 删除
///
///
[MessengerId((ushort)PlanMessengerIds.Remove)]
public void RemoveClient(IConnection connection)
{
PlanRemoveInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
planTransfer.Remove(info.PlanId);
connection.Write(Helper.TrueArray);
}
}
///
/// 计划任务服务端
///
public class PlanServerMessenger : IMessenger
{
private readonly IMessengerSender messengerSender;
private readonly SignInServerCaching signCaching;
private readonly ISerializer serializer;
public PlanServerMessenger(IMessengerSender messengerSender, SignInServerCaching signCaching, ISerializer serializer)
{
this.messengerSender = messengerSender;
this.signCaching = signCaching;
this.serializer = serializer;
}
[MessengerId((ushort)PlanMessengerIds.GetForward)]
public async Task GetForward(IConnection connection)
{
PlanGetInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
await messengerSender.SendReply(new MessageRequestWrap
{
Connection = to.Connection,
MessengerId = (ushort)PlanMessengerIds.Get,
Payload = connection.ReceiveRequestWrap.Payload
}).ContinueWith(async (result) =>
{
if (result.Result.Code == MessageResponeCodes.OK)
{
await messengerSender.ReplyOnly(new MessageResponseWrap
{
Connection = connection,
Code = MessageResponeCodes.OK,
Payload = result.Result.Data,
RequestId = requestid
}, (ushort)PlanMessengerIds.GetForward).ConfigureAwait(false);
}
}).ConfigureAwait(false);
}
}
[MessengerId((ushort)PlanMessengerIds.AddForward)]
public async Task AddForward(IConnection connection)
{
PlanAddInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
await messengerSender.SendReply(new MessageRequestWrap
{
Connection = to.Connection,
MessengerId = (ushort)PlanMessengerIds.Add,
Payload = connection.ReceiveRequestWrap.Payload
}).ContinueWith(async (result) =>
{
if (result.Result.Code == MessageResponeCodes.OK)
{
await messengerSender.ReplyOnly(new MessageResponseWrap
{
Connection = connection,
Code = MessageResponeCodes.OK,
Payload = result.Result.Data,
RequestId = requestid
}, (ushort)PlanMessengerIds.AddForward).ConfigureAwait(false);
}
}).ConfigureAwait(false);
}
}
[MessengerId((ushort)PlanMessengerIds.RemoveForward)]
public async Task RemoveForward(IConnection connection)
{
PlanRemoveInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
await messengerSender.SendReply(new MessageRequestWrap
{
Connection = to.Connection,
MessengerId = (ushort)PlanMessengerIds.Remove,
Payload = connection.ReceiveRequestWrap.Payload
}).ContinueWith(async (result) =>
{
if (result.Result.Code == MessageResponeCodes.OK)
{
await messengerSender.ReplyOnly(new MessageResponseWrap
{
Connection = connection,
Code = MessageResponeCodes.OK,
Payload = result.Result.Data,
RequestId = requestid
}, (ushort)PlanMessengerIds.RemoveForward).ConfigureAwait(false);
}
}).ConfigureAwait(false);
}
}
}
}