public ThreadedSocketAcceptor(SessionFactory sessionFactory, SessionSettings settings) { try { CreateSessions(settings, sessionFactory); } catch (System.Exception e) { throw new ConfigError(e.Message, e); } }
public void ValidConfiguration() { Application app = new NullApplication(); MessageStoreFactory storeFactory = new MemoryStoreFactory(); SessionFactory factory = new SessionFactory(app, storeFactory); SessionID sessionID = new SessionID("FIX.4.2", "SENDER", "TARGET"); Dictionary settings = new Dictionary(); settings.SetString(SessionSettings.CONNECTION_TYPE, "initiator"); settings.SetString(SessionSettings.USE_DATA_DICTIONARY, "N"); settings.SetString(SessionSettings.START_TIME, "12:00:00"); settings.SetString(SessionSettings.END_TIME, "12:00:00"); settings.SetString(SessionSettings.HEARTBTINT, "30"); Assert.DoesNotThrow(delegate { factory.Create(sessionID, settings); }); }
public void TestExtendedSettings() { IApplication app = new NullApplication(); IMessageStoreFactory storeFactory = new MemoryStoreFactory(); SessionFactory factory = new SessionFactory(app, storeFactory); SessionID sessionID = new SessionID("FIX.4.2", "SENDER", "TARGET"); Dictionary settings = new Dictionary(); settings.SetString(SessionSettings.USE_DATA_DICTIONARY, "N"); settings.SetString(SessionSettings.SEND_REDUNDANT_RESENDREQUESTS, "Y"); settings.SetString(SessionSettings.RESEND_SESSION_LEVEL_REJECTS, "Y"); settings.SetString(SessionSettings.MILLISECONDS_IN_TIMESTAMP, "Y"); settings.SetString(SessionSettings.CONNECTION_TYPE, "initiator"); settings.SetString(SessionSettings.HEARTBTINT, "30"); settings.SetString(SessionSettings.START_TIME, "12:00:00"); settings.SetString(SessionSettings.END_TIME, "12:00:00"); settings.SetString(SessionSettings.ENABLE_LAST_MSG_SEQ_NUM_PROCESSED, "Y"); settings.SetString(SessionSettings.MAX_MESSAGES_IN_RESEND_REQUEST, "2500"); settings.SetString(SessionSettings.SEND_LOGOUT_BEFORE_TIMEOUT_DISCONNECT, "Y"); settings.SetString(SessionSettings.IGNORE_POSSDUP_RESEND_REQUESTS, "Y"); Session session = factory.Create(sessionID, settings); Assert.That(session.SendRedundantResendRequests); Assert.That(session.ResendSessionLevelRejects); Assert.That(session.MillisecondsInTimeStamp); settings.SetString(SessionSettings.SEND_REDUNDANT_RESENDREQUESTS, "N"); settings.SetString(SessionSettings.RESEND_SESSION_LEVEL_REJECTS, "N"); settings.SetString(SessionSettings.MILLISECONDS_IN_TIMESTAMP, "N"); session = factory.Create(sessionID, settings); Assert.That(!session.SendRedundantResendRequests); Assert.That(!session.ResendSessionLevelRejects); Assert.That(!session.MillisecondsInTimeStamp); Assert.That(session.EnableLastMsgSeqNumProcessed); Assert.That(session.MaxMessagesInResendRequest, Is.EqualTo(2500)); Assert.That(session.SendLogoutBeforeTimeoutDisconnect); Assert.That(session.IgnorePossDupResendRequests); }
public void Start() { if (_disposed) throw new System.ObjectDisposedException(this.GetType().Name); // create all sessions sessionFactory_ = new SessionFactory(_app, _storeFactory, _logFactory, _msgFactory); foreach (SessionID sessionID in _settings.GetSessions()) { Dictionary dict = _settings.Get(sessionID); CreateSession(sessionID, dict); } if (0 == sessions_.Count) throw new ConfigError("No sessions defined for initiator"); // start it up isStopped_ = false; OnConfigure(_settings); thread_ = new Thread(new ThreadStart(OnStart)); thread_.Start(); }
public AbstractInitiator(SessionFactory factory, SessionSettings settings) { settings_ = settings; HashSet<SessionID> definedSessions = settings.GetSessions(); if (0 == definedSessions.Count) throw new ConfigError("No sessions defined"); foreach (SessionID sessionID in definedSessions) { Dictionary dict = settings.Get(sessionID); if ("initiator".Equals(dict.GetString(SessionSettings.CONNECTION_TYPE))) { sessionIDs_.Add(sessionID); sessions_[sessionID] = factory.Create(sessionID, dict); SetDisconnected(sessionID); } } if (0 == sessions_.Count) throw new ConfigError("No sessions defined for initiator"); }
public void TestPersistMessages() { IApplication app = new NullApplication(); IMessageStoreFactory storeFactory = new MemoryStoreFactory(); SessionFactory factory = new SessionFactory(app, storeFactory); SessionID sessionID = new SessionID("FIX.4.2", "SENDER", "TARGET"); Dictionary settings = new Dictionary(); settings.SetString(SessionSettings.USE_DATA_DICTIONARY, "N"); settings.SetString(SessionSettings.CONNECTION_TYPE, "initiator"); settings.SetString(SessionSettings.HEARTBTINT, "30"); settings.SetString(SessionSettings.START_TIME, "12:00:00"); settings.SetString(SessionSettings.END_TIME, "12:00:00"); Session session = factory.Create(sessionID, settings); //true by default Assert.That(session.PersistMessages); settings.SetBool(SessionSettings.PERSIST_MESSAGES, false); session = factory.Create(sessionID, settings); Assert.That(!session.PersistMessages); }
private void CreateSessions(SessionSettings settings, SessionFactory sessionFactory) { sessionFactory_ = sessionFactory; settings_ = settings; foreach (SessionID sessionID in settings.GetSessions()) { QuickFix.Dictionary dict = settings.Get(sessionID); CreateSession(sessionID, dict); } if (0 == socketDescriptorForAddress_.Count) throw new ConfigError("No acceptor sessions found in SessionSettings."); }
public Session Create(SessionID sessionID, QuickFix.Dictionary settings) { bool isInitiator = SessionFactory.DetectIfInitiator(settings); if (!isInitiator && 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; IMessageFactory sessionMsgFactory = messageFactory_; if (sessionID.IsFIXT) { if (!settings.Has(SessionSettings.DEFAULT_APPLVERID)) { throw new ConfigError("ApplVerID is required for FIXT transport"); } string rawDefaultApplVerIdSetting = settings.GetString(SessionSettings.DEFAULT_APPLVERID); defaultApplVerID = Message.GetApplVerID(rawDefaultApplVerIdSetting); // DefaultMessageFactory as created in the SessionFactory ctor cannot // tell the difference between FIX50 versions (same BeginString, unknown defaultApplVerId). // But we have the real session settings here, so we can fix that. // This is, of course, kind of a hack, and it should be reworked in V2 (TODO!). if (messageFactory_ is DefaultMessageFactory) { sessionMsgFactory = new DefaultMessageFactory( FixValues.ApplVerID.FromBeginString(rawDefaultApplVerIdSetting)); } } DataDictionaryProvider dd = new DataDictionaryProvider(); if (useDataDictionary) { if (sessionID.IsFIXT) ProcessFixTDataDictionaries(sessionID, settings, dd); else ProcessFixDataDictionary(sessionID, settings, dd); } int heartBtInt = 0; if (isInitiator) { heartBtInt = System.Convert.ToInt32(settings.GetLong(SessionSettings.HEARTBTINT)); if (heartBtInt < 0) throw new ConfigError($"{SessionSettings.HEARTBTINT} must be greater or equal to zero"); } string senderDefaultApplVerId = ""; if(defaultApplVerID != null) senderDefaultApplVerId = defaultApplVerID.Obj; Session session = new Session( isInitiator, application_, messageStoreFactory_, sessionID, dd, new SessionSchedule(settings), heartBtInt, logFactory_, sessionMsgFactory, senderDefaultApplVerId); 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; }
private void CreateSessions(SessionSettings settings, SessionFactory sessionFactory) { foreach (SessionID sessionID in settings.GetSessions()) { QuickFix.Dictionary dict = settings.Get(sessionID); string connectionType = dict.GetString(SessionSettings.CONNECTION_TYPE); if ("acceptor".Equals(connectionType)) { AcceptorSocketDescriptor descriptor = GetAcceptorSocketDescriptor(settings, sessionID); Session session = sessionFactory.Create(sessionID, dict); descriptor.AcceptSession(session); sessions_[sessionID] = session; } } if (0 == socketDescriptorForAddress_.Count) throw new ConfigError("No acceptor sessions found in SessionSettings."); }
public void Start() { if (_disposed) throw new System.ObjectDisposedException(this.GetType().Name); // create all sessions SessionFactory factory = new SessionFactory(_app, _storeFactory, _logFactory, _msgFactory); foreach (SessionID sessionID in _settings.GetSessions()) { Dictionary dict = _settings.Get(sessionID); string connectionType = dict.GetString(SessionSettings.CONNECTION_TYPE); if ("initiator".Equals(connectionType)) { sessionIDs_.Add(sessionID); sessions_[sessionID] = factory.Create(sessionID, dict); SetDisconnected(sessionID); } } if (0 == sessions_.Count) throw new ConfigError("No sessions defined for initiator"); // start it up isStopped_ = false; OnConfigure(_settings); thread_ = new Thread(new ThreadStart(OnStart)); thread_.Start(); }