Beispiel #1
0
        public void TestConsolidate()
        {
            // Ensure result wilbe distributed across multiple packets
            TransportPacket.ReservedInitialBytes = 0;

            TransportPacket packet = new TransportPacket(new byte[] { 9 });
            packet.Prepend(new byte[] { 4, 5, 6, 7, 8 });
            packet.Prepend(new byte[] { 0, 1, 2, 3 });
            Assert.IsTrue(((IList<ArraySegment<byte>>)packet).Count > 1);

            packet.Consolidate();
            Assert.AreEqual(1, ((IList<ArraySegment<byte>>)packet).Count);
            Assert.AreEqual(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, packet.ToArray());
            CheckDisposed(packet);
            CheckForUndisposedSegments();
        }
Beispiel #2
0
 public void TestDisposal()
 {
     TransportPacket packet = new TransportPacket(10);
     packet.Dispose();
     try
     {
         packet.Grow(20);
         Assert.Fail("should have thrown ObjectDisposedException");
     } catch(ObjectDisposedException) { /* expected */ }
     try
     {
         packet.RemoveBytes(0,2);
         Assert.Fail("should have thrown ObjectDisposedException");
     } catch(ObjectDisposedException) { /* expected */ }
     try
     {
         packet.ByteAt(0);
         Assert.Fail("should have thrown ObjectDisposedException");
     } catch(ObjectDisposedException) { /* expected */ }
     try
     {
         packet.Consolidate();
         Assert.Fail("should have thrown ObjectDisposedException");
     } catch(ObjectDisposedException) { /* expected */ }
     try
     {
         packet.Prepend(new byte[0]);
         Assert.Fail("should have thrown ObjectDisposedException");
     }
     catch (ObjectDisposedException) { /* expected */ }
     try
     {
         packet.Append(new byte[0]);
         Assert.Fail("should have thrown ObjectDisposedException");
     }
     catch (ObjectDisposedException) { /* expected */ }
     try
     {
         Console.WriteLine(packet.Length);
         Assert.Fail("should have thrown ObjectDisposedException");
     }
     catch (ObjectDisposedException) { /* expected */ }
 }
Beispiel #3
0
 /// <summary>
 /// Send a packet on the UDP socket.
 /// </summary>
 /// <exception cref="SocketException">thrown if there is a socket error</exception>
 public int Send(TransportPacket packet, EndPoint remote)
 {
     // Is our throwing a SocketException considered out of line?
     if (!Active) { throw new SocketException((int)SocketError.Shutdown); }
     // Sadly SentTo does not support being provided a IList<ArraySegment<byte>>
     packet.Consolidate();   // try to reduce to a single segment
     IList<ArraySegment<byte>> bytes = packet;
     if (bytes.Count == 1)
     {
         return udpClient.Client.SendTo(bytes[0].Array, bytes[0].Offset, bytes[0].Count,
             SocketFlags.None, remote);
     }
     // hopefully this won't happen often; we could maintain our own bytearray pool
     return udpClient.Client.SendTo(packet.ToArray(), SocketFlags.None, remote);
 }