Example #1
0
 public FixServer()
 {
     _status      = ServicoStatus.Indefinido;
     _fixAcceptor = null;
     //_fixDropCopy = null;
     _lstfixInitiator = new List <FixInitiator>();
     //_lstfixDropCopy = new List<FixDropCopy>();
     _tasks = GeneralTasks.GetInstance();
     _cron  = new Gradual.Core.OMS.FixServerLowLatency.Util.CronStyleScheduler();
 }
Example #2
0
        public void IniciarServico()
        {
            try
            {
                logger.Info("**********************************************************************");
                logger.Info("**********************************************************************");
                logger.Info("*** IniciarServico(): FixServer....");
                // Thread.Sleep(20000);
                // Carrega configurações a partir do banco de dados
                _dbFix = new DbFix();
                string strExecFile = Process.GetCurrentProcess().MainModule.FileName;

                strExecFile = strExecFile.Substring(strExecFile.LastIndexOf(Path.DirectorySeparatorChar) + 1);
                logger.Info("ExecFile: " + strExecFile);

                _lstCfg = _dbFix.BuscarSessoesFIXServer(strExecFile);
                List <FixSessionItem> lstInit     = new List <FixSessionItem>();
                List <FixSessionItem> lstAccept   = new List <FixSessionItem>();
                List <FixSessionItem> lstDropCopy = new List <FixSessionItem>();

                //logger.Info("Iniciando Gerenciador de Limites");
                //LimiteManager.GetInstance().Start();
                string strServerName = System.Net.Dns.GetHostName() + "." + System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
                logger.Info("Atualizando 'server names' das sessoes fix");
                foreach (FixSessionItem item in _lstCfg)
                {
                    if (item.ConnectionType.ToLower().Equals(FixConnectionType.ACCEPTOR))
                    {
                        lstAccept.Add(item);
                    }

                    if (item.ConnectionType.ToLower().Equals(FixConnectionType.INITIATOR))
                    {
                        lstInit.Add(item);
                    }

                    if (item.ConnectionType.ToLower().Equals(FixConnectionType.DROPCOPY_ACCEPTOR))
                    {
                        lstDropCopy.Add(item);
                    }

                    // Atualizar o nome do servidor para definir a "origem" das sessoes
                    _dbFix.AtualizarServerName(item.IdSessaoFix, strServerName);
                }

                // Criar primeiramente Initiator, para ser passado como parametro para as sessoes acceptor
                if (lstInit.Count == 0)
                {
                    logger.Info("Configurações de FixInitiator não encontradas. Não criará o SocketInitiator");
                }
                else
                {
                    foreach (FixSessionItem item in lstInit)
                    {
                        FixInitiator aux = new FixInitiator(item);
                        _lstfixInitiator.Add(aux);
                        logger.Info("IniciarServico(): iniciando SocketInitiator");
                        aux.Start();
                    }
                    // Atribuir as sessoes para executar as tarefas (como dump do dicionario de msgs)
                    _tasks.SetFixInitiators(_lstfixInitiator);
                }

                if (lstDropCopy.Count == 0)
                {
                    logger.Info("Configurações de FixDropCopy não encontradas. Não criará o SocketAcceptor DropCopy");
                }
                else
                {
                    logger.Info("IniciarServico(): iniciando Sessao Drop Copy ");
                    _fixDropCopy = new FixDropCopy(lstDropCopy);
                    _fixDropCopy.Start();
                    //_lstfixDropCopy.Add(aux);
                }

                if (lstAccept.Count == 0)
                {
                    logger.Info("Configurações de FixAcceptor não encontradas. Não criará o SocketAcceptor");
                }
                else
                {
                    logger.Info("IniciarServico(): iniciando SocketAcceptor");
                    _fixAcceptor = new FixAcceptor(lstAccept, _lstfixInitiator, _fixDropCopy);
                    _fixAcceptor.Start();
                }

                logger.Info("IniciarServico(): iniciando crontab Scheduler");
                if (null == _cron)
                {
                    _cron = new Util.CronStyleScheduler();
                }
                _cron.Start();


                logger.Info("*** IniciarServico(): FixServer inicializado...");

                _dbFix  = null;
                _status = ServicoStatus.EmExecucao;
            }
            catch (Exception ex)
            {
                logger.Error("Erro inicializacao: " + ex.Message, ex);
                throw ex;
            }
        }
Example #3
0
        public void PararServico()
        {
            try
            {
                logger.Info("*** Parando FixServer");
                if (_fixAcceptor != null)
                {
                    logger.Info("Parando Fix SocketAcceptor");
                    _fixAcceptor.Stop();
                    _fixAcceptor = null;
                }

                if (_fixDropCopy != null)
                {
                    logger.Info("Parando Fix SocketAcceptor - Drop Copy");
                    _fixDropCopy.Stop();
                    _fixDropCopy = null;
                }

                if (_lstfixInitiator != null)
                {
                    int length = _lstfixInitiator.Count;
                    for (int i = 0; i < length; i++)
                    {
                        logger.Info("Parando Fix SocketInitiator");
                        _lstfixInitiator[i].Stop();
                        _lstfixInitiator[i] = null;
                    }
                    _lstfixInitiator.Clear();
                    _lstfixInitiator = null;
                }
                _tasks = null;
                DbFix dbFix = new DbFix();
                logger.Info("Atualizando 'server names' das sessoes fix");
                foreach (FixSessionItem item in _lstCfg)
                {
                    dbFix.AtualizarServerName(item.IdSessaoFix, null);
                }
                _lstCfg.Clear();
                _lstCfg = null;
                dbFix   = null;
                //logger.Info("Parando Gerenciador de Limites");
                //LimiteManager.GetInstance().Stop();
                //logger.Info("Parando Cron Tab Scheduler");

                if (null != _cron)
                {
                    _cron.Stop();
                    _cron = null;
                }

                _status = ServicoStatus.Parado;


                logger.Info("*** FixServer finalizado");

                // Forcar queda do executavel
            }
            catch (Exception ex)
            {
                logger.Error("*** Erro na parada do servico: " + ex.Message, ex);
            }
        }