public Task WriteAsync(FABMessage message, IFABChannelMatcher matcher) { Contract.Requires(message != null); Contract.Requires(matcher != null); var futures = new Dictionary <IFABChannel, Task>(); foreach (FABChannel c in this.nonServerChannels.Values) { if (matcher.Matches(c)) { futures.Add(c, c.WriteAsync(SafeDuplicate(message))); } } ReferenceCountUtil.Release(message); return(new FABChannelGroupCompletionSource(this, futures /*, this.executor*/).Task); }
static object SafeDuplicate(FABMessage message) { //AbstractByteBuffer buffer = new AbstractByteBuffer(message.DataLength); var buffer = message.Data as IByteBuffer; if (buffer != null) { return(buffer.Duplicate().Retain()); } var byteBufferHolder = message.Data as IByteBufferHolder; if (byteBufferHolder != null) { return(byteBufferHolder.Duplicate().Retain()); } return(ReferenceCountUtil.Retain(message)); }
public Task WriteAsync(FABMessage message) { return(this.WriteAsync(message, FABChannelMatchers.All())); }