Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -147,4 +147,6 @@ npm-debug.log
.env

# Database
*.db*
*.db*

/logs
32 changes: 32 additions & 0 deletions source/CPDLCPlugin/Messages/BeginDialogueRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using CPDLCServer.Contracts;
using MediatR;
using Serilog;

namespace CPDLCPlugin.Messages;

public record BeginDialogueRequest(
string Recipient,
CpdlcUplinkResponseType ResponseType,
string Content)
: IRequest;

public class BeginDialogueRequestHandler(Plugin plugin, ILogger logger)
: IRequestHandler<BeginDialogueRequest>
{
public async Task Handle(BeginDialogueRequest request, CancellationToken cancellationToken)
{
logger.Information("Beginning dialogue with {Recipient}", request.Recipient);

if (plugin.ConnectionManager is null || !plugin.ConnectionManager.IsConnected)
{
logger.Warning("Not connected to server");
return;
}

await plugin.ConnectionManager.BeginDialogue(
request.Recipient,
request.ResponseType,
request.Content,
cancellationToken);
}
}
36 changes: 36 additions & 0 deletions source/CPDLCPlugin/Messages/ReplyToDownlinkRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using CPDLCServer.Contracts;
using MediatR;
using Serilog;

namespace CPDLCPlugin.Messages;

public record ReplyToDownlinkRequest(
string Recipient,
Guid DialogueId,
int DownlinkMessageId,
CpdlcUplinkResponseType ResponseType,
string Content)
: IRequest;

public class ReplyToDownlinkRequestHandler(Plugin plugin, ILogger logger)
: IRequestHandler<ReplyToDownlinkRequest>
{
public async Task Handle(ReplyToDownlinkRequest request, CancellationToken cancellationToken)
{
logger.Information("Replying to downlink {DownlinkMessageId} in dialogue {DialogueId} for {Recipient}",
request.DownlinkMessageId, request.DialogueId, request.Recipient);

if (plugin.ConnectionManager is null || !plugin.ConnectionManager.IsConnected)
{
logger.Warning("Not connected to server");
return;
}

await plugin.ConnectionManager.ReplyToDownlink(
request.DialogueId,
request.DownlinkMessageId,
request.ResponseType,
request.Content,
cancellationToken);
}
}
17 changes: 10 additions & 7 deletions source/CPDLCPlugin/Messages/SendStandbyUplinkRequest.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
using CPDLCServer.Contracts;
using CPDLCServer.Contracts;
using MediatR;
using Serilog;

namespace CPDLCPlugin.Messages;

public record SendStandbyUplinkRequest(int DownlinkMessageId, string Recipient) : IRequest;
public record SendDeferredUplinkRequest(int DownlinkMessageId, string Recipient) : IRequest;
public record SendUnableUplinkRequest(int DownlinkMessageId, string Recipient, string Reason = "") : IRequest;
public record SendStandbyUplinkRequest(Guid DialogueId, int DownlinkMessageId, string Recipient) : IRequest;
public record SendDeferredUplinkRequest(Guid DialogueId, int DownlinkMessageId, string Recipient) : IRequest;
public record SendUnableUplinkRequest(Guid DialogueId, int DownlinkMessageId, string Recipient, string Reason = "") : IRequest;

public class SendStandbyUplinkRequestHandler(IMediator mediator, ILogger logger)
: IRequestHandler<SendStandbyUplinkRequest>
Expand All @@ -17,8 +17,9 @@ public async Task Handle(SendStandbyUplinkRequest request, CancellationToken can
request.Recipient, request.DownlinkMessageId);

await mediator.Send(
new SendUplinkRequest(
new ReplyToDownlinkRequest(
request.Recipient,
request.DialogueId,
request.DownlinkMessageId,
CpdlcUplinkResponseType.NoResponse, // TODO: Is this the correct response type?
"STANDBY"),
Expand All @@ -35,8 +36,9 @@ public async Task Handle(SendDeferredUplinkRequest request, CancellationToken ca
request.Recipient, request.DownlinkMessageId);

await mediator.Send(
new SendUplinkRequest(
new ReplyToDownlinkRequest(
request.Recipient,
request.DialogueId,
request.DownlinkMessageId,
CpdlcUplinkResponseType.NoResponse, // TODO: Is this the correct response type?
"REQUEST DEFERRED"),
Expand All @@ -59,8 +61,9 @@ public async Task Handle(SendUnableUplinkRequest request, CancellationToken canc
request.Recipient, request.DownlinkMessageId, request.Reason ?? "none");

await mediator.Send(
new SendUplinkRequest(
new ReplyToDownlinkRequest(
request.Recipient,
request.DialogueId,
request.DownlinkMessageId,
CpdlcUplinkResponseType.NoResponse, // TODO: Is this the correct response type?
content),
Expand Down
35 changes: 0 additions & 35 deletions source/CPDLCPlugin/Messages/SendUplinkRequest.cs

This file was deleted.

25 changes: 19 additions & 6 deletions source/CPDLCPlugin/Server/SignalRConnectionManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,18 +144,31 @@ Func<T1, T2, Task> WithCancellationToken<T1, T2>(Func<T1, T2, CancellationToken,
};
}

public async Task<UplinkMessageDto> SendUplink(
string recipient,
int? replyToDownlinkId,
public async Task BeginDialogue(string recipient,
CpdlcUplinkResponseType responseType,
string content,
CancellationToken cancellationToken)
{
var connection = GetConnectedOrThrow();
return await connection.InvokeAsync<UplinkMessageDto>(
"SendUplink",
await connection.InvokeAsync<UplinkMessageDto>(
"BeginDialogue",
recipient,
replyToDownlinkId,
responseType,
content,
cancellationToken: cancellationToken);
}

public async Task ReplyToDownlink(Guid dialogueId,
int downlinkMessageId,
CpdlcUplinkResponseType responseType,
string content,
CancellationToken cancellationToken)
{
var connection = GetConnectedOrThrow();
await connection.InvokeAsync<UplinkMessageDto>(
"ReplyToDownlink",
dialogueId,
downlinkMessageId,
responseType,
content,
cancellationToken: cancellationToken);
Expand Down
Loading
Loading