More comments and a fix.
This commit is contained in:
@@ -19,34 +19,49 @@ namespace Content.Client.Eui
|
|||||||
IoCManager.InjectDependencies(this);
|
IoCManager.InjectDependencies(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize(EuiManager mgr, uint id)
|
internal void Initialize(EuiManager mgr, uint id)
|
||||||
{
|
{
|
||||||
Manager = mgr;
|
Manager = mgr;
|
||||||
Id = id;
|
Id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when the EUI is opened by the server.
|
||||||
|
/// </summary>
|
||||||
public virtual void Opened()
|
public virtual void Opened()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when the EUI is closed by the server.
|
||||||
|
/// </summary>
|
||||||
public virtual void Closed()
|
public virtual void Closed()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when a new state comes in from the server.
|
||||||
|
/// </summary>
|
||||||
public virtual void HandleState(EuiStateBase state)
|
public virtual void HandleState(EuiStateBase state)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when a message comes in from the server.
|
||||||
|
/// </summary>
|
||||||
public virtual void HandleMessage(EuiMessageBase msg)
|
public virtual void HandleMessage(EuiMessageBase msg)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Send a message to the server-side implementation.
|
||||||
|
/// </summary>
|
||||||
protected void SendMessage(EuiMessageBase msg)
|
protected void SendMessage(EuiMessageBase msg)
|
||||||
{
|
{
|
||||||
var netMsg = _netManager.CreateNetMessage<MsgEuiMessage>();
|
var netMsg = _netManager.CreateNetMessage<MsgEuiMessage>();
|
||||||
netMsg.Id = Id;
|
netMsg.Id = Id;
|
||||||
netMsg.Message = msg;
|
netMsg.Message = msg;
|
||||||
|
|
||||||
_netManager.ClientSendMessage(netMsg);
|
_netManager.ClientSendMessage(netMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,46 +9,56 @@ using Robust.Shared.IoC;
|
|||||||
|
|
||||||
namespace Content.Server.Eui
|
namespace Content.Server.Eui
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Base class to implement server-side for an EUI.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// An EUI is a system for making a relatively-easy connection between client and server
|
||||||
|
/// for the purposes of UIs.
|
||||||
|
/// </remarks>
|
||||||
|
/// <remarks>
|
||||||
|
/// An equivalently named class much exist server side for an EUI to work.
|
||||||
|
/// It will be instantiated, opened and closed automatically.
|
||||||
|
/// </remarks>
|
||||||
public abstract class BaseEui
|
public abstract class BaseEui
|
||||||
{
|
{
|
||||||
private bool _isStateDirty = false;
|
private bool _isStateDirty = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The player that this EUI is open for.
|
||||||
|
/// </summary>
|
||||||
|
public IPlayerSession Player { get; private set; } = default!;
|
||||||
public bool IsShutDown { get; private set; }
|
public bool IsShutDown { get; private set; }
|
||||||
public EuiManager Manager { get; private set; } = default!;
|
public EuiManager Manager { get; private set; } = default!;
|
||||||
public IPlayerSession Player { get; private set; } = default!;
|
|
||||||
public uint Id { get; private set; }
|
public uint Id { get; private set; }
|
||||||
|
|
||||||
public void Initialize(EuiManager manager, IPlayerSession player, uint id)
|
/// <summary>
|
||||||
{
|
/// Called when the UI has been opened. Do initializing logic here.
|
||||||
Manager = manager;
|
/// </summary>
|
||||||
Player = player;
|
|
||||||
Id = id;
|
|
||||||
Opened();
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void Opened()
|
public virtual void Opened()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when the UI has been closed.
|
||||||
|
/// </summary>
|
||||||
public virtual void Closed()
|
public virtual void Closed()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when a message comes in from the client.
|
||||||
|
/// </summary>
|
||||||
public virtual void HandleMessage(EuiMessageBase msg)
|
public virtual void HandleMessage(EuiMessageBase msg)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Shutdown()
|
|
||||||
{
|
|
||||||
Closed();
|
|
||||||
IsShutDown = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Mark the current UI state as dirty and queue for an update.
|
/// Mark the current UI state as dirty and queue for an update.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <seealso cref="GetNewState"/>
|
||||||
public void StateDirty()
|
public void StateDirty()
|
||||||
{
|
{
|
||||||
if (_isStateDirty)
|
if (_isStateDirty)
|
||||||
@@ -60,17 +70,43 @@ namespace Content.Server.Eui
|
|||||||
Manager.QueueStateUpdate(this);
|
Manager.QueueStateUpdate(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called some time after <see cref="StateDirty"/> has been called
|
||||||
|
/// to get a new UI state that can be sent to the client.
|
||||||
|
/// </summary>
|
||||||
public virtual EuiStateBase GetNewState()
|
public virtual EuiStateBase GetNewState()
|
||||||
{
|
{
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Send a message to the client-side EUI.
|
||||||
|
/// </summary>
|
||||||
|
public void SendMessage(EuiMessageBase message)
|
||||||
|
{
|
||||||
|
var netMgr = IoCManager.Resolve<IServerNetManager>();
|
||||||
|
var msg = netMgr.CreateNetMessage<MsgEuiMessage>();
|
||||||
|
msg.Id = Id;
|
||||||
|
msg.Message = message;
|
||||||
|
|
||||||
|
netMgr.ServerSendMessage(msg, Player.ConnectedClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Close the EUI, breaking the connection between client and server.
|
||||||
|
/// </summary>
|
||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
Manager.CloseEui(this);
|
Manager.CloseEui(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoStateUpdate()
|
internal void Shutdown()
|
||||||
|
{
|
||||||
|
Closed();
|
||||||
|
IsShutDown = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void DoStateUpdate()
|
||||||
{
|
{
|
||||||
_isStateDirty = false;
|
_isStateDirty = false;
|
||||||
|
|
||||||
@@ -84,14 +120,12 @@ namespace Content.Server.Eui
|
|||||||
netMgr.ServerSendMessage(msg, Player.ConnectedClient);
|
netMgr.ServerSendMessage(msg, Player.ConnectedClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendMessage(EuiMessageBase message)
|
internal void Initialize(EuiManager manager, IPlayerSession player, uint id)
|
||||||
{
|
{
|
||||||
var netMgr = IoCManager.Resolve<IServerNetManager>();
|
Manager = manager;
|
||||||
var msg = netMgr.CreateNetMessage<MsgEuiMessage>();
|
Player = player;
|
||||||
msg.Id = Id;
|
Id = id;
|
||||||
msg.Message = message;
|
Opened();
|
||||||
|
|
||||||
netMgr.ServerSendMessage(msg, Player.ConnectedClient);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ namespace Content.Server.Eui
|
|||||||
|
|
||||||
public void CloseEui(BaseEui eui)
|
public void CloseEui(BaseEui eui)
|
||||||
{
|
{
|
||||||
eui.Closed();
|
eui.Shutdown();
|
||||||
_playerData[eui.Player].OpenUIs.Remove(eui.Id);
|
_playerData[eui.Player].OpenUIs.Remove(eui.Id);
|
||||||
|
|
||||||
var msg = _net.CreateNetMessage<MsgEuiCtl>();
|
var msg = _net.CreateNetMessage<MsgEuiCtl>();
|
||||||
|
|||||||
Reference in New Issue
Block a user