public override void CallbackAlert(MessageAlert messageAlert, RateControllerState state) { ulong[] Args = messageAlert.Args; //switch (messageAlert.AlertType) //{ // case OktoAlertType.AlertDemoGui: // switch ((AlertDemoGui)Args[0]) // { // case AlertDemoGui.ChangeLimitTokenSec: // throw new NotImplementedException(); // break; // case AlertDemoGui.ChangePolicy: // throw new NotImplementedException(); // break; // case AlertDemoGui.SetCapacity: // throw new NotImplementedException(); // break; // case AlertDemoGui.SetIsAlgorithmEnabled: // throw new NotImplementedException(); // break; // case AlertDemoGui.ChangePriority: // throw new NotImplementedException(); // break; // case AlertDemoGui.SetControlInterval: // throw new NotImplementedException(); // break; // case AlertDemoGui.SetVecIdx: // throw new NotImplementedException(); // break; // default: // throw new ArgumentOutOfRangeException("AlertDemoGui unhandled " + Args[0].ToString()); // } // break; // default: // throw new NotImplementedException(); // break; //} string logmsg = string.Format("CallbackAlert {0} received alert type {1} args:", DateTime.Now, messageAlert.AlertType.ToString()); for (int i = 0; i < Args.Length; i++) { logmsg += Args[i].ToString() + ","; } rateController.Log(logmsg); }
public abstract void CallbackAlert(MessageAlert messageAlert, RateControllerState state);
public override void CallbackAlert(MessageAlert messageAlert, RateControllerState state) { ulong[] Args = messageAlert.Args; //switch (messageAlert.AlertType) //{ // case OktoAlertType.AlertDemoGui: // switch ((AlertDemoGui)Args[0]) // { // case AlertDemoGui.ChangeLimitTokenSec: // throw new NotImplementedException(); // break; // case AlertDemoGui.ChangePolicy: // throw new NotImplementedException(); // break; // case AlertDemoGui.SetCapacity: // throw new NotImplementedException(); // break; // case AlertDemoGui.SetIsAlgorithmEnabled: // throw new NotImplementedException(); // break; // case AlertDemoGui.ChangePriority: // throw new NotImplementedException(); // break; // case AlertDemoGui.SetControlInterval: // throw new NotImplementedException(); // break; // case AlertDemoGui.SetVecIdx: // throw new NotImplementedException(); // break; // default: // throw new ArgumentOutOfRangeException("AlertDemoGui unhandled " + Args[0].ToString()); // } // break; // default: // throw new NotImplementedException(); // break; //} string logmsg = string.Format("CallbackAlert {0} received alert type {1} args:", DateTime.Now, messageAlert.AlertType.ToString()); for (int i = 0; i < Args.Length; i++) logmsg += Args[i].ToString() + ","; rateController.Log(logmsg); }
private void ValidateState(RateControllerState expectState, string procedure) { lock (LockState) { if (state != expectState) { string message = "Rate Controller in invalid state for call to "; message = String.Format("{0} {1} : current {2} expected {3}", message, procedure, state, expectState); throw new ApplicationException(message); } } }
/// <summary> /// Transitions state machine. Called from sequential work queue in response to timeouts and alerts. /// </summary> /// <param name="nextState"></param> public void StateTransition(RateControllerState nextState) { RcWorkItem context; lock (LockState) { Debug.WriteLine("StateTransition {0}=>{1}", state, nextState); if (state.Equals(RateControllerState.Fin) || nextState.Equals(RateControllerState.Fin) || Shutdown) { state = RateControllerState.Fin; return; } // // Transition to new state and take the actions associated with that state. // switch (state) { case RateControllerState.Init: Debug.Assert(nextState == RateControllerState.SettleTimeout); state = nextState; if (netRateController != null) netRateController.StateTransitionNoOp(NetRateControllerState.SettleTimeout); context = new RcWorkItem(RcWorkItemType.SettleTimeout, RateControllerState.SettleTimeout, settleMillisecs, null); Console.WriteLine("RateController start init timer {0} millisecs", RcWorkItemType.SettleTimeout); StartTimer(settleMillisecs, context); break; case RateControllerState.SettleTimeout: Debug.Assert(nextState == RateControllerState.SettleCallback); state = nextState; if (netRateController != null) netRateController.StateTransitionNoOp(NetRateControllerState.SettleCallback); iPolicyModule.CallbackSettleTimeout(); break; case RateControllerState.SettleCallback: Debug.Assert(nextState == RateControllerState.SampleTimeout); state = nextState; if (netRateController != null) netRateController.StateTransitionNoOp(NetRateControllerState.SampleTimeout); context = new RcWorkItem(RcWorkItemType.SampleTimeout, RateControllerState.SampleTimeout, sampleMillisecs, null); StartTimer(sampleMillisecs, context); break; case RateControllerState.SampleTimeout: Debug.Assert(nextState == RateControllerState.UpdateCallback); state = nextState; if (netRateController != null) netRateController.StateTransitionNoOp(NetRateControllerState.UpdateCallback); iPolicyModule.CallbackControlInterval(); break; case RateControllerState.UpdateCallback: Debug.Assert(nextState == RateControllerState.SettleTimeout); state = nextState; if (netRateController != null) netRateController.StateTransitionNoOp(NetRateControllerState.SettleTimeout); context = new RcWorkItem(RcWorkItemType.SettleTimeout, RateControllerState.SettleTimeout, settleMillisecs, null); StartTimer(settleMillisecs, context); break; } } }