Ready Indicator in the lobby (#1771)
* Ready Indicator in the lobby * Use SessionID instead of Name * Don't show ready state when game is already running * Make Ready List not selectable * -Remove disconnected sessions from Ready -Fix showing ReadyStatus when staying in lobby
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Lidgren.Network;
|
||||
using Robust.Shared.Interfaces.Network;
|
||||
using Robust.Shared.Interfaces.Serialization;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Network;
|
||||
|
||||
namespace Content.Shared
|
||||
@@ -152,6 +155,57 @@ namespace Content.Shared
|
||||
}
|
||||
}
|
||||
|
||||
protected class MsgTickerLobbyReady : NetMessage
|
||||
{
|
||||
#region REQUIRED
|
||||
|
||||
public const MsgGroups GROUP = MsgGroups.Command;
|
||||
public const string NAME = nameof(MsgTickerLobbyReady);
|
||||
public MsgTickerLobbyReady(INetChannel channel) : base(NAME, GROUP) { }
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// The Players Ready (SessionID:ready)
|
||||
/// </summary>
|
||||
public Dictionary<NetSessionId, bool> PlayerReady { get; set; }
|
||||
|
||||
public override void ReadFromBuffer(NetIncomingMessage buffer)
|
||||
{
|
||||
PlayerReady = new Dictionary<NetSessionId, bool>();
|
||||
var length = buffer.ReadInt32();
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
var serializer = IoCManager.Resolve<IRobustSerializer>();
|
||||
var byteLength = buffer.ReadVariableInt32();
|
||||
NetSessionId sessionID;
|
||||
using (var stream = buffer.ReadAsStream(byteLength))
|
||||
{
|
||||
serializer.DeserializeDirect(stream, out sessionID);
|
||||
}
|
||||
var ready = buffer.ReadBoolean();
|
||||
PlayerReady.Add(sessionID, ready);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteToBuffer(NetOutgoingMessage buffer)
|
||||
{
|
||||
var serializer = IoCManager.Resolve<IRobustSerializer>();
|
||||
buffer.Write(PlayerReady.Count);
|
||||
foreach (var p in PlayerReady)
|
||||
{
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
serializer.SerializeDirect(stream, p.Key);
|
||||
buffer.WriteVariableInt32((int) stream.Length);
|
||||
stream.TryGetBuffer(out var segment);
|
||||
buffer.Write(segment);
|
||||
}
|
||||
buffer.Write(p.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public struct RoundEndPlayerInfo
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user