public void TestReadFlowManagement() { ReadCounter counter = new ReadCounter(); IByteBufferHolder first = Message("first"); IByteBufferHolder chunk = Message("chunk"); IByteBufferHolder last = Message("last"); var agg = new MockMessageAggregator(first, chunk, last); EmbeddedChannel embedded = new EmbeddedChannel(counter, agg); embedded.Configuration.IsAutoRead = false; Assert.False(embedded.WriteInbound(first)); Assert.False(embedded.WriteInbound(chunk)); Assert.True(embedded.WriteInbound(last)); Assert.Equal(3, counter.Value); // 2 reads issued from MockMessageAggregator // 1 read issued from EmbeddedChannel constructor IByteBufferHolder all = new DefaultByteBufferHolder(Unpooled.WrappedBuffer( (IByteBuffer)first.Content.Retain(), (IByteBuffer)chunk.Content.Retain(), (IByteBuffer)last.Content.Retain())); var output = embedded.ReadInbound <IByteBufferHolder>(); Assert.Equal(all, output); Assert.True(all.Release() && output.Release()); Assert.False(embedded.Finish()); }
public void EvalSelect(RCRunner runner, RCClosure closure, RCSymbol left, RCCube right) { RCLong args = new RCLong(0, 0); ReadCounter counter = new ReadCounter(right); ReadSpec spec = new ReadSpec(counter, left, args, 0, false, false, true, false); RCCube result = right.Read(spec, counter, true, right.Count); runner.Yield(closure, result); }
// internal RCCube _blackboard = new RCCube (new RCArray<string> ("G", "S")); internal void Clear() { // g gets updated... _g += _blackboard.Count; // blackboard cube is dumped. _blackboard = new RCCube(new RCArray <string> ("G", "E", "S")); // Uncomment this to disable the E column I think // I want it to be G or E in the blackboard, not both // _blackboard = new RCCube (new RCArray<string> ("G", "S")); // waiters keep on waiting. // But what about _counter? // Shouldn't we just reset it? _counter = new ReadCounter(); }