public void TestMultiplePacket() { var codec = new PacketCodec(); var a = new ConnectPacket(); var b = new DisconnectPacket(); var stream = new MemoryStream(); var writer = new BinaryWriter(stream); var data = ByteJoin.Combine(codec.Encode(a), codec.Encode(b)); var reader = new BinaryReader(new MemoryStream(data)); var iter = new PacketEnumerator(reader); // 1st packet { Assert.True(iter.MoveNext()); ConnectPacket p; Assert.True(iter.GetCurrent(out p)); Assert.Equal(a, p); } // 2nd packet { Assert.True(iter.MoveNext()); DisconnectPacket p; Assert.True(iter.GetCurrent(out p)); Assert.Equal(b, p); } // end of stream { Assert.False(iter.MoveNext()); } }
public void TestEmpty() { var reader = new BinaryReader(new MemoryStream(new byte[] { })); var iter = new PacketEnumerator(reader); Assert.False(iter.MoveNext()); }
protected virtual IEnumerable <PacketInterval> NonEmptyExecute() { // this is possibly a deferred execution enumerable // You should record the state of the query parameters // and check the match only against the recorded state. // // avoid the following mistake of user code: // // var intervals = query.Resolution(0).Execute(); // query.Resolution(1); // foreach(var ival in interval) { ... } var qp = _qp.Clone() as PreciseQueryParams; var packets = PacketEnumerator.Create(_ctx); int start = -1; int end = -1; foreach (var pack in packets.Where(qp.Matches)) { if (start == -1) { start = pack.PacketIdx; end = start + 1; } else if (pack.PacketIdx == end) { // the current matching packet // has extended our interval end++; } else { // ok, done for now, grab preceding interval // and create a new one. var ival = new PacketInterval(_ctx.TileIdx, start, end); start = pack.PacketIdx; end = start + 1; yield return(ival); } } // now grab the last interval that could not be grabbed // due to the end of the enumeration. if (start != -1) { yield return(new PacketInterval(_ctx.TileIdx, start, end)); } }
public void TestSinglePacket() { var codec = new PacketCodec(); var a = new ConnectPacket(); var stream = new MemoryStream(); var writer = new BinaryWriter(stream); var data = codec.Encode(a); var reader = new BinaryReader(new MemoryStream(data)); var iter = new PacketEnumerator(reader); Assert.True(iter.MoveNext()); Assert.Equal((short)a.Type, iter.CurrentType); ConnectPacket p; Assert.True(iter.GetCurrent(out p)); Assert.Equal(a, p); }