private void OnFileBlockDataPacket(Peer peer, byte[] data)
        {
            FileBlockDataPacket d = new FileBlockDataPacket();
            d.Decode(sbuff_[peer.EndPoint.ToString()].RawData, 0, sbuff_[peer.EndPoint.ToString()].Length);

            msgbuff[peer.EndPoint.ToString()].Append(d.data3k, d.len);

            FileBlockBeginPacket begin2 = new FileBlockBeginPacket();
            master.Send(peer, begin2.Encode());
        }
        private void OnFileBlockBeginPacket(Peer peer, byte[] data)
        {
            FileBlockBeginPacket begin = new FileBlockBeginPacket();
            master.Send(peer, begin.Encode());

            var taskid = subTask_[peer.EndPoint.ToString()].Id;
            Action act = () =>
            {
                this.Blocks[taskid].Status = Controls.Block.BlockStatus.Downloading;
            };
            GlobalMessageCenter.Instance.Send("MainWindow.UIThreadInvoke", act);
        }
Exemple #3
0
 public void OnMessage(byte[] msg)
 {
     PacketTest t = new PacketTest(msg, 0);
     switch (t.PacketId)
     {
         case 1:
             StringPacket packet = new StringPacket();
             packet.Decode(msg, 0, msg.Length);
             Console.WriteLine("OnMessage - " + packet.data);
             break;
         case 10001:
             FileBlockBeginPacket begin = new FileBlockBeginPacket();
             Console.WriteLine("OnMessage - FileBlockBeginPacket");
             break;
         case 10002:
             //Console.WriteLine("OnMessage - FileBlockDataPacket");
             break;
         case 10003:
             Console.WriteLine("OnMessage - FileBlockEndPacket");
             break;
     }
 }
        void Download()
        {
            if (task_ != null)
            {
                LogManager.Instalce.DownloadTaskBeginLog(task_.RemotePath, task_.from, task_.to);
                byte[] data = HttpDownloadRange.Download(task_.RemotePath, task_.from, task_.to);
                LogManager.Instalce.DownloadTaskEndLog(task_.RemotePath, task_.from, task_.to);

                LogManager.Instalce.TransferBegin(task_.RemotePath, task_.from, task_.to);
                FileBlockBeginPacket begin = new FileBlockBeginPacket();
                autoResetEvent_.WaitOne();
                Peer.Send(begin.Encode());
                byte[] b3k = new byte[1024 * 3];
                int c = (data.Length + 3071) / 3072;
                for (int i = 0; i < c - 1; ++i)
                {
                    Array.Copy(data, 1024 * 3 * i, b3k, 0, 1024 * 3);
                    FileBlockDataPacket d = new FileBlockDataPacket(b3k);
                    autoResetEvent_.WaitOne();
                    Peer.Send(d.Encode());
                }
                int lastBlockSize = data.Length % 3072;
                if (lastBlockSize == 0)
                    lastBlockSize = 3072;
                {
                    byte[] bxk = new byte[lastBlockSize];
                    Array.Copy(data, 1024 * 3 * (c - 1), bxk, 0, lastBlockSize);
                    FileBlockDataPacket d = new FileBlockDataPacket(bxk);
                    autoResetEvent_.WaitOne();
                    Peer.Send(d.Encode());
                }
                FileBlockEndPacket end = new FileBlockEndPacket();
                autoResetEvent_.WaitOne();
                Peer.Send(end.Encode());
                LogManager.Instalce.TransferEnd(task_.RemotePath, task_.from, task_.to);
            }
        }
Exemple #5
0
        void Download()
        {
            if (task_ != null)
            {
                Console.WriteLine("Download begin task id = " + task_.Id.ToString());
                byte[] data = HttpDownloadRange.Download(task_.RemotePath, task_.from, task_.to);
                Console.WriteLine("Download end");

                Console.WriteLine("trans begin");
                FileBlockBeginPacket begin = new FileBlockBeginPacket();
                autoResetEvent_.WaitOne();
                Program.slave.Send(begin.Encode());
                byte[] b3k = new byte[1024 * 3];
                int c = (data.Length + 3071) / 3072;
                for (int i = 0; i < c - 1; ++i)
                {
                    Array.Copy(data, 1024 * 3 * i, b3k, 0, 1024 * 3);
                    FileBlockDataPacket d = new FileBlockDataPacket(b3k);
                    autoResetEvent_.WaitOne();
                    Program.slave.Send(d.Encode());
                }
                int lastBlockSize = data.Length % 3072;
                if (lastBlockSize == 0)
                    lastBlockSize = 3072;
                {
                    byte[] bxk = new byte[lastBlockSize];
                    Array.Copy(data, 1024 * 3 * (c - 1), bxk, 0, lastBlockSize);
                    FileBlockDataPacket d = new FileBlockDataPacket(bxk);
                    autoResetEvent_.WaitOne();
                    Program.slave.Send(d.Encode());
                }
                FileBlockEndPacket end = new FileBlockEndPacket();
                autoResetEvent_.WaitOne();
                Program.slave.Send(end.Encode());
                Console.WriteLine("trans end");
            }
        }
Exemple #6
0
        static void Main(string[] args)
        {
            SlavePeer slave = new SlavePeer();
            slave.Start(IPAddress.Any, 48361, new SlavePeerListener());

            MasterPeer master = new MasterPeer();
            master.Start(IPAddress.Any, 48360, new MasterPeerListener());
            var peer = new Peer() { EndPoint = new IPEndPoint(IPAddress.Parse("10.20.208.27"), 48361) };
            master.Connect(peer);

            Console.ReadKey();
            StringPacket sp = new StringPacket("hehe");
            master.Send(peer, sp.Encode());

            Console.ReadKey();
            // 传输3M的数据
            FileBlockBeginPacket begin = new FileBlockBeginPacket();
            master.Send(peer, begin.Encode());
            byte[] b3k = new byte[1024 * 3];
            for (int i = 0; i < 1024; ++i)
            {
                FileBlockDataPacket d = new FileBlockDataPacket(b3k);
                master.Send(peer, d.Encode());
            }
            FileBlockEndPacket end = new FileBlockEndPacket();
            master.Send(peer, end.Encode());

            Console.ReadKey();
        }
Exemple #7
0
 public void OnMessage(Peer peer, byte[] msg)
 {
     Array.Copy(msg, 0,
         sbuff_[peer.EndPoint.ToString()],
         sbufflen_[peer.EndPoint.ToString()], msg.Length);
     sbufflen_[peer.EndPoint.ToString()] += msg.Length;
     PacketTest t = new PacketTest(sbuff_[peer.EndPoint.ToString()], 0);
     if (t.PacketLength > sbufflen_[peer.EndPoint.ToString()])
     {
         // string s = "拆包"; ok
     }
     else if (t.PacketLength < sbufflen_[peer.EndPoint.ToString()])
     {
         string s = "粘包";
     }
     else if (t.PacketLength == sbufflen_[peer.EndPoint.ToString()])
     {
         switch (t.PacketId)
         {
             case 1:
                 StringPacket packet = new StringPacket();
                 packet.Decode(sbuff_[peer.EndPoint.ToString()], 0, sbufflen_[peer.EndPoint.ToString()]);
                 Console.WriteLine("OnMessage - " + packet.data);
                 break;
             case 10001:
                 Console.WriteLine("OnMessage - FileBlockBeginPacket");
                 FileBlockBeginPacket begin = new FileBlockBeginPacket();
                 Program.master.Send(peer, begin.Encode());
                 break;
             case 10002:
                 FileBlockDataPacket d = new FileBlockDataPacket();
                 d.Decode(sbuff_[peer.EndPoint.ToString()], 0, sbufflen_[peer.EndPoint.ToString()]);
                 Array.Copy(d.data3k, 0, buff_[peer.EndPoint.ToString()], i_[peer.EndPoint.ToString()] * 1024 * 3, d.data3k.Length);
                 i_[peer.EndPoint.ToString()]++;
                 FileBlockBeginPacket begin2 = new FileBlockBeginPacket();
                 Program.master.Send(peer, begin2.Encode());
                 break;
             case 10003:
                 i_[peer.EndPoint.ToString()] = 0;
                 Console.WriteLine("OnMessage - FileBlockEndPacket");
                 subTask_[peer.EndPoint.ToString()].data = buff_[peer.EndPoint.ToString()];
                 var len = subTask_[peer.EndPoint.ToString()].to - subTask_[peer.EndPoint.ToString()].from + 1;
                 if (len != Program.task.BlockSize)
                 {
                     subTask_[peer.EndPoint.ToString()].data = new byte[len];
                     Array.Copy(buff_[peer.EndPoint.ToString()], 0, subTask_[peer.EndPoint.ToString()].data, 0, len);
                 }
                 if (!Program.task.UpdateTaskState(subTask_[peer.EndPoint.ToString()], 2))
                 {
                     subTask_[peer.EndPoint.ToString()] = Program.task.GetSubTask();
                     if (subTask_[peer.EndPoint.ToString()] != null)
                     {
                         FileBlockTask f = new FileBlockTask(subTask_[peer.EndPoint.ToString()]);
                         Program.master.Send(peer, f.Encode());
                     }
                 }
                 break;
         }
         sbufflen_[peer.EndPoint.ToString()] = 0;
     }
 }