Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
 public Task WriteAsync(FABMessage message)
 {
     return(this.WriteAsync(message, FABChannelMatchers.All()));
 }