Exemplo n.º 1
0
        /// <summary>
        /// Creates a ClientHandlerThread
        /// </summary>
        /// <param name="tcpClient"></param>
        /// <param name="clientId"></param>
        /// <param name="debugLogFilePath">path where thread log will go</param>
        public ClientHandlerThread(TcpClient tcpClient, long clientId, QuickFix.Dictionary settingsDict, SocketSettings socketSettings)
        {
            string debugLogFilePath = "log";

            if (settingsDict.Has(SessionSettings.DEBUG_FILE_LOG_PATH))
            {
                debugLogFilePath = settingsDict.GetString(SessionSettings.DEBUG_FILE_LOG_PATH);
            }
            else if (settingsDict.Has(SessionSettings.FILE_LOG_PATH))
            {
                debugLogFilePath = settingsDict.GetString(SessionSettings.FILE_LOG_PATH);
            }

            // FIXME - do something more flexible than hardcoding a filelog
            log_ = new FileLog(debugLogFilePath, new SessionID("ClientHandlerThread", clientId.ToString(), "Debug"));

            this.Id = clientId;

            _messageEncoding = settingsDict.GetEncoding(SessionSettings.MESSAGE_ENCODING);
            socketReader_    = new SocketReader(tcpClient, socketSettings, this, _messageEncoding);
        }
Exemplo n.º 2
0
        public Session Create(SessionID sessionID, QuickFix.Dictionary settings)
        {
            string connectionType = settings.GetString(SessionSettings.CONNECTION_TYPE);

            if (!"acceptor".Equals(connectionType) && !"initiator".Equals(connectionType))
            {
                throw new ConfigError("Invalid ConnectionType");
            }

            if ("acceptor".Equals(connectionType) && settings.Has(SessionSettings.SESSION_QUALIFIER))
            {
                throw new ConfigError("SessionQualifier cannot be used with acceptor.");
            }

            bool useDataDictionary = true;

            if (settings.Has(SessionSettings.USE_DATA_DICTIONARY))
            {
                useDataDictionary = settings.GetBool(SessionSettings.USE_DATA_DICTIONARY);
            }

            QuickFix.Fields.ApplVerID defaultApplVerID = null;
            if (sessionID.IsFIXT)
            {
                if (!settings.Has(SessionSettings.DEFAULT_APPLVERID))
                {
                    throw new ConfigError("ApplVerID is required for FIXT transport");
                }
                defaultApplVerID = Message.GetApplVerID(settings.GetString(SessionSettings.DEFAULT_APPLVERID));
            }

            DataDictionaryProvider dd = new DataDictionaryProvider();

            if (useDataDictionary)
            {
                if (sessionID.IsFIXT)
                {
                    ProcessFixTDataDictionaries(sessionID, settings, dd);
                }
                else
                {
                    ProcessFixDataDictionary(sessionID, settings, dd);
                }
            }

            int heartBtInt = 0;

            if (connectionType == "initiator")
            {
                heartBtInt = System.Convert.ToInt32(settings.GetLong(SessionSettings.HEARTBTINT));
                if (heartBtInt <= 0)
                {
                    throw new ConfigError("Heartbeat must be greater than zero");
                }
            }
            string senderDefaultApplVerId = "";

            if (defaultApplVerID != null)
            {
                senderDefaultApplVerId = defaultApplVerID.Obj;
            }

            var encoding = settings.GetEncoding(SessionSettings.MESSAGE_ENCODING);

            Session session = new Session(
                application_,
                messageStoreFactory_,
                sessionID,
                dd,
                new SessionSchedule(settings),
                heartBtInt,
                logFactory_,
                messageFactory_,
                senderDefaultApplVerId,
                encoding);

            if (settings.Has(SessionSettings.SEND_REDUNDANT_RESENDREQUESTS))
            {
                session.SendRedundantResendRequests = settings.GetBool(SessionSettings.SEND_REDUNDANT_RESENDREQUESTS);
            }
            if (settings.Has(SessionSettings.RESEND_SESSION_LEVEL_REJECTS))
            {
                session.ResendSessionLevelRejects = settings.GetBool(SessionSettings.RESEND_SESSION_LEVEL_REJECTS);
            }

            /** FIXME - implement optional settings
             * if (settings.Has(SessionSettings.CHECK_COMPID))
             *  session.SetCheckCompId(settings.GetBool(SessionSettings.CHECK_COMPID));
             */
            if (settings.Has(SessionSettings.CHECK_LATENCY))
            {
                session.CheckLatency = settings.GetBool(SessionSettings.CHECK_LATENCY);
            }
            if (settings.Has(SessionSettings.MAX_LATENCY))
            {
                session.MaxLatency = settings.GetInt(SessionSettings.MAX_LATENCY);
            }
            if (settings.Has(SessionSettings.LOGON_TIMEOUT))
            {
                session.LogonTimeout = settings.GetInt(SessionSettings.LOGON_TIMEOUT);
            }
            if (settings.Has(SessionSettings.LOGOUT_TIMEOUT))
            {
                session.LogoutTimeout = settings.GetInt(SessionSettings.LOGOUT_TIMEOUT);
            }
            if (settings.Has(SessionSettings.RESET_ON_LOGON))
            {
                session.ResetOnLogon = settings.GetBool(SessionSettings.RESET_ON_LOGON);
            }
            if (settings.Has(SessionSettings.RESET_ON_LOGOUT))
            {
                session.ResetOnLogout = settings.GetBool(SessionSettings.RESET_ON_LOGOUT);
            }
            if (settings.Has(SessionSettings.RESET_ON_DISCONNECT))
            {
                session.ResetOnDisconnect = settings.GetBool(SessionSettings.RESET_ON_DISCONNECT);
            }
            if (settings.Has(SessionSettings.REFRESH_ON_LOGON))
            {
                session.RefreshOnLogon = settings.GetBool(SessionSettings.REFRESH_ON_LOGON);
            }
            if (settings.Has(SessionSettings.PERSIST_MESSAGES))
            {
                session.PersistMessages = settings.GetBool(SessionSettings.PERSIST_MESSAGES);
            }
            if (settings.Has(SessionSettings.MILLISECONDS_IN_TIMESTAMP))
            {
                session.MillisecondsInTimeStamp = settings.GetBool(SessionSettings.MILLISECONDS_IN_TIMESTAMP);
            }
            if (settings.Has(SessionSettings.TIMESTAMP_PRECISION))
            {
                session.TimeStampPrecision = settings.GetTimeStampPrecision(SessionSettings.TIMESTAMP_PRECISION);
            }
            if (settings.Has(SessionSettings.ENABLE_LAST_MSG_SEQ_NUM_PROCESSED))
            {
                session.EnableLastMsgSeqNumProcessed = settings.GetBool(SessionSettings.ENABLE_LAST_MSG_SEQ_NUM_PROCESSED);
            }
            if (settings.Has(SessionSettings.MAX_MESSAGES_IN_RESEND_REQUEST))
            {
                session.MaxMessagesInResendRequest = settings.GetInt(SessionSettings.MAX_MESSAGES_IN_RESEND_REQUEST);
            }
            if (settings.Has(SessionSettings.SEND_LOGOUT_BEFORE_TIMEOUT_DISCONNECT))
            {
                session.SendLogoutBeforeTimeoutDisconnect = settings.GetBool(SessionSettings.SEND_LOGOUT_BEFORE_TIMEOUT_DISCONNECT);
            }
            if (settings.Has(SessionSettings.IGNORE_POSSDUP_RESEND_REQUESTS))
            {
                session.IgnorePossDupResendRequests = settings.GetBool(SessionSettings.IGNORE_POSSDUP_RESEND_REQUESTS);
            }
            if (settings.Has(SessionSettings.VALIDATE_LENGTH_AND_CHECKSUM))
            {
                session.ValidateLengthAndChecksum = settings.GetBool(SessionSettings.VALIDATE_LENGTH_AND_CHECKSUM);
            }
            if (settings.Has(SessionSettings.RESETSEQUENCE_MESSAGE_REQUIRES_ORIGSENDINGTIME))
            {
                session.RequiresOrigSendingTime = settings.GetBool(SessionSettings.RESETSEQUENCE_MESSAGE_REQUIRES_ORIGSENDINGTIME);
            }

            return(session);
        }