private void ProcessCallbackMessage(IMessage message) { if (message == null) { throw new ArgumentNullException("message"); } EventNames eventName; var parsed = Enum.TryParse(message.Command, true, out eventName); if (parsed) { // TODO use as instead of assert+is+cast switch (eventName) { case EventNames.OnAccountBalance: break; case EventNames.OnAccountPosition: break; case EventNames.OnAllTrade: Trace.Assert(message is Message <AllTrade>); var allTrade = ((Message <AllTrade>)message).Data; allTrade.LuaTimeStamp = message.CreatedTime; Events.OnAllTradeCall(allTrade); break; case EventNames.OnCleanUp: Trace.Assert(message is Message <string>); Events.OnCleanUpCall(); break; case EventNames.OnClose: Trace.Assert(message is Message <string>); Events.OnCloseCall(); break; case EventNames.OnConnected: Trace.Assert(message is Message <string>); Events.OnConnectedCall(); break; case EventNames.OnDepoLimit: break; case EventNames.OnDepoLimitDelete: break; case EventNames.OnDisconnected: Trace.Assert(message is Message <string>); Events.OnDisconnectedCall(); break; case EventNames.OnFirm: break; case EventNames.OnFuturesClientHolding: Trace.Assert(message is Message <FuturesClientHolding>); var futPos = ((Message <FuturesClientHolding>)message).Data; Events.OnFuturesClientHoldingCall(futPos); break; case EventNames.OnFuturesLimitChange: break; case EventNames.OnFuturesLimitDelete: break; case EventNames.OnInit: // Этот callback никогда не будет вызван так как на момент получения вызова OnInit в lua скрипте // соединение с библиотекой QuikSharp не будет еще установлено. То есть этот callback не имеет смысла. break; case EventNames.OnMoneyLimit: break; case EventNames.OnMoneyLimitDelete: break; case EventNames.OnNegDeal: break; case EventNames.OnNegTrade: break; case EventNames.OnOrder: Trace.Assert(message is Message <Order>); var ord = ((Message <Order>)message).Data; ord.LuaTimeStamp = message.CreatedTime; Events.OnOrderCall(ord); break; case EventNames.OnParam: Trace.Assert(message is Message <Param>); var data = ((Message <Param>)message).Data; Events.OnParamCall(data); break; case EventNames.OnQuote: Trace.Assert(message is Message <OrderBook>); var ob = ((Message <OrderBook>)message).Data; ob.LuaTimeStamp = message.CreatedTime; Events.OnQuoteCall(ob); break; case EventNames.OnStop: Trace.Assert(message is Message <string>); Events.OnStopCall(int.Parse(((Message <string>)message).Data)); break; case EventNames.OnStopOrder: Trace.Assert(message is Message <StopOrder>); StopOrder stopOrder = ((Message <StopOrder>)message).Data; StopOrders.RaiseNewStopOrderEvent(stopOrder); break; case EventNames.OnTrade: Trace.Assert(message is Message <Trade>); var trade = ((Message <Trade>)message).Data; trade.LuaTimeStamp = message.CreatedTime; Events.OnTradeCall(trade); break; case EventNames.OnTransReply: Trace.Assert(message is Message <TransactionReply>); var trReply = ((Message <TransactionReply>)message).Data; trReply.LuaTimeStamp = message.CreatedTime; Events.OnTransReplyCall(trReply); break; case EventNames.NewCandle: Trace.Assert(message is Message <Candle>); var candle = ((Message <Candle>)message).Data; Candles.RaiseNewCandleEvent(candle); break; default: throw new ArgumentOutOfRangeException(); } } else { switch (message.Command) { // an error from an event not request (from req is caught is response loop) case "lua_error": Trace.Assert(message is Message <string>); Trace.TraceError(((Message <string>)message).Data); break; default: throw new InvalidOperationException("Unknown command in a message: " + message.Command); } } }
private void ProcessCallbackMessage(IMessage message) { if (message == null) { throw new ArgumentNullException("message"); } EventNames eventName; var parsed = Enum.TryParse(message.Command, true, out eventName); if (parsed) { switch (eventName) { case EventNames.OnAccountBalance: break; case EventNames.OnAccountPosition: break; case EventNames.OnAllTrade: Trace.Assert(message is Message <AllTrade>); var allTrade = ((Message <AllTrade>)message).Data; allTrade.LuaTimeStamp = message.CreatedTime; Events.OnAllTradeCall(allTrade); break; case EventNames.OnCleanUp: Trace.Assert(message is Message <string>); Events.OnCleanUpCall(); break; case EventNames.OnClose: Trace.Assert(message is Message <string>); Events.OnCloseCall(); break; case EventNames.OnConnected: Trace.Assert(message is Message <string>); Events.OnConnectedCall(); break; case EventNames.OnDepoLimit: break; case EventNames.OnDepoLimitDelete: break; case EventNames.OnDisconnected: Trace.Assert(message is Message <string>); Events.OnDisconnectedCall(); break; case EventNames.OnFirm: break; case EventNames.OnFuturesClientHolding: break; case EventNames.OnFuturesLimitChange: break; case EventNames.OnFuturesLimitDelete: break; case EventNames.OnInit: Trace.Assert(message is Message <string>); Events.OnInitCall(((Message <string>)message).Data, _callbackPort); break; case EventNames.OnMoneyLimit: break; case EventNames.OnMoneyLimitDelete: break; case EventNames.OnNegDeal: break; case EventNames.OnNegTrade: break; case EventNames.OnOrder: Trace.Assert(message is Message <Order>); var ord = ((Message <Order>)message).Data; ord.LuaTimeStamp = message.CreatedTime; Events.OnOrderCall(ord); break; case EventNames.OnParam: break; case EventNames.OnQuote: Trace.Assert(message is Message <OrderBook>); var ob = ((Message <OrderBook>)message).Data; ob.LuaTimeStamp = message.CreatedTime; Events.OnQuoteCall(ob); break; case EventNames.OnStop: Trace.Assert(message is Message <string>); Events.OnStopCall(int.Parse(((Message <string>)message).Data)); break; case EventNames.OnStopOrder: StopOrder stopOrder = (message as Message <StopOrder>).Data; StopOrders.RaiseNewStopOrderEvent(stopOrder); break; case EventNames.OnTrade: Trace.Assert(message is Message <Trade>); var trade = ((Message <Trade>)message).Data; trade.LuaTimeStamp = message.CreatedTime; Events.OnTradeCall(trade); break; case EventNames.OnTransReply: Trace.Assert(message is Message <TransactionReply>); var trReply = ((Message <TransactionReply>)message).Data; trReply.LuaTimeStamp = message.CreatedTime; Events.OnTransReplyCall(trReply); break; case EventNames.NewCandle: Candle candle = (message as Message <Candle>).Data; Candles.RaiseNewCandleEvent(candle); break; default: throw new ArgumentOutOfRangeException(); } } else { switch (message.Command) { // an error from an event not request (from req is caught is response loop) case "lua_error": Trace.Assert(message is Message <string>); Trace.TraceError(((Message <string>)message).Data); break; default: throw new InvalidOperationException("Unknown command in a message: " + message.Command); } } }