Initial commit carried over from private repo. This is V2.
This commit is contained in:
22
code/MessengerApi.Contracts.MessageParser/IMessageParser.cs
Normal file
22
code/MessengerApi.Contracts.MessageParser/IMessageParser.cs
Normal file
@ -0,0 +1,22 @@
|
||||
namespace MessengerApi.Contracts.MessageParser
|
||||
{
|
||||
/// <summary>
|
||||
/// A tool that helps converting POCO request/response models into <see cref="InboxMessage"/>, <see cref="OutboxMessage"/> and back.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If you implement this, it's gonna be a lot easier for you to translate
|
||||
/// dumb request class into <see cref="OutboxMessage"/>, then convert
|
||||
/// <see cref="InboxMessage"/> back to request at server-side, and do the
|
||||
/// same with the response all the way down to the client.
|
||||
/// </remarks>
|
||||
public interface IMessageParser<TRequest, TResponse>
|
||||
{
|
||||
OutboxMessage GetMessageFromRequest(TRequest request, int targetUserId);
|
||||
|
||||
TRequest GetRequestFromMessage(InboxMessage message);
|
||||
|
||||
OutboxMessage GetMessageFromResponse(TResponse response, string apiKey, int targetUserId, InboxMessage requestOrigin = null);
|
||||
|
||||
TResponse GetResponseFromMessage(InboxMessage message);
|
||||
}
|
||||
}
|
||||
50
code/MessengerApi.Contracts.MessageParser/MessageParser.cs
Normal file
50
code/MessengerApi.Contracts.MessageParser/MessageParser.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MessengerApi.Contracts.MessageParser
|
||||
{
|
||||
public class MessageParser<TRequest, TResponse> : IMessageParser<TRequest, TResponse>
|
||||
{
|
||||
public OutboxMessage GetMessageFromRequest(
|
||||
TRequest request,
|
||||
int targetUserId)
|
||||
{
|
||||
var message = new OutboxMessage
|
||||
{
|
||||
|
||||
}
|
||||
apikey,
|
||||
targetUserId,
|
||||
typeof(TRequest).Name,
|
||||
JsonConvert.SerializeObject(request));
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
public OutboxMessage GetMessageFromResponse(
|
||||
TResponse response,
|
||||
string apiKey,
|
||||
int targetUserId,
|
||||
InboxMessage requestOrigin = null)
|
||||
{
|
||||
var message = new OutboxMessage(
|
||||
apiKey,
|
||||
targetUserId,
|
||||
requestOrigin.PayloadType,
|
||||
JsonConvert.SerializeObject(response));
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
public TRequest GetRequestFromMessage(InboxMessage message)
|
||||
{
|
||||
var request = JsonConvert.DeserializeObject<TRequest>(message.Payload);
|
||||
return request;
|
||||
}
|
||||
|
||||
public TResponse GetResponseFromMessage(InboxMessage message)
|
||||
{
|
||||
var request = JsonConvert.DeserializeObject<TResponse>(message.Payload);
|
||||
return request;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>disable</Nullable>
|
||||
<AssemblyVersion>$([System.DateTime]::UtcNow.ToString("yyyy.MM.dd.HHmm"))</AssemblyVersion>
|
||||
<PackageVersion>$([System.DateTime]::UtcNow.ToString("yyyy.MM.dd.HHmm"))</PackageVersion>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
<BaseOutputPath>..\out\</BaseOutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MessengerApi.Contracts" Version="2025.6.28.2202" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Reference in New Issue
Block a user