public void DistributeCommand(IControllable controllable, ControlAction action) { if (!Loader.Instance.Network.IsClusterSimulation || Loader.Instance.Network.IsClient) { return; } if (!Controllers.ContainsKey(controllable)) { return; } var message = MessagesPool.Instance.GetMessage(); message.AddressKey = Key; message.Content.PushString(action.Value); message.Content.PushString(action.Action); idsRegister.PushId(message, Controllers[controllable]); message.Type = DistributedMessageType.ReliableOrdered; BroadcastMessage(message); }
public void ReceiveMessage(IPeerManager sender, DistributedMessage distributedMessage) { if (!Loader.Instance.Network.IsClusterSimulation || !Loader.Instance.Network.IsClient) { return; } //Currently single control actions are supported var controllableId = idsRegister.PopId(distributedMessage.Content); var controller = idsRegister.ResolveObject(controllableId) as ControllableController; if (controller == null) { return; } var action = new ControlAction { Action = distributedMessage.Content.PopString(), Value = distributedMessage.Content.PopString() }; controller.Controllable.Control(new List <ControlAction> { action }); }