GlobalLiquidity

Untitled

Mar 7th, 2019
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.13 KB | None | 0 0
  1. //Trading Rig States (Parent State Machine)
  2. public class ConnectingToClient : State
  3. {
  4.     protected override void OnEntry(StateHandlerInfo<State> info)
  5.     {
  6.         Console.WriteLine("Entering Connecting To Client State");
  7.         Console.WriteLine("Connect to Client");
  8.  
  9.  
  10.         base.OnEntry(info);
  11.     }
  12.  
  13.     protected override void OnExit(StateHandlerInfo<State> info)
  14.     {
  15.         Console.WriteLine("Exiting Connecting to Client State");
  16.         base.OnExit(info);
  17.     }
  18. }
  19.  
  20. public class CachingAPIKeyState : State
  21. {
  22.     protected override void OnEntry(StateHandlerInfo<State> info)
  23.     {
  24.         Console.WriteLine("Entering Caching API Key State");
  25.         Console.WriteLine("Requesting API Key");
  26.        
  27.         base.OnEntry(info);
  28.     }
  29.  
  30.     protected override void OnExit(StateHandlerInfo<State> info)
  31.     {
  32.         Console.WriteLine("API Key Received");
  33.         Console.WriteLine("Exiting Caching API Key State");
  34.         base.OnExit(info);
  35.     }
  36. }
  37.  
  38. public class ConnectingToExchange : State
  39. {
  40.     protected override void OnEntry(StateHandlerInfo<State> info)
  41.     {
  42.         Console.WriteLine("Entering Connecting to Exchange State");
  43.         Console.WriteLine("Connecting to Exchange");
  44.         base.OnEntry(info);
  45.     }
  46.  
  47.     protected override void OnExit(StateHandlerInfo<State> info)
  48.     {
  49.         Console.WriteLine("Exiting Connecting to Exchange State");
  50.         base.OnExit(info);
  51.     }
  52. }
  53.  
  54. public class ConnectedToExchange : State
  55. {
  56.     protected override void OnEntry(StateHandlerInfo<State> info)
  57.     {
  58.         Console.WriteLine("Entering Connected to Exchange State");
  59.         Console.WriteLine("Connected to Exchange");
  60.         base.OnEntry(info);
  61.     }
  62.  
  63.     protected override void OnExit(StateHandlerInfo<State> info)
  64.     {
  65.         Console.WriteLine("Exiting Connected to Exchange State");
  66.         base.OnExit(info);
  67.     }
  68. }
  69.  
  70. public class SessionComplete : State
  71. {
  72.     protected override void OnEntry(StateHandlerInfo<State> info)
  73.     {
  74.         Console.WriteLine("Entering Session Complete State");
  75.  
  76.         base.OnEntry(info);
  77.     }
  78.  
  79.     protected override void OnExit(StateHandlerInfo<State> info)
  80.     {
  81.         Console.WriteLine("Exiting Session Complete State");
  82.         base.OnExit(info);
  83.     }
  84. }
  85.  
  86. //Child StateMachine States
  87. public class GettingInitialAccountInfoState : State
  88. {
  89.     protected override void OnEntry(StateHandlerInfo<State> info)
  90.     {
  91.         Console.WriteLine("Entering Getting Initial Account Info State");
  92.         Console.WriteLine("Requesting Account Info from Exchange");
  93.         base.OnEntry(info);
  94.     }
  95.  
  96.     protected override void OnExit(StateHandlerInfo<State> info)
  97.     {
  98.         Console.WriteLine("Received Account Info from Exchange");
  99.         Console.WriteLine("Exiting Getting Initial Account Info State");
  100.         base.OnExit(info);
  101.     }
  102. }
  103.  
  104. public class UpdatingClient : State
  105. {
  106.     protected override void OnEntry(StateHandlerInfo<State> info)
  107.     {
  108.         Console.WriteLine("Entering Updating Client State");
  109.         Console.WriteLine("Sending Account Info to Client");
  110.         base.OnEntry(info);
  111.     }
  112.  
  113.     protected override void OnExit(StateHandlerInfo<State> info)
  114.     {
  115.         Console.WriteLine("Exiting Updating Client State");
  116.         base.OnExit(info);
  117.     }
  118. }
  119.  
  120. public class PollingExchange : State
  121. {
  122.     protected override void OnEntry(StateHandlerInfo<State> info)
  123.     {
  124.         Console.WriteLine("Entering Polling Exchange State");
  125.         Console.WriteLine("Waiting 500 milliseconds");
  126.         Console.WriteLine("Requesting Account Info from Exchange");
  127.         base.OnEntry(info);
  128.     }
  129.  
  130.     protected override void OnExit(StateHandlerInfo<State> info)
  131.     {
  132.         Console.WriteLine("Received Account Info");
  133.         Console.WriteLine("Exiting Polling Exchange State");
  134.         base.OnExit(info);
  135.     }
  136. }
  137.  
  138. public class TradingRig
  139. {
  140.     StateMachine TradingRigStateMachine;
  141.     ChildStateMachine<State> ConnectedToExchangeStateMachine;
  142.  
  143.     public Event ConnectedToClient = new Event("Connected to Client");
  144.     public Event KeyCached = new Event("Key Cached");
  145.     public Event ExchangeConnected = new Event("Exchange Connected");
  146.     public Event Shutdown = new Event("Shutdown");
  147.  
  148.     public Event AccountInfoReceived = new Event("Account Info Received");
  149.     public Event ClientUpdated = new Event("ClientUpdated");
  150.     public Event PollingTimeout = new Event("Polling Timeout");
  151.  
  152.     public bool HasActiveOrder = false;
  153.    
  154.     void BuildConnectedToExchangeStateMachine(State parentState)
  155.     {
  156.         ConnectedToExchangeStateMachine = parentState.CreateChildStateMachine("Market Maker");
  157.         var gettingInitialAccountInfoState = ConnectedToExchangeStateMachine.CreateInitialState<GettingInitialAccountInfoState>("Getting Initial Account Info");
  158.         var updatingClientState = ConnectedToExchangeStateMachine.CreateState<UpdatingClient>("Updating Client");
  159.         var pollingExchangeState = ConnectedToExchangeStateMachine.CreateState<PollingExchange>("Polling Exchange");
  160.        
  161.         gettingInitialAccountInfoState.TransitionOn(AccountInfoReceived).To(updatingClientState);  
  162.         updatingClientState.TransitionOn(ClientUpdated).To(pollingExchangeState);
  163.         pollingExchangeState.TransitionOn(AccountInfoReceived).To(updatingClientState);
  164.     }
  165.  
  166.     public void BuildTradingRigStateMachine()
  167.     {  
  168.         TradingRigStateMachine = new StateMachine("Trading Rig");
  169.         var connectingToClientState = TradingRigStateMachine.CreateInitialState<ConnectingToClient>("Connecting to Client");
  170.         var cachingKeyState = TradingRigStateMachine.CreateState<CachingAPIKeyState>("Caching API Key");
  171.         var connectingToExchangeState = TradingRigStateMachine.CreateState<ConnectingToExchange>("Connecting to Exchange");
  172.  
  173.         var connectedToExchangeState = TradingRigStateMachine.CreateState<ConnectedToExchange>("Connected to Exchange");
  174.         var sessionCompleteState = TradingRigStateMachine.CreateState<SessionComplete>("Session Complete");
  175.  
  176.         BuildConnectedToExchangeStateMachine(connectedToExchangeState);
  177.        
  178.         connectingToClientState.TransitionOn(ConnectedToClient).To(cachingKeyState);
  179.         cachingKeyState.TransitionOn(KeyCached).To(connectingToExchangeState);
  180.         connectingToExchangeState.TransitionOn(ExchangeConnected).To(connectedToExchangeState);
  181.        
  182.         connectedToExchangeState.TransitionOn(Shutdown).To(sessionCompleteState);
  183.     }
  184.  
  185. }
  186.  
  187. void Main()
  188. {
  189.     TradingRig Rig = new TradingRig();
  190.     Rig.BuildTradingRigStateMachine();
  191.     Rig.ConnectedToClient.Fire();
  192.     Rig.KeyCached.Fire();
  193.     Rig.ExchangeConnected.Fire();
  194.     Rig.AccountInfoReceived.Fire();
  195.     Rig.ClientUpdated.Fire();
  196.     Rig.AccountInfoReceived.Fire();
  197. }
Advertisement
Add Comment
Please, Sign In to add comment