using System; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; using Robust.Shared.Network.Messages; namespace Robust.Client.GameObjects { public class ClientEntityNetworkManager : IEntityNetworkManager { #pragma warning disable 649 [Dependency] private readonly IClientNetManager _network; [Dependency] private readonly IEntitySystemManager _entitySystemManager; [Dependency] private readonly IEntityManager _entityManager; #pragma warning restore 649 /// public void SetupNetworking() { _network.RegisterNetMessage(MsgEntity.NAME, HandleEntityNetworkMessage); } /// /// Sends a message to the relevant system(s) server side. /// public void SendSystemNetworkMessage(EntitySystemMessage message) { var msg = _network.CreateNetMessage(); msg.Type = EntityMessageType.SystemMessage; msg.SystemMessage = message; _network.ClientSendMessage(msg); } public void SendSystemNetworkMessage(EntitySystemMessage message, INetChannel channel) { throw new NotSupportedException(); } /// public void SendComponentNetworkMessage(INetChannel channel, IEntity entity, IComponent component, ComponentMessage message) { if (!component.NetID.HasValue) throw new ArgumentException($"Component {component.Name} does not have a NetID.", nameof(component)); var msg = _network.CreateNetMessage(); msg.Type = EntityMessageType.ComponentMessage; msg.EntityUid = entity.Uid; msg.NetId = component.NetID.Value; msg.ComponentMessage = message; _network.ClientSendMessage(msg); } /// public void SendEntityNetworkMessage(IEntity entity, EntityEventArgs message) { var msg = _network.CreateNetMessage(); msg.Type = EntityMessageType.EntityMessage; msg.EntityUid = entity.Uid; msg.EntityMessage = message; _network.ClientSendMessage(msg); } /// /// Converts a raw NetIncomingMessage to an IncomingEntityMessage object /// /// raw network message /// An IncomingEntityMessage object private void HandleEntityNetworkMessage(MsgEntity message) { switch (message.Type) { case EntityMessageType.ComponentMessage: _entityManager.HandleEntityNetworkMessage(message); return; case EntityMessageType.EntityMessage: return; case EntityMessageType.SystemMessage: _entitySystemManager.HandleSystemMessage(message); return; } } } }