public DateTime convertToOutputZone(DateTime dtInternal)
        {
            O2GTimeConverter tc = getTimeConverter();

            if (tc == null)
            {
                return(dtInternal);
            }
            return(tc.convert(dtInternal, O2GTimeConverterTimeZone.UTC, mTimezone));
        }
        void IO2GSessionStatus.onSessionStatusChanged(O2GSessionStatusCode status)
        {
            bool   connected;
            string name;

            switch (status)
            {
            case O2GSessionStatusCode.Connected:
                connected      = true;
                mTimeConverter = mSession.getTimeConverter();
                O2GLoginRules rules = mSession.getLoginRules();
                if (rules.isTableLoadedByDefault(O2GTableType.Offers))
                {
                    O2GResponse offers = rules.getTableRefreshResponse(O2GTableType.Offers);
                    ReadOffers(offers);
                    mReady = true;
                }
                else
                {
                    O2GRequestFactory reqFactory = mSession.getRequestFactory();
                    O2GRequest        request    = reqFactory.createRefreshTableRequest(O2GTableType.Offers);
                    mSession.sendRequest(request);
                    mReady = false;
                }
                name = "connected";
                break;

            case O2GSessionStatusCode.Connecting:
                connected = false;
                name      = "connecting";
                break;

            case O2GSessionStatusCode.Disconnected:
                connected = false;
                name      = "disconnected";
                break;

            case O2GSessionStatusCode.Disconnecting:
                connected = false;
                name      = "disconnecting";
                break;

            case O2GSessionStatusCode.PriceSessionReconnecting:
                connected = false;
                name      = "price channel reconnecting";
                break;

            case O2GSessionStatusCode.SessionLost:
                connected = false;
                name      = "session has been lost";
                break;

            default:
                connected = false;
                name      = "unknown";
                break;
            }

            if (!connected)
            {
                mReady         = false;
                mTimeConverter = null;
            }

            if (OnSessionStatusChanged != null)
            {
                SessionStatusEventArgs args = new SessionStatusEventArgs(connected, name);
                OnSessionStatusChanged(this, args);
            }
        }
Пример #3
0
        /// <summary>
        /// Listener: When Trading session status is changed
        /// </summary>
        /// <param name="status"></param>
        public void onSessionStatusChanged(O2GSessionStatusCode status)
        {
            switch (status)
            {
            case    O2GSessionStatusCode.TradingSessionRequested:
                // If the trading session requires the session name or pin code...
                if (OnErrorEvent != null)
                {
                    OnErrorEvent("Multi-session connectors aren't supported by this example\n");
                }
                mTradingSession.logout();
                break;

            case    O2GSessionStatusCode.Connected:
                // login is completed

                // now we need collect data about the system properties
                O2GLoginRules loginRules = mTradingSession.getLoginRules();
                mTZConverter = mTradingSession.getTimeConverter();
                // get the trading day offset.
                O2GResponse response;
                response = loginRules.getSystemPropertiesResponse();
                O2GSystemPropertiesReader reader = mTradingSession.getResponseReaderFactory().createSystemPropertiesReader(response);
                string   eod  = reader.Properties["END_TRADING_DAY"];
                DateTime time = DateTime.ParseExact("01.01.1900_" + eod, "MM.dd.yyyy_HH:mm:ss", CultureInfo.InvariantCulture);
                // convert Trading day start to EST time because the trading day is always closed by New York time
                // so to avoid handling different hour depending on daylight saying time - use EST always
                // for candle calculations
                time = mTZConverter.convert(time, O2GTimeConverterTimeZone.UTC, O2GTimeConverterTimeZone.EST);
                // here we have the date when trading day begins, e.g. 17:00:00
                // please note that if trading day begins before noon - it begins AFTER calendar date is started,
                // so the offset is positive (e.g. 03:00 is +3 offset).
                // if trading day begins after noon, it begins BEFORE calendar date is istarted,
                // so the offset is negative (e.g. 17:00 is -7 offset).
                if (time.Hour <= 12)
                {
                    mTradingDayOffset = time.Hour;
                }
                else
                {
                    mTradingDayOffset = time.Hour - 24;
                }

                // ...and now get the list of the offers to which the user is subscribed
                if (loginRules.isTableLoadedByDefault(O2GTableType.Offers))
                {
                    // if it is already loaded - just handle them
                    response = loginRules.getTableRefreshResponse(O2GTableType.Offers);
                    onRequestCompleted(null, response);
                }
                else
                {
                    // otherwise create the request to get offers from the server
                    O2GRequestFactory factory      = mTradingSession.getRequestFactory();
                    O2GRequest        offerRequest = factory.createRefreshTableRequest(O2GTableType.Offers);
                    mTradingSession.sendRequest(offerRequest);
                }
                break;

            default:
                if (OnStateChange != null)
                {
                    OnStateChange(false);
                }
                break;
            }
        }