/// <summary> /// Create time event subscription. /// </summary> /// <param name="connection">Native connection pointer.</param> /// <param name="eventType">Type of event to create.</param> /// <param name="time">Unix time stamp (the number of milliseconds from 1.1.1970)</param> /// <param name="eventSubscriptionFlags">event subscription flags</param> /// <param name="listener">Event listener.</param> /// <exception cref="ArgumentException">One of passed parameters is not valid.</exception> /// <exception cref="DxException"></exception> public NativeSubscription(NativeConnection connection, EventType eventType, long time, EventSubscriptionFlag eventSubscriptionFlags, IDxEventListener listener) { if (listener == null) { throw new ArgumentNullException(nameof(listener)); } connectionPtr = connection.Handler; this.eventType = eventType; eventListener = listener; if (eventSubscriptionFlags == EventSubscriptionFlag.Default) { C.CheckOk(C.Instance.dxf_create_subscription_timed(connectionPtr, eventType, time, out subscriptionPtr)); } else { C.CheckOk(C.Instance.dxf_create_subscription_timed_with_flags(connectionPtr, eventType, time, eventSubscriptionFlags, out subscriptionPtr)); } try { C.CheckOk(C.Instance.dxf_attach_event_listener_v2(subscriptionPtr, callback = OnEvent, IntPtr.Zero)); } catch (DxException) { C.Instance.dxf_close_subscription(subscriptionPtr); throw; } }
/// <summary> /// Create Candle event subscription. /// For rest events use another constructor. /// </summary> /// <param name="connection">Native connection pointer.</param> /// <param name="time">Date time in the past.</param> /// <param name="eventSubscriptionFlags">event subscription flags</param> /// <param name="listener">Candle event listener.</param> /// <exception cref="ArgumentException">One of passed parameters is not valid.</exception> /// <exception cref="DxException"></exception> public NativeSubscription(NativeConnection connection, DateTime?time, EventSubscriptionFlag eventSubscriptionFlags, IDxCandleListener listener) { if (listener == null) { throw new ArgumentNullException(nameof(listener)); } connectionPtr = connection.Handler; eventType = EventType.Candle; eventListener = listener; var unixTimestamp = time == null ? 0 : Tools.DateToUnixTime((DateTime)time); C.CheckOk(eventSubscriptionFlags == EventSubscriptionFlag.Default ? C.Instance.dxf_create_subscription_timed(connectionPtr, eventType, unixTimestamp, out subscriptionPtr) : C.Instance.dxf_create_subscription_timed_with_flags(connectionPtr, eventType, unixTimestamp, eventSubscriptionFlags, out subscriptionPtr)); try { C.CheckOk(C.Instance.dxf_attach_event_listener_v2(subscriptionPtr, callback = OnEvent, IntPtr.Zero)); } catch (DxException) { C.Instance.dxf_close_subscription(subscriptionPtr); throw; } }