コード例 #1
0
        public static RealtimeStatus Deserialize(byte[] bytes)
        {
            if (bytes == null || bytes.Length < statusSize)
            {
                return(null);
            }

            byte[] b1 = bytes.Take(statusSize).ToArray();
            RealtimeStatusWithoutSwitches status = BigEndianStructHelper <RealtimeStatusWithoutSwitches> .BytesToStruct(b1, MsgConsts.MsgEncoding);

            if (status.NoSwitch > 0 && status.NoSwitch * switchSize + switchSize <= bytes.Length)
            {
                SecuritySwitch[] switches = new SecuritySwitch[status.NoSwitch];


                for (int i = 0; i < status.NoSwitch; i++)
                {
                    int            offset = statusSize + switchSize * i;
                    byte[]         b2     = bytes.Skip(offset).Take(switchSize).ToArray();
                    SecuritySwitch s      = BigEndianStructHelper <SecuritySwitch> .BytesToStruct(b2, MsgConsts.MsgEncoding);

                    switches[i] = s;
                }
                RealtimeStatus rtn = new RealtimeStatus()
                {
                    Status   = status,
                    Switches = switches
                };
                return(rtn);
            }
            else
            {
                return(null);
            }
        }
コード例 #2
0
        /// <summary>
        /// 处理行情数据
        /// </summary>
        /// <param name="msg"></param>
        /// TODO:考虑把收到的数据包加入队列异步处理
        private void ProcessMessage(MessagePack msg)
        {
            DateTime    now        = DateTime.Now;
            IMarketData marketData = null;

            if (msg.Header.Type == (uint)MsgType.ChannelHeartbeat)
            {
                ChannelHeartbeat heartbeat = ChannelHeartbeat.Deserialize(msg.BodyData);
                logMarketData <ChannelHeartbeat>(heartbeat);
            }
            else if (msg.Header.Type == (uint)MsgType.RealtimeStatus)
            {
                marketData = RealtimeStatus.Deserialize(msg.BodyData);
                logMarketData <RealtimeStatus>(marketData as RealtimeStatus);
            }
            else if (msg.Header.Type == (uint)MsgType.QuotationSnap)
            {
                marketData = QuotSnap300111.Deserialize(msg.BodyData);
                logMarketData <QuotSnap300111>(marketData as QuotSnap300111);
            }
            else if (msg.Header.Type == (uint)MsgType.IndexQuotationSnap)
            {
                marketData = QuotSnap309011.Deserialize(msg.BodyData);
                logMarketData <QuotSnap309011>(marketData as QuotSnap309011);
            }
            else if (msg.Header.Type == (uint)MsgType.Order)
            {
                marketData = Order300192.Deserialize(msg.BodyData);
                logMarketData <Order300192>((Order300192)marketData);
            }
            if (marketData != null)
            {
                logMarketData(marketData);
                RaiseEvent(marketData, now);
            }
            if (this.msgPackRecorder != null)
            {
                this.msgPackRecorder.Record(new MessagePackEx(msg, now));
            }
        }
コード例 #3
0
        public static RealtimeStatus Deserialize(byte[] bytes)
        {
            if (bytes == null || bytes.Length < statusSize)
                return null;

            byte[] b1 = bytes.Take(statusSize).ToArray();
            RealtimeStatusWithoutSwitches status = BigEndianStructHelper<RealtimeStatusWithoutSwitches>.BytesToStruct(b1, MsgConsts.MsgEncoding);

            if (status.NoSwitch > 0 && status.NoSwitch * switchSize + switchSize <= bytes.Length)
            {
                SecuritySwitch[] switches = new SecuritySwitch[status.NoSwitch];

                for (int i = 0; i < status.NoSwitch; i++)
                {
                    int offset = statusSize + switchSize * i;
                    byte[] b2 = bytes.Skip(offset).Take(switchSize).ToArray();
                    SecuritySwitch s = BigEndianStructHelper<SecuritySwitch>.BytesToStruct(b2, MsgConsts.MsgEncoding);
                    switches[i] = s;
                }
                RealtimeStatus rtn = new RealtimeStatus()
                {
                    Status = status,
                    Switches = switches
                };
                return rtn;
            }
            else
            {
                return null;
            }
        }