125 lines
3.1 KiB
C#
125 lines
3.1 KiB
C#
using Google.Protobuf.WellKnownTypes;
|
|
using MxGateway.Contracts.Proto;
|
|
|
|
namespace MxGateway.Server.Grpc;
|
|
|
|
public sealed class MxAccessGrpcMapper
|
|
{
|
|
private readonly TimeProvider _timeProvider;
|
|
|
|
public MxAccessGrpcMapper(TimeProvider? timeProvider = null)
|
|
{
|
|
_timeProvider = timeProvider ?? TimeProvider.System;
|
|
}
|
|
|
|
public WorkerCommand MapCommand(MxCommandRequest request)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(request);
|
|
ArgumentNullException.ThrowIfNull(request.Command);
|
|
|
|
return new WorkerCommand
|
|
{
|
|
Command = request.Command.Clone(),
|
|
EnqueueTimestamp = Timestamp.FromDateTimeOffset(_timeProvider.GetUtcNow()),
|
|
};
|
|
}
|
|
|
|
public MxCommandReply MapCommandReply(WorkerCommandReply reply)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(reply);
|
|
|
|
if (reply.Reply is null)
|
|
{
|
|
return new MxCommandReply
|
|
{
|
|
ProtocolStatus = ProtocolViolation("Worker command reply did not contain a public reply payload."),
|
|
};
|
|
}
|
|
|
|
return reply.Reply.Clone();
|
|
}
|
|
|
|
public MxEvent MapEvent(WorkerEvent workerEvent)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(workerEvent);
|
|
|
|
return workerEvent.Event?.Clone() ?? new MxEvent
|
|
{
|
|
Family = MxEventFamily.Unspecified,
|
|
RawStatus = "Worker event did not contain a public event payload.",
|
|
};
|
|
}
|
|
|
|
public static ProtocolStatus Ok(string message = "OK")
|
|
{
|
|
return new ProtocolStatus
|
|
{
|
|
Code = ProtocolStatusCode.Ok,
|
|
Message = message,
|
|
};
|
|
}
|
|
|
|
public static ProtocolStatus InvalidRequest(string message)
|
|
{
|
|
return new ProtocolStatus
|
|
{
|
|
Code = ProtocolStatusCode.InvalidRequest,
|
|
Message = message,
|
|
};
|
|
}
|
|
|
|
public static ProtocolStatus SessionNotFound(string message)
|
|
{
|
|
return new ProtocolStatus
|
|
{
|
|
Code = ProtocolStatusCode.SessionNotFound,
|
|
Message = message,
|
|
};
|
|
}
|
|
|
|
public static ProtocolStatus SessionNotReady(string message)
|
|
{
|
|
return new ProtocolStatus
|
|
{
|
|
Code = ProtocolStatusCode.SessionNotReady,
|
|
Message = message,
|
|
};
|
|
}
|
|
|
|
public static ProtocolStatus WorkerUnavailable(string message)
|
|
{
|
|
return new ProtocolStatus
|
|
{
|
|
Code = ProtocolStatusCode.WorkerUnavailable,
|
|
Message = message,
|
|
};
|
|
}
|
|
|
|
public static ProtocolStatus Timeout(string message)
|
|
{
|
|
return new ProtocolStatus
|
|
{
|
|
Code = ProtocolStatusCode.Timeout,
|
|
Message = message,
|
|
};
|
|
}
|
|
|
|
public static ProtocolStatus Canceled(string message)
|
|
{
|
|
return new ProtocolStatus
|
|
{
|
|
Code = ProtocolStatusCode.Canceled,
|
|
Message = message,
|
|
};
|
|
}
|
|
|
|
public static ProtocolStatus ProtocolViolation(string message)
|
|
{
|
|
return new ProtocolStatus
|
|
{
|
|
Code = ProtocolStatusCode.ProtocolViolation,
|
|
Message = message,
|
|
};
|
|
}
|
|
}
|