コード例 #1
0
        public void TestBufferOverflow()
        {
            var buf = new ByteBuffer(4096);
            var src = new List <RejectResponse>();

            for (var i = 0; i < 90; i++)
            {
                var msg = new RejectResponse
                {
                    Time              = 123231001 + (uint)i,
                    RequestId         = "201801231418190",
                    ErrorCodeInternal = (short)(2 + i)
                };
                src.Add(msg);
                MakeRequestResponse(msg, i + 11, buf);
            }

            var parser = new MessageParser();
            var resps  = parser.ParseResponse(buf);

            Assert.AreEqual(src.Count, resps.Count);
            for (var i = 0; i < src.Count; i++)
            {
                Assert.AreEqual(src[i].Time, ((RejectResponse)resps[i]).Time);
                Assert.AreEqual(src[i].RequestId, ((RejectResponse)resps[i]).RequestId);
                Assert.AreEqual(src[i].ErrorCodeInternal, ((RejectResponse)resps[i]).ErrorCodeInternal);
            }
        }
コード例 #2
0
ファイル: MessageParser.cs プロジェクト: Qurrex/matchingui
        private BaseResponse ParseRawData(ByteBuffer buf)
        {
            MessageType msgType;

            try
            {
                msgType = (MessageType)lastHeader.msgId;
            }
            catch
            {
                return(null);
            }

            BaseResponse resp = null;

            if (msgType == MessageType.RejectResponse)
            {
                resp = RejectResponse.ReadFromBuffer(lastHeader, buf, offset);
            }

            else if (msgType == MessageType.NewOrderReport)
            {
                resp = OrderResponse.ReadFromBuffer(lastHeader, buf, offset);
            }

            else if (msgType == MessageType.CancelReport)
            {
                resp = CancelOrderResponse.ReadFromBuffer(lastHeader, buf, offset);
            }

            else if (msgType == MessageType.ExecutionReport)
            {
                resp = ExecutionReport.ReadFromBuffer(lastHeader, buf, offset);
            }

            else if (msgType == MessageType.MassCancelReport)
            {
                resp = MassCancelResponse.ReadFromBuffer(lastHeader, buf, offset);
            }

            if (resp != null)
            {
                if (!messagesParsedByType.TryGetValue(resp.GetType(), out var count))
                {
                    messagesParsedByType.Add(resp.GetType(), 1);
                }
                else
                {
                    messagesParsedByType[resp.GetType()] = count + 1;
                }
            }

            return(resp);
        }
コード例 #3
0
        private void MakeRequestResponse(RejectResponse msg, int seqid, ByteBuffer buf)
        {
            var header = new MessageHeader
            {
                msgId   = (int)MessageType.RejectResponse,
                msgSize = (ushort)RejectResponse.StructSize,
                msgSeq  = seqid
            };

            header.AppendToBuffer(buf);
            buf.AppendUint64(msg.Time);
            buf.AppendFixedString(msg.RequestId, Encoding.ASCII, 16);
            buf.AppendInt16(msg.ErrorCodeInternal);
        }
コード例 #4
0
        public void TestOneMessage()
        {
            var msg = new RejectResponse
            {
                Time              = 123231001,
                RequestId         = "201801231418190",
                ErrorCodeInternal = 2
            };
            var buf = new ByteBuffer(128);

            MakeRequestResponse(msg, 707, buf);

            var parser = new MessageParser();
            var resps  = parser.ParseResponse(buf);

            Assert.AreEqual(1, resps.Count);
            Assert.AreEqual(msg.Time, ((RejectResponse)resps[0]).Time);
            Assert.AreEqual(msg.RequestId, ((RejectResponse)resps[0]).RequestId);
            Assert.AreEqual(msg.ErrorCodeInternal, ((RejectResponse)resps[0]).ErrorCodeInternal);
        }