-
Notifications
You must be signed in to change notification settings - Fork 16
/
TradeAgreeHandler.cs
41 lines (34 loc) · 1.29 KB
/
TradeAgreeHandler.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using AutomaticTypeMapper;
using EOLib.Domain.Login;
using EOLib.Domain.Trade;
using EOLib.Net;
using EOLib.Net.Handlers;
using Optional;
namespace EOLib.PacketHandlers.Trade
{
/// <summary>
/// Other party agrees to a trade
/// </summary>
[AutoMappedType]
public class TradeAgreeHandler : InGameOnlyPacketHandler
{
private readonly ITradeRepository _tradeRepository;
public override PacketFamily Family => PacketFamily.Trade;
public override PacketAction Action => PacketAction.Agree;
public TradeAgreeHandler(IPlayerInfoProvider playerInfoProvider,
ITradeRepository tradeRepository)
: base(playerInfoProvider)
{
_tradeRepository = tradeRepository;
}
public override bool HandlePacket(IPacket packet)
{
var mainPlayerId = packet.ReadShort();
var otherPlayerAgrees = packet.ReadChar() != 0;
_tradeRepository.SomeWhen(x => x.PlayerOneOffer.PlayerID == mainPlayerId)
.Map(x => x.PlayerOneOffer = x.PlayerOneOffer.WithAgrees(otherPlayerAgrees))
.Or(() => _tradeRepository.PlayerTwoOffer = _tradeRepository.PlayerTwoOffer.WithAgrees(otherPlayerAgrees));
return true;
}
}
}