public FixInitiatorDropCopy(FixSessionItem config) { _config = config; _bConectadoBolsa = false; _socketInitiator = null; _finalizarSinalizado = false; _intCanal = _config.Operador; _running = false; #if _CQUEUE _queueToDB = new ConcurrentQueue <TODropCopyDB>(); #else _queueToDB = new Queue <TODropCopyDB>(); #endif //_db = new DbDropCopy(); _rulesMsg = new MessageProcessor(); }
/// <summary> /// BuscarSessoesFIX - recupera toda lista de sessoes configuradas /// </summary> /// <param name="ordemalterada">OrdemInfo da ordem alterada</param> /// <returns>Lista de registors</returns> public List <FixSessionItem> BuscarSessoesFIXServer(string strExecFile, string active = "Y") { List <FixSessionItem> ret = new List <FixSessionItem>(); SqlDataAdapter lAdapter; AbrirConexao(_strConnectionStringDefault); DataSet lDataSet = new DataSet(); _sqlCommand = new SqlCommand("prc_fixsrv_sessaofix_server", _sqlConn); _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure; _sqlCommand.Parameters.Add(new SqlParameter("@ExecArq", strExecFile)); _sqlCommand.Parameters.Add(new SqlParameter("@ActiveFlag", active[0])); lAdapter = new SqlDataAdapter(_sqlCommand); lAdapter.Fill(lDataSet); foreach (DataRow lRow in lDataSet.Tables[0].Rows) { FixSessionItem session = new FixSessionItem(); session.IdSessaoFix = lRow["IdSessaoFix"].DBToInt32(); session.IdCliente = lRow["id_cliente"].DBToInt32(); session.Mnemonico = lRow["Mnemonico"].DBToString(); session.Bolsa = lRow["Bolsa"].DBToString(); session.Operador = lRow["Operador"].DBToInt32(); session.BeginString = lRow["BeginString"].DBToString(); session.SenderCompID = lRow["SenderCompID"].DBToString(); session.SenderSubID = lRow["SenderSubID"].DBToString(); session.SenderLocationID = lRow["SenderLocationID"].DBToString(); session.TargetCompID = lRow["TargetCompID"].DBToString(); session.TargetSubID = lRow["TargetSubID"].DBToString(); //session.PartyID = lRow["PartyID"].DBToInt32().ToString(); //session.PartyIDSource = lRow["PartyIDSource"].DBToString(); //session.PartyRole = lRow["PartyRole"].DBToInt32(); session.SecurityIDSource = lRow["SecurityIDSource"].DBToInt32().ToString(); session.LogonPassword = lRow["LogonPassword"].DBToString(); session.HeartBtInt = lRow["HeartBeatInt"].DBToInt32(); string aux = lRow["ResetSeqNum"].DBToString(); if (aux.ToLower().Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux)) { session.ResetSeqNum = false; } else { session.ResetSeqNum = true; } aux = lRow["PersistMessages"].DBToString(); if (aux.Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux)) { session.PersistMessages = false; } else { session.PersistMessages = true; } session.SocketPort = lRow["SocketPort"].DBToInt32(); session.ReconnectInterval = lRow["ReconnectInterval"].DBToInt32(); string cancelOnDisconn = lRow["CancelOnDisconnect"].DBToString(); try { session.CancelOnDisconnect = Convert.ToInt32(cancelOnDisconn); } catch { session.CancelOnDisconnect = -1; } //session.CancelOnDisconnect = lRow["CancelOnDisconnect"].DBToString(); session.CODTimeout = lRow["CODTimeout"].DBToInt32(); session.Host = lRow["Host"].DBToString(); session.FileStorePath = lRow["FileStorePath"].DBToString(); session.FileLogPath = lRow["FileLogPath"].DBToString(); session.DebugFileLogPath = lRow["DebugFileLogPath"].DBToString(); session.StartTime = lRow["StartTime"].DBToString(); session.EndTime = lRow["EndTime"].DBToString(); aux = lRow["UseDataDictionary"].DBToString(); if (aux.Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux)) { session.UseDataDictionary = false; } else { session.UseDataDictionary = true; } session.DataDictionary = lRow["DataDictionary"].DBToString(); session.ConnectionType = lRow["ConnectionType"].DBToString(); session.IntegrationID = lRow["IntegrationID"].DBToInt32(); session.IntegrationName = lRow["IntegrationName"].DBToString(); aux = lRow["FinancialLimit"].DBToString(); if (aux.Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux)) { session.FinancialLimit = false; } else { session.FinancialLimit = true; } aux = lRow["ParseAccount"].DBToString(); if (aux.Equals("0") || aux.ToLower().Equals("n") || string.IsNullOrEmpty(aux)) { session.ParseAccount = false; } else { session.ParseAccount = true; } // PID = PartyID // INI -- Composicao do PartyIDs da Sessao SqlCommand commPID = new SqlCommand("prc_fixsrv_sessaofix_server_party_id", _sqlConn); commPID.CommandType = System.Data.CommandType.StoredProcedure; commPID.Parameters.Add(new SqlParameter("@IdSessaoFix", session.IdSessaoFix)); SqlDataAdapter lAdapterPID = new SqlDataAdapter(commPID); DataSet lDataSetPID = new DataSet(); lAdapterPID.Fill(lDataSetPID); foreach (DataRow lRowPID in lDataSetPID.Tables[0].Rows) { PartyIDItem pid = new PartyIDItem(); pid.IdPartyID = lRowPID["IdPartyID"].DBToInt32(); pid.IdSessaoFIx = lRowPID["IdSessaoFix"].DBToInt32(); pid.PartyID = lRowPID["PartyID"].DBToString(); pid.PartyIDSource = lRowPID["PartyIDSource"].DBToString()[0]; pid.PartyRole = lRowPID["PartyRole"].DBToInt32(); session.PartyIDs.Add(pid); } // FIM -- Composicao do PartyIDs da Sessao ret.Add(session); } FecharConexao(); return(ret); }
public static OrdemInfo Fix44ExecutionReport2OrdemInfo(QuickFix.FIX44.ExecutionReport er, FixSessionItem cfg) { try { OrdemInfo order = new OrdemInfo(); string descricao = string.Empty; // order = new OrdemInfo(); order.Account = Convert.ToInt32(er.IsSetAccount() ? er.Account.getValue() : "0"); order.Exchange = cfg.Bolsa; order.ChannelID = cfg.Operador; order.ClOrdID = er.ClOrdID.ToString();//chaveClOrdId; order.OrigClOrdID = er.IsSetOrigClOrdID() ? er.OrigClOrdID.getValue() : null; order.ExecBroker = "227"; if (er.IsSetExpireDate()) { string expdate = er.ExpireDate.getValue() + "235959"; order.ExpireDate = DateTime.ParseExact(expdate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture); } else { order.ExpireDate = DateTime.MinValue; } order.MaxFloor = er.IsSetMaxFloor() ? Convert.ToDouble(er.MaxFloor.getValue()) : 0; order.MinQty = er.IsSetMinQty() ? Convert.ToDouble(er.MinQty.getValue()) : 0; order.OrderQty = Convert.ToInt32(er.IsSetOrderQty() ? er.OrderQty.getValue() : 0); order.OrdType = FixMessageUtilities.TraduzirOrdemTipo(er.OrdType.getValue()); order.Price = er.IsSetPrice() ? Convert.ToDouble(er.Price.getValue()) : 0; order.SecurityID = er.IsSetSecurityID() ? er.SecurityID.ToString() : null; order.Side = er.IsSetSide() ? (OrdemDirecaoEnum)Convert.ToInt32(er.Side.ToString()) : OrdemDirecaoEnum.NaoInformado; order.Symbol = er.IsSetSymbol() ? er.Symbol.ToString() : null; order.TimeInForce = er.IsSetTimeInForce() ? FixMessageUtilities.deTimeInForceParaOrdemValidade(er.TimeInForce) : OrdemValidadeEnum.NaoInformado; //} order.ExchangeNumberID = er.IsSetOrderID() ? er.OrderID.getValue() : null; order.OrderQtyRemmaining = Convert.ToInt32(er.IsSetLeavesQty() ? er.LeavesQty.getValue() : 0); order.CumQty = Convert.ToInt32(er.IsSetCumQty() ? er.CumQty.getValue() : 0); order.OrdStatus = FixMessageUtilities.TraduzirOrdemStatus(er.OrdStatus.getValue()); order.Memo5149 = er.IsSetField(5149) ? er.GetField(5149) : String.Empty; order.PossDupFlag = er.Header.IsSetField(Tags.PossDupFlag) ? er.Header.GetBoolean(Tags.PossDupFlag) : false; order.PossResend = er.Header.IsSetField(Tags.PossResend) ? er.Header.GetBoolean(Tags.PossResend) : false; order.CompIDBolsa = er.Header.IsSetField(Tags.SenderCompID) ? er.Header.GetString(Tags.SenderCompID) : cfg.SenderCompID; order.CompIDOMS = er.Header.IsSetField(Tags.TargetCompID) ? er.Header.GetString(Tags.TargetCompID) : cfg.TargetCompID; switch (order.OrdStatus) { case OrdemStatusEnum.NOVA: descricao = "Ordem aberta"; order.RegisterTime = DateTime.Now; break; case OrdemStatusEnum.CANCELADA: descricao = "Ordem cancelada"; break; case OrdemStatusEnum.PARCIALMENTEEXECUTADA: descricao = "Ordem com execucao parcial"; break; case OrdemStatusEnum.SUSPENSA: descricao = "Ordem suspensa"; break; case OrdemStatusEnum.EXECUTADA: descricao = "Ordem executada"; break; case OrdemStatusEnum.SUBSTITUIDA: descricao = "Ordem substituida"; break; case OrdemStatusEnum.REJEITADA: if (er.IsSetText()) { descricao = er.Text.getValue(); } break; } order.TransactTime = DateTime.Now; // Try get the msg seq number order.FixMsgSeqNum = er.Header.IsSetField(Tags.MsgSeqNum) ? er.Header.GetInt(Tags.MsgSeqNum) : 0; order.ProtectionPrice = Convert.ToDecimal(er.IsSetField(35001) ? er.GetString(35001) : "0"); // Setando informações de acompanhamento AcompanhamentoOrdemInfo acompanhamento = new AcompanhamentoOrdemInfo(); acompanhamento.NumeroControleOrdem = order.ClOrdID; acompanhamento.CodigoDoCliente = order.Account; acompanhamento.CodigoResposta = order.ExchangeNumberID; acompanhamento.CodigoTransacao = er.IsSetExecID() ? er.ExecID.getValue() : null; acompanhamento.Instrumento = order.Symbol; acompanhamento.SecurityID = order.SecurityID; acompanhamento.CanalNegociacao = order.ChannelID; acompanhamento.Direcao = order.Side; acompanhamento.QuantidadeSolicitada = order.OrderQty; acompanhamento.QuantidadeExecutada = (int)er.CumQty.getValue(); acompanhamento.QuantidadeRemanescente = (int)er.LeavesQty.getValue(); acompanhamento.QuantidadeNegociada = er.IsSetLastQty() ? (int)er.LastQty.getValue() : 0; acompanhamento.Preco = new Decimal(order.Price); acompanhamento.StatusOrdem = FixMessageUtilities.TraduzirOrdemStatus(er.OrdStatus.getValue()); acompanhamento.DataOrdemEnvio = order.TransactTime; acompanhamento.DataAtualizacao = DateTime.Now; acompanhamento.CodigoRejeicao = er.IsSetOrdRejReason() ? er.OrdRejReason.ToString() : "0"; acompanhamento.Descricao = descricao; // Try get the msg seq number acompanhamento.FixMsgSeqNum = er.Header.IsSetField(Tags.MsgSeqNum) ? er.Header.GetInt(Tags.MsgSeqNum) : 0; acompanhamento.LastPx = er.IsSetLastPx() ? (Decimal)er.LastPx.getValue() : new Decimal(order.Price); acompanhamento.TradeDate = er.IsSetTradeDate() ? er.TradeDate.getValue() : DateTime.Now.ToString("yyyyMMdd"); //BEI Fields //Added in 2012-Nov-13 by ATP acompanhamento.ExchangeOrderID = er.IsSetField(35022) ? er.GetString(35022) : String.Empty; acompanhamento.ExchangeExecID = er.IsSetField(35023) ? er.GetString(35023) : String.Empty; acompanhamento.LastPxInIssuedCurrency = Convert.ToDecimal(er.IsSetField(35024) ? er.GetString(35024) : "0"); acompanhamento.PriceInIssuedCurrency = Convert.ToDecimal(er.IsSetField(35025) ? er.GetString(35025) : "0"); acompanhamento.ExchangeSecondaryOrderID = er.IsSetField(35026) ? er.GetString(35026) : String.Empty; acompanhamento.TradeLinkID = er.IsSetField(820) ? er.GetString(820) : String.Empty; acompanhamento.OrderLinkID = er.IsSetField(5975) ? er.GetString(5975) : String.Empty; acompanhamento.ExchangeQuoteID = er.IsSetField(5001) ? er.GetString(5001) : String.Empty; acompanhamento.PossDupFlag = er.Header.IsSetField(Tags.PossDupFlag) ? er.Header.GetBoolean(Tags.PossDupFlag) : false; acompanhamento.PossResend = er.Header.IsSetField(Tags.PossResend) ? er.Header.GetBoolean(Tags.PossResend) : false; acompanhamento.CompIDBolsa = er.Header.IsSetField(Tags.SenderCompID) ? er.Header.GetString(Tags.SenderCompID) : cfg.SenderCompID; acompanhamento.CompIDOMS = er.Header.IsSetField(Tags.TargetCompID) ? er.Header.GetString(Tags.TargetCompID) : cfg.TargetCompID; if (er.IsSetNoMiscFees()) { int ocorr = er.GetInt(Tags.NoMiscFees);// noMiscFees.getValue(); for (uint i = 0; i < ocorr; i++) { EmolumentoInfo emol = new EmolumentoInfo(); Group feeGroup = er.GetGroup((int)i, Tags.NoMiscFees); emol.Valor = Convert.ToDecimal(feeGroup.IsSetField(Tags.MiscFeeAmt) ? feeGroup.GetString(Tags.MiscFeeAmt) : "0"); emol.BaseEmolumento = Convert.ToInt32(feeGroup.IsSetField(Tags.MiscFeeBasis) ? feeGroup.GetString(Tags.MiscFeeBasis) : "0"); emol.Currency = feeGroup.GetString(Tags.MiscFeeCurr); emol.Tipo = (EmolumentoTipoEnum)feeGroup.GetInt(Tags.MiscFeeType); } } // Adicionando informações de acompanhamento ao OrdemInfo order.Acompanhamentos.Clear(); order.Acompanhamentos.Add(acompanhamento); return(order); } catch (Exception ex) { logger.Error("Fix44ExecutionReport2OrdemInfo(): " + ex.Message, ex); } return(null); }