Esempio n. 1
0
        /// <summary>
        ///     Handling replies to a data push, a historical data request, or an available data request
        /// </summary>
        private void HistoricalDataSocketReceiveReady(object sender, NetMQSocketEventArgs e)
        {
            lock (historicalDataSocketLock)
            {
                if (historicalDataSocket == null)
                {
                    return;
                }
                // 1st message part: what kind of stuff we're receiving
                DataRequestMessageType type = (DataRequestMessageType)BitConverter.ToInt16(historicalDataSocket.ReceiveFrameBytes(), 0);
                switch (type)
                {
                case DataRequestMessageType.Error:
                    HandleErrorReply();
                    break;

                case DataRequestMessageType.AvailableDataReply:
                    HandleAvailabledataReply();
                    break;

                case DataRequestMessageType.HistReply:
                    HandleHistoricalDataRequestReply();
                    break;

                case DataRequestMessageType.HistPushReply:
                    HandleDataPushReply();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        ///     Process replies on the request socket.
        ///     Heartbeats, errors, and subscribing to real time data streams.
        /// </summary>
        private void RealTimeRequestSocketReceiveReady(object sender, NetMQSocketEventArgs e)
        {
            lock (realTimeRequestSocketLock)
            {
                string reply = realTimeRequestSocket?.ReceiveFrameString();

                if (reply == null)
                {
                    return;
                }

                DataRequestMessageType mesageTye = (DataRequestMessageType)BitConverter.ToInt16(realTimeRequestSocket.ReceiveFrameBytes(), 0);
                RealTimeDataRequest    request;
                switch (mesageTye)
                {
                case DataRequestMessageType.Pong:
                    lastHeartBeat = DateTime.Now;
                    break;

                case DataRequestMessageType.Error:

                    string error   = realTimeRequestSocket.ReceiveFrameString();
                    byte[] buffer1 = realTimeRequestSocket.ReceiveFrameBytes();

                    using (MemoryStream ms = new MemoryStream(buffer1))
                    {
                        request = MyUtils.ProtoBufDeserialize <RealTimeDataRequest>(ms);
                    }
                    // Error event
                    RaiseEvent(Error, this,
                               new ErrorArgs(-1, "Real time data request error: " + error, request.RequestID));
                    break;

                case DataRequestMessageType.Success:

                    byte[] buffer = realTimeRequestSocket.ReceiveFrameBytes();
                    using (MemoryStream ms = new MemoryStream(buffer))
                    {
                        request = MyUtils.ProtoBufDeserialize <RealTimeDataRequest>(ms);
                    }

                    lock (realTimeDataStreamsLock)
                    {
                        RealTimeDataStreams.Add(request);
                    }

                    realTimeDataSocket.Subscribe(BitConverter.GetBytes(request.Instrument.ID));
                    break;

                case DataRequestMessageType.RTDCanceled:

                    string symbol = realTimeRequestSocket.ReceiveFrameString();

                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
Esempio n. 3
0
        private bool CreateRealTimeRequestSocket()
        {
            realTimeRequestSocket = new DealerSocket(realTimeRequestConnectionString);
            realTimeRequestSocket.Options.Identity = Encoding.UTF8.GetBytes(name);
            // Start off by sending a ping to make sure everything is regular
            byte[] reply = new byte[] { };
            try
            {
                realTimeRequestSocket.SendMoreFrame(string.Empty)
                .SendFrame(BitConverter.GetBytes((byte)DataRequestMessageType.Ping));

                if (realTimeRequestSocket.TryReceiveFrameBytes(TimeSpan.FromSeconds(1), out reply))
                {
                    realTimeRequestSocket.TryReceiveFrameBytes(TimeSpan.FromMilliseconds(50), out reply);
                }
            }
            catch
            {
                Disconnect();
            }

            if (reply?.Length > 0)
            {
                DataRequestMessageType type = (DataRequestMessageType)BitConverter.ToInt16(reply, 0);

                if (type != DataRequestMessageType.Pong)
                {
                    try
                    {
                        realTimeRequestSocket.Disconnect(realTimeRequestConnectionString);
                    }
                    finally
                    {
                        realTimeRequestSocket.Close();
                        realTimeRequestSocket = null;
                    }

                    RaiseEvent(Error, this, new ErrorArgs(-1, "Could not connect to server."));

                    return(true);
                }
            }
            else
            {
                RaiseEvent(Error, this, new ErrorArgs(-1, "Could not connect to server."));
            }

            realTimeRequestSocket.ReceiveReady += RealTimeRequestSocketReceiveReady;
            return(false);
        }
Esempio n. 4
0
        /// <summary>
        ///     Called on a reply to a data push
        /// </summary>
        private void HandleDataPushReply()
        {
            DataRequestMessageType result = (DataRequestMessageType)BitConverter.ToInt16(historicalDataSocket.ReceiveFrameBytes(), 0);

            switch (result)
            {
            case DataRequestMessageType.Success:
                break;

            case DataRequestMessageType.Error:
                // Receive the error
                string error = historicalDataSocket.ReceiveFrameString();

                RaiseEvent(Error, this, new ErrorArgs(-1, "Data push error: " + error));
                break;
            }
        }