Ejemplo n.º 1
0
        protected override Message GetNextMessageImpl()
        {
            Message message = null;

            if (listSequenceSendable == null)
            {
                var tmp = new List <Item>();
                //因为3.5不支持协变,所以需要这个转化。
                GetChildren().ForEach(item => tmp.Add(item));
                listSequenceSendable                = new ListSequencable(ConversationID, tmp);
                listSequenceSendable.Name           = this.AbsolutePath;
                listSequenceSendable.PostCompleted += o => TransferState = TransferState.PostCompleted;
                listSequenceSendable.Errored       += o => TransferState = TransferState.Error;

                SendItemsMessage sendItemsMessage = new SendItemsMessage(tmp);
                //!!!!!!!!!注意:这里看起来很奇怪。原因是虽然添加到List中,但希望他们的Parent还是这个DirItem.
                //TODO 重构 如果让DirItem实现ListSequenceSendable呢?
                GetChildren().ForEach(item => {
                    item.Parent = this;
                    if (item is FileItem)
                    {
                        Conversation?.InternalWormHole(item);
                    }
                });
                sendItemsMessage.ParentItemID   = ID;
                sendItemsMessage.ConversationID = ConversationID;
                message = sendItemsMessage;
            }
            else
            {
                if (!createFolderMessageSent)
                {
                    FileDataMessage fm = new FileDataMessage()
                    {
                        ItemID = ID,
                        Length = 0,
                        Data   = new byte[0]
                    };
                    fm.ConversationID = ConversationID;
                    message           = fm;
                    //TODO 注意 如果这个文件夹是空的,这个会导致状态变化。只有长度为0,才能允许调用Progress。否则的话,会导致重复计算进度。
                    ((IProgressable)this).Progress(0);
                    createFolderMessageSent = true;
                }
                else
                {
                    //因为这个类监听了list的状态变化,当list状态变化时,这个类的状态也会变化。
                    message = listSequenceSendable.GetNextMessage();
                }
            }
            return(message);
        }
        //速度可以计算出来?用传送开始时间、传输的数据量,再用一个timer定时更新速度就可以了。更新总的速度,或者一个会话的速度都可以。
        //public event Action<int> SpeedChanged;
        internal protected override void OnInitRequest()
        {
            SendItemsMessage message = new SendItemsMessage(Items);

            Items.ForEach(item =>
            {
                if (item is FileItem)
                {
                    ProcessingItems.Add(item);
                }
            });
            PostMessage(message);
        }
Ejemplo n.º 3
0
        internal protected override void OnInitRequest()
        {
            SendItemsMessage message = new SendItemsMessage(Items);

            Peer.Post(message);
        }
        protected internal override void OnInitRequest()
        {
            SendItemsMessage message = new SendItemsMessage(TransferBundle.Items);

            PostMessageAsync(message);
        }