/// <summary> /// Adds a symbol to the subscription. /// </summary> /// <remarks> /// Don't call this method inside any listeners and callbacks of NativeSubscription, NativeConnection, /// NativeRegionalBook, NativeSnapshotSubscription classes /// </remarks> /// <param name="symbol">Symbol.</param> /// <exception cref="ArgumentException">Invalid <paramref name="symbol"/> parameter.</exception> /// <exception cref="InvalidOperationException">You try to add more than one symbol to snapshot subscription.</exception> /// <exception cref="DxException">Internal error.</exception> public void AddSymbol(string symbol) { if (string.IsNullOrWhiteSpace(symbol)) { throw new ArgumentException("Invalid symbol parameter"); } if (snapshotPtr != InvalidSnapshot) { throw new InvalidOperationException("It is allowed to add only one symbol to snapshot subscription"); } if ((eventType == EventType.Candle) || (eventType == EventType.None) && NativeSubscription.IsCandleSymbol(symbol)) { AddSymbol(CandleSymbol.ValueOf(symbol)); return; } byte[] sourceBytes = null; if (source != string.Empty) { var ascii = Encoding.ASCII; sourceBytes = ascii.GetBytes(source); } if (eventType == EventType.None) { eventType = EventType.Order; C.CheckOk(C.Instance.dxf_create_order_snapshot(connectionPtr, symbol, sourceBytes, time, out snapshotPtr)); } else { C.CheckOk(C.Instance.dxf_create_snapshot(connectionPtr, EventTypeUtil.GetEventId(eventType), symbol, sourceBytes, time, out snapshotPtr)); } try { if (listener is IDxIncOrderSnapshotListener) { C.CheckOk(C.Instance.dxf_attach_snapshot_inc_listener(snapshotPtr, incCallback = OnIncOrderSnapshot, IntPtr.Zero)); } else { C.CheckOk(C.Instance.dxf_attach_snapshot_listener(snapshotPtr, callback = OnEvent, IntPtr.Zero)); } } catch (DxException) { Dispose(); throw; } }
/// <summary> /// Add candle symbol to subscription. /// </summary> /// <param name="symbol"><see cref="CandleSymbol"/>.</param> /// <exception cref="ArgumentException">Invalid <paramref name="symbol"/> parameter.</exception> /// <exception cref="InvalidOperationException">You try to add more than one symbol to snapshot subscription.</exception> /// <exception cref="DxException">Internal error.</exception> public void AddSymbol(CandleSymbol symbol) { if (snapshotPtr != InvalidSnapshot) { throw new InvalidOperationException("It is allowed to add only one symbol to snapshot subscription"); } if (symbol == null) { throw new ArgumentException("Invalid symbol parameter"); } if (eventType != EventType.None && eventType != EventType.Candle) { throw new InvalidOperationException("It is allowed only for Candle subscription"); } IntPtr candleAttributesPtr = IntPtr.Zero; try { C.CheckOk(C.Instance.dxf_create_candle_symbol_attributes(symbol.BaseSymbol, symbol.ExchangeCode, symbol.PeriodValue, symbol.PeriodId, symbol.PriceId, symbol.SessionId, symbol.AlignmentId, symbol.PriceLevel, out candleAttributesPtr)); } catch (DxException) { throw; } try { C.CheckOk(C.Instance.dxf_create_candle_snapshot(connectionPtr, candleAttributesPtr, time, out snapshotPtr)); } finally { C.CheckOk(C.Instance.dxf_delete_candle_symbol_attributes(candleAttributesPtr)); } try { C.CheckOk(C.Instance.dxf_attach_snapshot_listener(snapshotPtr, callback = OnEvent, IntPtr.Zero)); } catch (DxException) { Dispose(); throw; } eventType = EventType.Candle; }