/// <summary> /// Handles the state status changes on the server and sends new status to all clients /// </summary> /// <param name="command"></param> /// <param name="networkvalue"></param> /// <returns></returns> protected object CheckStatusOnServer(Command command, object networkvalue) { var orders = new StateNetworkMessage <T>(); if (!IsActive) { IsActive = true; } orders.IsActive = IsActive; T newState = CurrentStateEnumValue; if (IsActive) { newState = CheckStateShouldChange(); } if (!newState.Equals(CurrentStateEnumValue)) { orders.IsTerminating = true; orders.CurrentState = newState; IsActive = false; } else { orders.IsTerminating = false; orders.CurrentState = CurrentStateEnumValue; } return(orders.ToBytes()); }
/// <summary> /// Applies the server computed state status on clients /// </summary> /// <param name="command"></param> /// <param name="networkvalue"></param> protected override void ApplyStatusOnClients(Command command, object networkvalue) { if (networkvalue == null) { return; } var orders = new StateNetworkMessage <T>((byte[])networkvalue); if (orders.IsActive) { IsActive = true; Activate(); } if (orders.IsTerminating) { Terminate(); IsActive = false; } if (!orders.CurrentState.Equals(((StateMachineAgent <T>)Agent).CurrentState)) { ((StateMachineAgent <T>)Agent).CurrentState = orders.CurrentState; } }