Example #1
0
        public void DataQueue_TestGetStreamable()
        {
            byte[] stream = new byte[2048];
            Motus_1_RawDataPacket packet = new Motus_1_RawDataPacket(sampleMotusPayload);
            DataQueue             queue  = new DataQueue();
            int expectedNumBytesToQueue  = ((18 + DataPacket.NumOverHeadBytes) * queue.MaxSize);

            FillQueue(queue, packet);
            int numBytesQueued = queue.GetStreamable(stream);

            Assert.AreEqual(expectedNumBytesToQueue, numBytesQueued);
            Assert.IsTrue(queue.IsEmpty());

            for (int i = 0; i < numBytesQueued;)
            {
                DataPacket rebuilt = new DataPacket();
                i += rebuilt.SerializeFromStream(stream, i);
                Assert.AreEqual(packet.Type, rebuilt.Type);
                Assert.AreEqual(packet.ExpectedLen, rebuilt.ExpectedLen);
                for (int j = 0; j < rebuilt.ExpectedLen; j++)
                {
                    Assert.AreEqual(packet.Payload[j], rebuilt.Payload[j]);
                }
            }
        }
Example #2
0
        public byte[] GetData()
        {
            byte[] data = new byte[2048];
            int    len  = 0;

            lock (_lock) { len = _queue.GetStreamable(data); }

            byte[] rtn = new byte[len];
            Buffer.BlockCopy(data, 0, rtn, 0, len);
            return(rtn);
        }
Example #3
0
        public void DataQueue_TestGetStreamableBufferOverflow()
        {
            byte[] stream = new byte[1028];
            Motus_1_RawDataPacket packet  = new Motus_1_RawDataPacket(sampleMotusPayload);
            DataQueue             queue   = new DataQueue();
            int expectedNumPacketsToQueue = (stream.Length / (18 + DataPacket.NumOverHeadBytes));
            int expectedNumBytesToQueue   = (18 + DataPacket.NumOverHeadBytes) * expectedNumPacketsToQueue;

            FillQueue(queue, packet);
            int numBytesQueued   = queue.GetStreamable(stream);
            int numPacketsQueued = queue.MaxSize - queue.Count;

            Assert.AreEqual(expectedNumBytesToQueue, numBytesQueued);
            Assert.AreEqual(expectedNumPacketsToQueue, numPacketsQueued);
        }
Example #4
0
        public void DataQueue_TestParseStreamable()
        {
            byte[] stream = new byte[2048];
            Motus_1_RawDataPacket packet = new Motus_1_RawDataPacket(sampleMotusPayload);
            DataQueue             queue  = new DataQueue();

            FillQueue(queue, packet);
            int numBytesQueued = queue.GetStreamable(stream);

            FillQueue(queue, packet);

            DataQueue queue2 = new DataQueue();

            queue2.ParseStreamable(stream, stream.Length);

            while (!queue2.IsEmpty() && !queue.IsEmpty())
            {
                DataPacket packet1 = queue.Get();
                DataPacket packet2 = queue2.Get();

                // Ensure packet1 is the same as packet
                Assert.AreEqual(packet.Type, packet1.Type);
                Assert.AreEqual(packet.ExpectedLen, packet1.ExpectedLen);
                for (int j = 0; j < packet1.ExpectedLen; j++)
                {
                    Assert.AreEqual(packet.Payload[j], packet1.Payload[j]);
                }

                // Ensure packet2 is the same as packet1
                Assert.AreEqual(packet1.Type, packet2.Type);
                Assert.AreEqual(packet1.ExpectedLen, packet2.ExpectedLen);
                for (int j = 0; j < packet2.ExpectedLen; j++)
                {
                    Assert.AreEqual(packet1.Payload[j], packet2.Payload[j]);
                }
            }
        }
Example #5
0
        private void Send(Socket handler)
        {
            try
            {
                lock (_lock)
                {
                    _numBytesToSend = _queue.GetStreamable(_dataToSend);
                }

                handler.BeginSend(_dataToSend, 0, _numBytesToSend, 0, new AsyncCallback(SendCB), handler);
            }
            catch (ArgumentNullException e0)
            {
                string msg = e0.Message + e0.StackTrace;
                LogMessage(msg);
            }
            catch (ArgumentOutOfRangeException e1)
            {
                string msg = e1.Message + e1.StackTrace;
                LogMessage(msg);
            }
            catch (SocketException e2)
            {
                string msg = e2.Message + e2.StackTrace;
                LogMessage(msg);
            }
            catch (ObjectDisposedException e3)
            {
                string msg = e3.Message + e3.StackTrace;
                LogMessage(msg);
            }
            catch (Exception e4)
            {
                string msg = e4.Message + e4.StackTrace;
                LogMessage(msg);
            }
        }