Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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;
            }
        }