Skip to content

Commit

Permalink
feat: Implement speaking payload
Browse files Browse the repository at this point in the history
  • Loading branch information
angelobreuer committed Apr 20, 2024
1 parent c6f1e70 commit c2c2a58
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ internal sealed class PayloadJsonConverter : JsonConverter<IVoicePayload>
2 => JsonSerializer.Deserialize<ReadyPayload>(ref reader, options),
3 => new HeartbeatPayload { SequenceNumber = reader.GetUInt64(), },
4 => JsonSerializer.Deserialize<SessionDescriptionPayload>(ref reader, options),
5 => JsonSerializer.Deserialize<SpeakingPayload>(ref reader, options),
6 => new HeartbeatAckPayload { SequenceNumber = reader.GetUInt64(), },
8 => JsonSerializer.Deserialize<HelloPayload>(ref reader, options),
_ => throw new JsonException($"Unknown operation code: {op}.")
Expand All @@ -80,6 +81,7 @@ public override void Write(Utf8JsonWriter writer, IVoicePayload value, JsonSeria
ReadyPayload _ => 2,
HeartbeatPayload _ => 3,
SessionDescriptionPayload _ => 4,
SpeakingPayload _ => 5,
HeartbeatAckPayload _ => 6,
HelloPayload _ => 8,
_ => throw new JsonException("Unknown payload type.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
[JsonSerializable(typeof(SelectProtocolPayload))]
[JsonSerializable(typeof(SessionDescriptionPayload))]
[JsonSerializable(typeof(ImmutableArray<int>))]
[JsonSerializable(typeof(SpeakingPayload))]
internal sealed partial class PayloadJsonSerializerContext : JsonSerializerContext
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace Lavalink4NET.Experiments.Receive.Connections.Payloads;

[Flags]
internal enum SpeakingFlags : byte
{
None = 0,
Microphone = 1 << 0,
Soundshare = 1 << 1,
Priority = 1 << 2
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace Lavalink4NET.Experiments.Receive.Connections.Payloads;

using System.Text.Json.Serialization;

internal sealed record class SpeakingPayload : IVoicePayload
{
[JsonRequired]
[JsonPropertyName("speaking")]
public required SpeakingFlags Flags { get; set; }

[JsonRequired]
[JsonPropertyName("delay")]
public required int Delay { get; set; }

[JsonRequired]
[JsonPropertyName("ssrc")]
public required int Ssrc { get; set; }
}

0 comments on commit c2c2a58

Please sign in to comment.