⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadsharecontent.cs

📁 破解的飞信源代码
💻 CS
📖 第 1 页 / 共 2 页
字号:
namespace Imps.Client.Core
{
    using Imps.Base.Sipc;
    using Imps.Client;
    using Imps.Client.Base;
    using Imps.Client.Core.P2P.FileTransportor;
    using Imps.Client.Core.P2P.ICE;
    using Imps.Client.Utils;
    using Imps.Utils;
    using System;
    using System.IO;
    using System.Net;
    using System.Threading;

    public class DownLoadShareContent : ShareContent
    {
        private Contact _from;

        public DownLoadShareContent(Dialog dialog, Contact from, string id, ShareContent.OtherSideOption option) : base(new Guid(id), null, dialog.Owner)
        {
            base.CurrentDialog = dialog;
            this.From = from;
            base.OtherSideSharedContentOption = option;
            base.Transmittype = ShareContentTransmitType.Relay;
        }

        public DownLoadShareContent(Dialog dialog, Contact from, string remoteUri, string fileName, int size, ShareContentTransmitType transmittype) : base(null, dialog.Owner)
        {
            base.CurrentDialog = dialog;
            this._from = from;
            base.DownLoadUrl = remoteUri;
            base.Transmittype = transmittype;
            base.FileName = fileName;
            base.FileSize = size;
            base.FilePath = Path.Combine("", base.FileName);
        }

        public DownLoadShareContent(Dialog dialog, Contact from, string id, P2PSessionFinder finder, AllEndPoints _myEndPoints, ShareContent.OtherSideOption option, Peer remotePeer) : base(new Guid(id), null, dialog.Owner)
        {
            base.CurrentDialog = dialog;
            this.From = from;
            base.P2pFinder = finder;
            base.MyEndPoints = _myEndPoints;
            base.OtherSideSharedContentOption = option;
            base.Transmittype = ShareContentTransmitType.P2P;
            base.RemotePeer = remotePeer;
            ThreadPool.QueueUserWorkItem(new WaitCallback(this.AsyncFindP2PSession));
        }

        private void AsyncFindP2PSession(object context)
        {
            base.PunchingResult = base.P2pFinder.SendPunchingRequests(base.OtherSideSharedContentOption);
            bool flag = ShareContentType.TCP == (Configuration.FixedClientSetting.ShareContentType & ShareContentType.TCP);
            if ((base.TcpP2PSocket != null) && flag)
            {
                base.PunchingResult = new TcpConnectingResult(base.P2pFinder.LocalPeer, base.P2pFinder.RemotePeer, base.TcpP2PSocket);
            }
            base.P2pTransport = AbstractFileTransportor.CreateReceiver(base.PunchingResult, base.TransportingFile);
        }

        internal void AsyncSendAcceptInfo()
        {
            SipRequest msg = base.CurrentDialog.InnerCreateSipRequest("IN", base.CurrentDialog.CallId, base.CurrentDialog.NextCSeq);
            msg.Message.AddHeader(new SipcToHeader(base.CurrentDialog.To));
            StringWriter tw = new StringWriter();
            XmlHelper.CreateXmlWriterForSipMessage(tw, null, delegate (XmlWriter writer, object context) {
                writer.WriteAttributeString("action", "accept");
                writer.WriteStartElement("file");
                writer.WriteAttributeString("url", base.DownLoadUrl);
                if (((base.OtherSideSharedContentOption != null) && (base.OtherSideSharedContentOption.SupportP2PV2 || base.OtherSideSharedContentOption.SupportRelayV2)) && ((base.Transmittype == ShareContentTransmitType.P2P) || (base.Transmittype == ShareContentTransmitType.Relay)))
                {
                    writer.WriteAttributeString("id", base.Id);
                    if (base.LastTimeCompleteSize != 0)
                    {
                        writer.WriteAttributeString("completesize", base.LastTimeCompleteSize.ToString());
                    }
                }
                writer.WriteEndElement();
            }, "share-content");
            msg.FinalResponseReceived += new EventHandler<SipResponseReceivedEventArgs>(this, (IntPtr) this.<AsyncSendAcceptInfo>b__1);
            msg.SendMessageFailed += new EventHandler<FailedEventArgs>(this, (IntPtr) this.<AsyncSendAcceptInfo>b__2);
            msg.WaitResponseTimeout += delegate {
                ClientLogger.WriteGeneral("Download File " + base.FilePath + " Error:", "AsyncSendAcceptInfo Message WaitResponseTimeout");
                this.CancelShareContent();
            };
            msg.Message.Body = tw.ToString();
            base.SendSipMessage(msg);
        }

        internal override void AsyncStartP2P()
        {
            base.TransportingFile = new TransportingFile(base.FilePath, base.FileSize, base.FileName, base.LastTimeCompleteSize, base.First100MMd5, base.RemotePeer);
            base.P2pTransport.TargetFile = base.TransportingFile;
            base.P2pTransport.Start();
            base.Start = true;
            ClientLogger.WriteGeneral(string.Format("--P2P传送开始,下载{0} 从 {1}--", base.FileName, base.RemotePeer.Sid));
        }

        private void CalculatePosition(ref long start, ref long end)
        {
            start = end;
            if ((start != 0) && (start != base.LastTimeCompleteSize))
            {
                start++;
            }
            if (base.IsOnce)
            {
                end = Convert.ToInt32((long) (base.FileSize - 1));
            }
            else if ((start + base.EveryBlockSize) >= base.FileSize)
            {
                end = Convert.ToInt32(base.FileSize) - 1;
            }
            else
            {
                end = (start + base.EveryBlockSize) - 1;
            }
        }

        public override void CancelShareContent()
        {
            base.CancelShareContent();
            lock (this)
            {
                if ((!base.IsCancel && !base.Complete) && !base.IsFailed)
                {
                    base.IsCancel = true;
                    base.RaiseShareContentCancel();
                    if (((base.Transmittype == ShareContentTransmitType.Relay) || (base.Transmittype == ShareContentTransmitType.P2P)) && !base.CurrentDialog.CloseByBye)
                    {
                        base.AsyncSendCancelInfo();
                    }
                    this.Close();
                }
            }
        }

        internal void CloseP2PTransport()
        {
            if (base.P2pTransport != null)
            {
                base.P2pTransport.Stop();
            }
            base.P2pTransport = null;
        }

        private void DeleteExistFile()
        {
            if (File.Exists(base.FilePath))
            {
                try
                {
                    File.Delete(base.FilePath);
                }
                catch
                {
                }
            }
        }

        private void DownLoad()
        {
            if (base.Transmittype == ShareContentTransmitType.P2P)
            {
                this.AsyncStartP2P();
            }
            else
            {
                this.DeleteExistFile();
                ThreadPool.QueueUserWorkItem(new WaitCallback(this.DownloadFileInThread), null);
                if (base.Transmittype == ShareContentTransmitType.Relay)
                {
                    ClientLogger.WriteGeneral(string.Format("--Relay传送开始,下载{0} 从 {1}--", base.FileName, base.RemotePeer.Sid));
                }
            }
        }

        public void DownloadFile()
        {
            if (base.Transmittype == ShareContentTransmitType.Block)
            {
                this.DownLoad();
            }
            else
            {
                this.AsyncSendAcceptInfo();
            }
        }

        private void DownloadFileInThread(object context)
        {
            try
            {
                string text2;
                base.Start = true;
                long start = 0;
                long end = 0;
                int num3 = 0;
                int num4 = 0;
                DateTime now = DateTime.Now;
                int statusCode = 200;
                DateTime time2 = DateTime.Now;
                string text = string.Empty;
                if (!string.IsNullOrEmpty(base.DownLoadUrl) && (base.DownLoadUrl.LastIndexOf('?') > 0))
                {
                    text2 = base.DownLoadUrl + "&";
                }
                else
                {
                    text2 = base.DownLoadUrl + "?";
                }
                Peer remotePeer = new Peer(base.CurrentDialog.Participants[0].Contact.Uri.Sid);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -