Ejemplo n.º 1
0
        /// <summary>
        /// Gets an asset file in the form of an array of bytes
        /// </summary>
        /// <param name="assetFileParameterMessage">Message wrapper for GetAssetFile parameters</param>
        /// <returns>a StreamErrorWrapper with the relevant stream or with a code that specifies that the file is the same as the one on the client side or with error information</returns>
        public StreamErrorWrapper GetAssetFile(AssetFileParameterMessage assetFileParameterMessage)
        {
            StreamErrorWrapper streamErrorWrapper = new StreamErrorWrapper();

            // close returned stream on completion
            OperationContext clientContext = OperationContext.Current;

            clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs args)
            {
                if (streamErrorWrapper.ReturnStream != null)
                {
                    streamErrorWrapper.ReturnStream.Dispose();
                }
            });

            if (assetFileParameterMessage.SystemPassPhrase != _systemPassPhrase)
            {
                streamErrorWrapper.ErrorCode     = "ERR:001";
                streamErrorWrapper.Message       = "Authentication failure";
                streamErrorWrapper.ErrorSeverity = ErrorSeverity.Retriable;
                streamErrorWrapper.ErrorStatus   = ErrorStatus.Failure;
                streamErrorWrapper.ReturnStream  = new MemoryStream(new byte[0]);

                return(streamErrorWrapper);
            }

            // _assetPath/<asset's GUID suffix>/asset filename
            string assetFullPath = FileRepositoryHelper.GetAssetFullPath(assetFileParameterMessage.AssetFileName);

            if (!File.Exists(assetFullPath))
            {
                _applicationLog.Warn(assetFullPath + " does not exist.");
                streamErrorWrapper.ErrorCode     = "ERR:002";
                streamErrorWrapper.Message       = "File not found";
                streamErrorWrapper.ErrorSeverity = ErrorSeverity.Retriable; // search for asset file later
                streamErrorWrapper.ErrorStatus   = ErrorStatus.Failure;
                streamErrorWrapper.ReturnStream  = new MemoryStream(new byte[0]);
                return(streamErrorWrapper);
            }

            string serverSideChecksum = ReadStringFromFile(Path.GetDirectoryName(assetFullPath) + "\\" + Path.GetFileNameWithoutExtension(assetFullPath) + ".chk");

            if (assetFileParameterMessage.Checksum == serverSideChecksum)
            {
                streamErrorWrapper.ErrorStatus  = ErrorStatus.ChecksumEqual;
                streamErrorWrapper.ReturnStream = new MemoryStream(new byte[0]);
                return(streamErrorWrapper);
            }

            TryReadFileWithReadLock(streamErrorWrapper, assetFullPath);

            return(streamErrorWrapper);
        }
Ejemplo n.º 2
0
 public StreamErrorWrapper GetAssetFile(AssetFileParameterMessage assetFileParameterMessage)
 {
     return(Channel.GetAssetFile(assetFileParameterMessage));
 }