コード例 #1
0
        private static void CompleteDownload(LocalStorageFileState state)
        {
            bool flag = true;

            LocalStorageAPI.s_log.LogDebug("Download completed for State={0}", new object[] { state });
            HTTPHeader hTTPHeader = LocalStorageAPI.ParseHTTPHeader(state.FileData);

            if (hTTPHeader != null)
            {
                byte[] numArray = new byte[hTTPHeader.ContentLength];
                Array.Copy(state.FileData, hTTPHeader.ContentStart, numArray, 0, hTTPHeader.ContentLength);
                if (LocalStorageAPI.ComputeSHA256(numArray) == state.CH.Sha256Digest)
                {
                    flag = false;
                    LocalStorageAPI.DecompressStateIfPossible(state, numArray);
                }
                else
                {
                    LocalStorageAPI.s_log.LogWarning("Integrity check failed for State={0}", new object[] { state });
                }
            }
            else
            {
                LocalStorageAPI.s_log.LogWarning("Parsinig of HTTP header failed for State={0}", new object[] { state });
            }
            if (flag || state.FileData == null)
            {
                LocalStorageAPI.ExecuteFailedDownload(state);
            }
            else
            {
                LocalStorageAPI.ExecuteSucessfulDownload(state);
            }
        }
コード例 #2
0
        private static void ReceiveCallback(IAsyncResult ar)
        {
            LocalStorageFileState asyncState = (LocalStorageFileState)ar.AsyncState;

            try
            {
                LocalStorageAPI.s_log.LogDebug("ReceiveCallback called for State={0}", new object[] { asyncState });
                int num = asyncState.Socket.EndReceive(ar);
                if (num <= 0)
                {
                    LocalStorageAPI.CompleteDownload(asyncState);
                }
                else
                {
                    int          num1         = (asyncState.FileData != null ? (int)asyncState.FileData.Length : 0) + num;
                    MemoryStream memoryStream = new MemoryStream(new byte[num1], 0, num1, true, true);
                    if (asyncState.FileData != null)
                    {
                        memoryStream.Write(asyncState.FileData, 0, (int)asyncState.FileData.Length);
                    }
                    memoryStream.Write(asyncState.ReceiveBuffer, 0, num);
                    asyncState.FileData = memoryStream.GetBuffer();
                    asyncState.Socket.BeginReceive(asyncState.ReceiveBuffer, 0, LocalStorageAPI.m_bufferSize, SocketFlags.None, new AsyncCallback(LocalStorageAPI.ReceiveCallback), asyncState);
                }
            }
            catch (Exception exception1)
            {
                Exception exception = exception1;
                LocalStorageAPI.s_log.LogWarning("EXCEPTION: {0}", new object[] { exception.Message });
                asyncState.FailureMessage = exception.Message;
                LocalStorageAPI.ExecuteFailedDownload(asyncState);
            }
        }
コード例 #3
0
        private void DownloadFromDepot(LocalStorageFileState state)
        {
            string str = string.Format("{0}.depot.battle.net", state.CH.Region);

            LocalStorageAPI.s_log.LogDebug("Starting download from {0}", new object[] { str });
            state.Connection.LogDebug   = new Action <string>(LocalStorageAPI.s_log.LogDebug);
            state.Connection.LogWarning = new Action <string>(LocalStorageAPI.s_log.LogWarning);
            state.Connection.OnFailure  = () => LocalStorageAPI.ExecuteFailedDownload(state);
            state.Connection.OnSuccess  = () => LocalStorageAPI.ConnectCallback(state);
            state.Connection.Connect(str, this.DepotPort);
        }
コード例 #4
0
        private static void ReceiveCallback(IAsyncResult ar)
        {
            LocalStorageFileState localStorageFileState = (LocalStorageFileState)ar.get_AsyncState();

            try
            {
                LocalStorageAPI.s_log.LogDebug("ReceiveCallback called for State={0}", new object[]
                {
                    localStorageFileState
                });
                int num = localStorageFileState.Socket.EndReceive(ar);
                if (num > 0)
                {
                    int          num2         = (localStorageFileState.FileData != null) ? localStorageFileState.FileData.Length : 0;
                    int          num3         = num2 + num;
                    MemoryStream memoryStream = new MemoryStream(new byte[num3], 0, num3, true, true);
                    if (localStorageFileState.FileData != null)
                    {
                        memoryStream.Write(localStorageFileState.FileData, 0, localStorageFileState.FileData.Length);
                    }
                    memoryStream.Write(localStorageFileState.ReceiveBuffer, 0, num);
                    localStorageFileState.FileData = memoryStream.GetBuffer();
                    localStorageFileState.Socket.BeginReceive(localStorageFileState.ReceiveBuffer, 0, LocalStorageAPI.m_bufferSize, 0, new AsyncCallback(LocalStorageAPI.ReceiveCallback), localStorageFileState);
                }
                else
                {
                    LocalStorageAPI.CompleteDownload(localStorageFileState);
                }
            }
            catch (Exception ex)
            {
                LocalStorageAPI.s_log.LogWarning("EXCEPTION: {0}", new object[]
                {
                    ex.get_Message()
                });
                localStorageFileState.FailureMessage = ex.get_Message();
                LocalStorageAPI.ExecuteFailedDownload(localStorageFileState);
            }
        }