diff --git a/src/P3D.Legacy.Common/Packets/Battle/BattleClientDataFromClientPacket.cs b/src/P3D.Legacy.Common/Packets/Battle/BattleClientDataFromClientPacket.cs new file mode 100644 index 00000000..a88dfc80 --- /dev/null +++ b/src/P3D.Legacy.Common/Packets/Battle/BattleClientDataFromClientPacket.cs @@ -0,0 +1,16 @@ +using P3D.Legacy.Common.Data.P3DDatas; + +namespace P3D.Legacy.Common.Packets.Battle +{ + public sealed record BattleClientDataFromClientPacket() : P3DPacket(P3DPacketType.BattleClientData) + { + public Origin DestinationPlayerOrigin { get => DataItemStorage.GetOrigin(0); init => DataItemStorage.Set(0, value); } + public BattleClientData BattleData { get => new(DataItemStorage.Get(1)); init => DataItemStorage.Set(1, value.ToP3DString()); } + + public void Deconstruct(out Origin destinationPlayerOrigin, out BattleClientData battleData) + { + destinationPlayerOrigin = DestinationPlayerOrigin; + battleData = BattleData; + } + } +} \ No newline at end of file diff --git a/src/P3D.Legacy.Common/Packets/Battle/BattleClientDataPacket.cs b/src/P3D.Legacy.Common/Packets/Battle/BattleClientDataToClientPacket.cs similarity index 85% rename from src/P3D.Legacy.Common/Packets/Battle/BattleClientDataPacket.cs rename to src/P3D.Legacy.Common/Packets/Battle/BattleClientDataToClientPacket.cs index f30877ca..7f0236fb 100644 --- a/src/P3D.Legacy.Common/Packets/Battle/BattleClientDataPacket.cs +++ b/src/P3D.Legacy.Common/Packets/Battle/BattleClientDataToClientPacket.cs @@ -2,7 +2,7 @@ namespace P3D.Legacy.Common.Packets.Battle { - public sealed record BattleClientDataPacket() : P3DPacket(P3DPacketType.BattleClientData) + public sealed record BattleClientDataToClientPacket() : P3DPacket(P3DPacketType.BattleClientData) { public Origin DestinationPlayerOrigin { get => DataItemStorage.GetOrigin(0); init => DataItemStorage.Set(0, value); } public BattleClientData BattleData { get => new(DataItemStorage.Get(1)); init => DataItemStorage.Set(1, value.ToP3DString()); } diff --git a/src/P3D.Legacy.Common/Packets/P3DPacketFactory.cs b/src/P3D.Legacy.Common/Packets/P3DPacketFactory.cs index 4cb6f30d..3e11fa0a 100644 --- a/src/P3D.Legacy.Common/Packets/P3DPacketFactory.cs +++ b/src/P3D.Legacy.Common/Packets/P3DPacketFactory.cs @@ -39,7 +39,7 @@ public class P3DPacketClientFactory : IP3DPacketFactory P3DPacketType.BattleQuit => new BattleQuitPacket(), P3DPacketType.BattleOffer => new BattleOfferToClientPacket(), P3DPacketType.BattleStart => new BattleStartPacket(), - P3DPacketType.BattleClientData => new BattleClientDataPacket(), + P3DPacketType.BattleClientData => new BattleClientDataToClientPacket(), P3DPacketType.BattleHostData => new BattleHostDataToClientPacket(), P3DPacketType.BattleEndRoundData => new BattleEndRoundDataToClientPacket(), P3DPacketType.ServerInfoData => new ServerInfoDataPacket(), @@ -75,7 +75,7 @@ public class P3DPacketServerFactory : IP3DPacketFactory P3DPacketType.BattleQuit => new BattleQuitPacket(), P3DPacketType.BattleOffer => new BattleOfferFromClientPacket(), P3DPacketType.BattleStart => new BattleStartPacket(), - P3DPacketType.BattleClientData => new BattleClientDataPacket(), + P3DPacketType.BattleClientData => new BattleClientDataFromClientPacket(), P3DPacketType.BattleHostData => new BattleHostDataFromClientPacket(), P3DPacketType.BattleEndRoundData => new BattleEndRoundDataFromClientPacket(), P3DPacketType.ServerInfoData => new ServerInfoDataPacket(), diff --git a/src/P3D.Legacy.Server.Client.P3D/P3DConnectionContextHandler.Notifications.cs b/src/P3D.Legacy.Server.Client.P3D/P3DConnectionContextHandler.Notifications.cs index 757ea915..f28c9858 100644 --- a/src/P3D.Legacy.Server.Client.P3D/P3DConnectionContextHandler.Notifications.cs +++ b/src/P3D.Legacy.Server.Client.P3D/P3DConnectionContextHandler.Notifications.cs @@ -143,41 +143,33 @@ public async Task HandleAsync(IReceiveContext conte var (player, p3dPacket) = context.Message; if (Origin == player.Origin) return; - if (Id.GameJoltIdOrNone.IsNone != player.Id.GameJoltIdOrNone.IsNone) - { - switch (p3dPacket) - { - case BattleRequestPacket: - await _eventDispatcher.DispatchAsync(new MessageToPlayerEvent(IPlayer.Server, player, "GameJolt and Non-GameJolt interaction is not supported!"), ct); - await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(player, new BattleQuitPacket { Origin = Origin, DestinationPlayerOrigin = player.Origin }), ct); - break; - case BattleQuitPacket: - await SendPacketAsync(p3dPacket, ct); - break; - } - return; - } - if (p3dPacket is BattleOfferFromClientPacket battleOfferFromClientPacket) - { - if (battleOfferFromClientPacket.DestinationPlayerOrigin != Origin) return; - await SendPacketAsync(new BattleOfferToClientPacket { Origin = battleOfferFromClientPacket.Origin, BattleData = battleOfferFromClientPacket.BattleData }, ct); - return; - } - if (p3dPacket is BattleHostDataFromClientPacket battleHostDataFromClientPacket) - { - if (battleHostDataFromClientPacket.DestinationPlayerOrigin != Origin) return; - await SendPacketAsync(new BattleHostDataToClientPacket { Origin = battleHostDataFromClientPacket.Origin, BattleData = battleHostDataFromClientPacket.BattleData }, ct); - return; - } - if (p3dPacket is BattleEndRoundDataFromClientPacket battleEndRoundDataFromClientPacket) + switch (p3dPacket) { - if (battleEndRoundDataFromClientPacket.DestinationPlayerOrigin != Origin) return; - await SendPacketAsync(new BattleEndRoundDataToClientPacket { Origin = battleEndRoundDataFromClientPacket.Origin, BattleData = battleEndRoundDataFromClientPacket.BattleData }, ct); - return; + case BattleRequestPacket when Id.GameJoltIdOrNone.IsNone != player.Id.GameJoltIdOrNone.IsNone: + await _eventDispatcher.DispatchAsync(new MessageToPlayerEvent(IPlayer.Server, player, "GameJolt and Non-GameJolt interaction is not supported!"), ct); + await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(player, new BattleQuitPacket { Origin = Origin, DestinationPlayerOrigin = player.Origin }), ct); + return; + case BattleOfferFromClientPacket packet when packet.DestinationPlayerOrigin != Origin: return; + case BattleOfferFromClientPacket packet: + await SendPacketAsync(new BattleOfferToClientPacket { Origin = packet.Origin, BattleData = packet.BattleData }, ct); + return; + case BattleClientDataFromClientPacket packet when packet.DestinationPlayerOrigin != Origin: return; + case BattleClientDataFromClientPacket packet: + await SendPacketAsync(new BattleClientDataToClientPacket { Origin = packet.Origin, BattleData = packet.BattleData }, ct); + return; + case BattleHostDataFromClientPacket packet when packet.DestinationPlayerOrigin != Origin: return; + case BattleHostDataFromClientPacket packet: + await SendPacketAsync(new BattleHostDataToClientPacket { Origin = packet.Origin, BattleData = packet.BattleData }, ct); + return; + case BattleEndRoundDataFromClientPacket packet when packet.DestinationPlayerOrigin != Origin: return; + case BattleEndRoundDataFromClientPacket packet: + await SendPacketAsync(new BattleEndRoundDataToClientPacket { Origin = packet.Origin, BattleData = packet.BattleData }, ct); + return; + default: + await SendPacketAsync(p3dPacket, ct); + return; } - - await SendPacketAsync(p3dPacket, ct); } public async Task HandleAsync(IReceiveContext context, CancellationToken ct) @@ -241,18 +233,17 @@ public async Task HandleAsync(IReceiveContext context { await _eventDispatcher.DispatchAsync(new MessageToPlayerEvent(IPlayer.Server, initiator, "GameJolt and Non-GameJolt interaction is not supported!"), ct); await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(initiator, new TradeQuitPacket { Origin = target, DestinationPlayerOrigin = target }), ct); + return; + } + + if (await _commandDispatcher.DispatchAsync(new TradeOfferCommand(initiator, this), ct) is { IsSuccess: true }) + { + await SendPacketAsync(new TradeRequestPacket { Origin = initiator.Origin, DestinationPlayerOrigin = target }, ct); } else { - if (await _commandDispatcher.DispatchAsync(new TradeOfferCommand(initiator, this), ct) is { IsSuccess: true }) - { - await SendPacketAsync(new TradeRequestPacket { Origin = initiator.Origin, DestinationPlayerOrigin = target }, ct); - } - else - { - await _commandDispatcher.DispatchAsync(new TradeAbortCommand(initiator, this), ct); - await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(initiator, new TradeQuitPacket { Origin = target, DestinationPlayerOrigin = target }), ct); - } + await _commandDispatcher.DispatchAsync(new TradeAbortCommand(initiator, this), ct); + await _eventDispatcher.DispatchAsync(new PlayerSentRawP3DPacketEvent(initiator, new TradeQuitPacket { Origin = target, DestinationPlayerOrigin = target }), ct); } } diff --git a/src/P3D.Legacy.Server.Client.P3D/P3DConnectionContextHandler.Packets.cs b/src/P3D.Legacy.Server.Client.P3D/P3DConnectionContextHandler.Packets.cs index 9f69311d..4eda51fb 100644 --- a/src/P3D.Legacy.Server.Client.P3D/P3DConnectionContextHandler.Packets.cs +++ b/src/P3D.Legacy.Server.Client.P3D/P3DConnectionContextHandler.Packets.cs @@ -45,7 +45,7 @@ private async Task HandlePacketAsync(P3DPacket? packet, CancellationToken ct) switch (packet) { - case BattleClientDataPacket battleClientDataPacket: + case BattleClientDataFromClientPacket battleClientDataPacket: await HandleBattleClientDataAsync(battleClientDataPacket, ct); break; case BattleHostDataFromClientPacket battleHostDataPacket: @@ -432,7 +432,7 @@ private async Task HandleTradeStartAsync(TradeStartPacket packet, CancellationTo await _eventDispatcher.DispatchAsync(new PlayerTradeConfirmedEvent(this, packet.DestinationPlayerOrigin), ct); } - private async Task HandleBattleClientDataAsync(BattleClientDataPacket packet, CancellationToken ct) + private async Task HandleBattleClientDataAsync(BattleClientDataFromClientPacket packet, CancellationToken ct) { if (State != PlayerState.Initialized) return;