1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2025-02-02 14:46:28 -05:00
OpenDiablo2/OpenDiablo2.ServiceBus/Message Frames/Server/MFPlayerInfo.cs

53 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using OpenDiablo2.Common.Attributes;
using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Interfaces;
using OpenDiablo2.Common.Models;
namespace OpenDiablo2.ServiceBus.Message_Frames.Server
{
[MessageFrame(eMessageFrameType.PlayerInfo)]
public sealed class MFPlayerInfo : IMessageFrame
{
public IEnumerable<PlayerInfo> PlayerInfos { get; set; } = new List<PlayerInfo>();
public byte[] Data
{
get
{
var result = BitConverter.GetBytes(PlayerInfos.Count())
.Concat(PlayerInfos.SelectMany(x => x.GetBytes()))
.ToArray();
return result;
}
set
{
var count = BitConverter.ToInt32(value, 0);
var playerInfos = new List<PlayerInfo>();
var offset = 4;
for (var i = 0; i < count; i++)
{
var playerInfo = PlayerInfo.FromBytes(value, offset);
playerInfos.Add(playerInfo);
offset += playerInfo.SizeInBytes;
}
PlayerInfos = playerInfos;
}
}
public MFPlayerInfo() { }
public MFPlayerInfo(IEnumerable<PlayerInfo> playerInfo)
{
this.PlayerInfos = playerInfo;
}
public void Process(int clientHash, ISessionEventProvider sessionEventProvider)
=> sessionEventProvider.OnPlayerInfo(clientHash, PlayerInfos);
}
}