Example #1
0
File: State.cs Project: rc183/igf
        /// <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());
        }
Example #2
0
File: State.cs Project: rc183/igf
        /// <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;
            }
        }