public ChannelTcpConflated(TCPConflatedConfig conflatedConfig) { logger = LogManager.GetLogger("ChannelTcpConflated-" + conflatedConfig.ChannelID); MDSUtils.AddAppender("ChannelTcpConflated-" + conflatedConfig.ChannelID, logger.Logger); _bKeepRunning = true; machineGun = new MachineGunFixSplitter(); machineGun.UnderFIXMessageFire += new FIXMachineGunEventHandler(machineGun_UnderFIXMessageFire); machineGun.Start(); thQueueProc = new Thread(new ThreadStart(queueProc)); thQueueProc.Start(); thSplitProc = new Thread(new ThreadStart(splitterThreadWork)); thSplitProc.Start(); _channelUmdfConfig = conflatedConfig; //if (!listaChannelQueues.ContainsKey(conflatedConfig.ChannelID)) // listaChannelQueues.Add(conflatedConfig.ChannelID, new ListChannelQueues(qUdpPkt, replayLockObject)); logger.Info("Start(): iniciando sessao FIX..."); try { // Cria sessao FIX _session = new QuickFix.SessionID( conflatedConfig.BeginString, conflatedConfig.SenderCompID, conflatedConfig.TargetCompID); // Cria dicionario da configuracao QuickFix.Dictionary mainDic = new QuickFix.Dictionary(); mainDic.SetLong("SocketConnectPort", conflatedConfig.ProxyPort); mainDic.SetLong("HeartBtInt", conflatedConfig.HeartBtInt); mainDic.SetLong("ReconnectInterval", conflatedConfig.ReconnectInterval); mainDic.SetBool("ResetOnLogon", conflatedConfig.ResetOnLogon); mainDic.SetBool("ResetOnLogout", conflatedConfig.ResetOnLogout); mainDic.SetBool("ResetOnDisconnect", conflatedConfig.ResetOnDisconnect); mainDic.SetBool("PersistMessages", conflatedConfig.PersistMessages); mainDic.SetString("ConnectionType", conflatedConfig.ConnectionType); mainDic.SetString("SocketConnectHost", conflatedConfig.ProxyHost); mainDic.SetString("FileStorePath", conflatedConfig.FileStorePath); mainDic.SetString("FileLogPath", conflatedConfig.FileLogPath); mainDic.SetString("StartTime", conflatedConfig.StartTime); mainDic.SetString("EndTime", conflatedConfig.EndTime); QuickFix.Dictionary sessDic = new QuickFix.Dictionary(); sessDic.SetString("BeginString", conflatedConfig.BeginString); sessDic.SetString("SenderCompID", conflatedConfig.SenderCompID); sessDic.SetString("TargetCompID", conflatedConfig.TargetCompID); sessDic.SetString("DataDictionary", conflatedConfig.DataDictionary); sessDic.SetBool("CheckLatency", false); sessDic.SetBool("UseDataDictionary", true); sessDic.SetLong("SocketReceiveBufferSize", conflatedConfig.SocketReceiveBufferSize); // Configure the session settings QuickFix.SessionSettings settings = new QuickFix.SessionSettings(); settings.Set(mainDic); settings.Set(_session, sessDic); MemoryStoreFactory store = new MemoryStoreFactory(); FileLogFactory log = new FileLogFactory(settings); IMessageFactory message = new DefaultMessageFactory(); // Cria o socket _initiator = new QuickFix.Transport.SocketInitiator(this, store, settings, this, message); _initiator.Start(); QuickFix.Session mySession = QuickFix.Session.LookupSession(_session); QuickFix.Session.LookupSession(_session).ValidateLengthAndChecksum = false; } catch (Exception ex) { logger.Error("Start():" + ex.Message, ex); } logger.Info("Start(): Sessao FIX iniciado!"); }
/// <summary> /// /// </summary> public void IniciarServico() { try { _monitorConfig = new MonitorConfig(); logger.Info("Iniciando servidor MDS"); logger.Info("Inicializando NEsper"); //NesperManager.Instance.Configure(); logger.Info("Inicializando gerenciador de filas de eventos"); EventQueueManager.Instance.Start(); logger.Info("Carregando configuracao dos canais UMDF"); _umdfconfig = GerenciadorConfig.ReceberConfig <UMDFConfig>(); logger.Info("Criando instancias dos canais UMDF"); foreach (ChannelUMDFConfig cfgcanal in _umdfconfig.CanaisUMDF) { cfgcanal.Segment = cfgcanal.Segment.ToUpperInvariant(); cfgcanal.TCPConfig = _umdfconfig.TCPConfig; ChannelUDMF canal = new ChannelUDMF(cfgcanal, _monitorConfig); canal.startup = cfgcanal.Startup; logger.Info("Configurado ChannelID[" + cfgcanal.ChannelID + "]: SecurityList[" + cfgcanal.SecurityListHost + ":" + cfgcanal.SecurityListPorta + "] Snapshot[" + cfgcanal.MDRecoveryHost + ":" + cfgcanal.MDRecoveryPorta + "] Incremental[" + cfgcanal.MDIncrementalHost + ":" + cfgcanal.MDIncrementalPorta + "]"); _dctCanais.Add(cfgcanal.ChannelID, canal); _monitorConfig.AddChannel(cfgcanal.ChannelID, cfgcanal.Startup); } logger.Info("Iniciando canais TCPConflated"); _conflatedConfig = GerenciadorConfig.ReceberConfig <TCPConflatedConfig>(); if (_conflatedConfig != null) { ChannelTcpConflated tcpConflated = new ChannelTcpConflated(_conflatedConfig); _dctConflated.Add(_conflatedConfig.SenderCompID, tcpConflated); } if (ConfigurationManager.AppSettings["AnaliseGraficaListenPort"] != null) { string portaANG = ConfigurationManager.AppSettings["AnaliseGraficaListenPort"].ToString(); logger.Info("Iniciando servidor sinal AnaliseGrafica na porta [" + portaANG + "]"); servidorANG = new ServidorConexaoANG(); servidorANG.ListenPortNumber = Int32.Parse(portaANG); servidorANG.Start(); } logger.Info("Iniciando threads de tratamento dos sinais"); ContainerManager.Instance.Start(_dctCanais); logger.Info("Iniciando threads dos Canais UMDF"); foreach (ChannelUDMF canal in _dctCanais.Values) { if (canal.startup) { canal.Start(); logger.Info("Ativado ChannelID[" + canal.channelConfig.ChannelID + "]"); } } Parallel.Invoke(() => { Thread.Sleep(15000); if (ConfigurationManager.AppSettings["StreamerListenPort"] != null) { string portaStreamer = ConfigurationManager.AppSettings["StreamerListenPort"].ToString(); logger.Info("Iniciando servidor Streaming na porta [" + portaStreamer + "]"); servidorStreamer = new ServidorConexaoStreamer(); servidorStreamer.ListenPortNumber = Int32.Parse(portaStreamer); servidorStreamer.Start(); } }, () => { Thread.Sleep(15000); if (ConfigurationManager.AppSettings["CotacaoListenPort"] != null) { string portaCotacao = ConfigurationManager.AppSettings["CotacaoListenPort"].ToString(); logger.Info("Iniciando servidor cotacoes HB na porta [" + portaCotacao + "]"); servidorCotacao = new ServidorConexaoHB(); servidorCotacao.ListenPortNumber = Int32.Parse(portaCotacao); servidorCotacao.Start(); } } ); _serviceStatus = ServicoStatus.EmExecucao; logger.Info("Servidor MDS iniciado"); } catch (Exception ex) { logger.Error("IniciarServico(): " + ex.Message, ex); } }