Пример #1
0
        public virtual FIXTMessage1_1 Create()
        {
            var message = new FIXTMessage1_1(fixVersion, sender, destination);

            message.Sequence = GetNextSequence();
            return(message);
        }
Пример #2
0
        private void SendMessageInternal(FIXTMessage1_1 fixMsg)
        {
            var fixString = fixMsg.ToString();

            if (debug)
            {
                string view = fixString.Replace(FIXTBuffer.EndFieldStr, "  ");
                log.Debug("Send FIX message: \n" + view);
            }
            var packet = Socket.CreatePacket();

            packet.DataOut.Write(fixString.ToCharArray());
            var end = Factory.Parallel.TickCount + (long)heartbeatDelay * 1000L;

            while (!Socket.TrySendPacket(packet))
            {
                if (IsInterrupted)
                {
                    return;
                }
                if (Factory.Parallel.TickCount > end)
                {
                    throw new ApplicationException("Timeout while sending heartbeat.");
                }
                Factory.Parallel.Yield();
            }
        }
Пример #3
0
 public void AddHistory(FIXTMessage1_1 fixMsg)
 {
     messageHistory.Add(fixMsg.Sequence, fixMsg);
     if (fixMsg.Sequence < FirstSequence)
     {
         firstSequence = fixMsg.Sequence;
     }
     lastSequence = fixMsg.Sequence;
 }
Пример #4
0
        public virtual FIXTMessage1_1 Create(int previousSequence)
        {
            if (previousSequence > nextSequence)
            {
                throw new InvalidOperationException("Cannot create new fix message with sequence in the future.");
            }
            var message = new FIXTMessage1_1(fixVersion, sender, destination);

            message.Sequence = previousSequence;
            return(message);
        }
Пример #5
0
        protected void ResendMessageProtected(FIXTMessage1_1 fixMessage)
        {
            if (isConnectionLost)
            {
                return;
            }
            var writePacket = fixSocket.MessageFactory.Create();
            var message     = fixMessage.ToString();

            writePacket.DataOut.Write(message.ToCharArray());
            writePacket.SendUtcTime = TimeStamp.UtcNow.Internal;
            if (debug)
            {
                log.Debug("Resending simulated FIX Message: " + fixMessage);
            }
            SendMessageInternal(writePacket);
        }
Пример #6
0
 public bool TryGetHistory(int sequence, out FIXTMessage1_1 result)
 {
     return(messageHistory.TryGetValue(sequence, out result));
 }
Пример #7
0
 public void SendMessage(FIXTMessage1_1 fixMsg)
 {
     fixFactory.AddHistory(fixMsg);
     SendMessageInternal(fixMsg);
 }
Пример #8
0
        public void SendMessage(FIXTMessage1_1 fixMessage)
        {
            FixFactory.AddHistory(fixMessage);
            if (isConnectionLost)
            {
                RemoveTickSync(fixMessage);
                return;
            }
            var simulator = simulators[SimulatorType.SendDisconnect];

            if (simulator.CheckSequence(fixMessage.Sequence))
            {
                if (debug)
                {
                    log.Debug("Ignoring message: " + fixMessage);
                }
                ProviderSimulator.SwitchBrokerState("disconnect", false);
                isConnectionLost = true;
                return;
            }
            if (simulateSendFailed && IsRecovered && random.Next(50) == 4)
            {
                if (debug)
                {
                    log.Debug("Skipping send of sequence # " + fixMessage.Sequence + " to simulate lost message. " + fixMessage);
                }
                if (fixMessage.Type == "1")
                {
                    isHeartbeatPending = TimeStamp.MaxValue;
                }
                if (debug)
                {
                    log.Debug("Message type is: " + fixMessage.Type);
                }
                return;
            }
            var writePacket = fixSocket.MessageFactory.Create();
            var message     = fixMessage.ToString();

            writePacket.DataOut.Write(message.ToCharArray());
            writePacket.SendUtcTime = TimeStamp.UtcNow.Internal;
            if (debug)
            {
                log.Debug("Simulating FIX Message: " + fixMessage);
            }
            try
            {
                fixPacketQueue.Enqueue(writePacket, writePacket.SendUtcTime);
            }
            catch (QueueException ex)
            {
                if (ex.EntryType == EventType.Terminate)
                {
                    log.Warn("fix packet queue returned queue exception " + ex.EntryType + ". Dropping message due to dispose.");
                    Dispose();
                }
                else
                {
                    throw;
                }
            }

            simulator = simulators[SimulatorType.SendServerOffline];
            if (IsRecovered && FixFactory != null && simulator.CheckSequence(fixMessage.Sequence))
            {
                if (debug)
                {
                    log.Debug("Skipping message: " + fixMessage);
                }
                ProviderSimulator.SwitchBrokerState("offline", false);
                ProviderSimulator.SetOrderServerOffline();
                if (requestSessionStatus)
                {
                    SendSessionStatus("3");
                }
                else
                {
                    log.Info("RequestSessionStatus is false so not sending order server offline message.");
                }
            }
        }
Пример #9
0
 protected abstract void RemoveTickSync(FIXTMessage1_1 textMessage);
Пример #10
0
 protected abstract void ResendMessage(FIXTMessage1_1 textMessage);
Пример #11
0
 public void AddHistory(FIXTMessage1_1 fixMsg)
 {
     messageHistory.Add(fixMsg.Sequence, fixMsg);
     lastSequence = fixMsg.Sequence;
 }