示例#1
0
        /// <summary>
        /// Sends a request to stop a file transfer.
        /// </summary>
        private void CancelRequestFileFromServer()
        {
            if (FileStreamStatus == FileStreamerStatusEnum.Downloading)
            {
                FileRequestPacket packet = new FileRequestPacket
                {
                    FileRequestType = FileRequestTypeEnum.CancelFileRequest
                };
                FileStreamStatus = FileStreamerStatusEnum.Stopped;

                WinterEngineService.NetworkClient.SendPacket(packet, NetDeliveryMethod.ReliableSequenced);

                // Remove partially downloaded file, if it exists.
                string filePath = DirectoryPaths.ContentPackageDirectoryPath + LastReceivedFile;
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }

                FileSize = 0;
                LastReceivedFile = "";
                MissingFiles.Clear();
            }
        }
示例#2
0
        /// <summary>
        /// Sends a request to start initiating a specific file's data transfer
        /// </summary>
        /// <param name="fileName"></param>
        private void RequestFileFromServer(string fileName)
        {
            FileStreamStatus = FileStreamerStatusEnum.Downloading;

            FileRequestPacket packet = new FileRequestPacket
            {
                FileRequestType = FileRequestTypeEnum.StartFileRequest,
                FileName = fileName
            };

            WinterEngineService.NetworkClient.SendPacket(packet, NetDeliveryMethod.ReliableSequenced);
        }
示例#3
0
        /// <summary>
        /// Processes a packet containing a list of content package files.
        /// Files which are not on the client's machine will be added to a list to be downloaded.
        /// The first file in this list is requested at the end of this method call.
        /// </summary>
        /// <param name="packet"></param>
        private void ProcessContentPackageListPacket(ContentPackageListPacket packet)
        {
            if (packet.FileNames != null)
            {
                foreach (string fileName in packet.FileNames)
                {
                    string filePath = DirectoryPaths.ContentPackageDirectoryPath + fileName;

                    if (!File.Exists(filePath))
                    {
                        MissingFiles.Add(fileName);
                    }
                }
            }

            if (MissingFiles.Count > 0)
            {
                RequestFileFromServer(MissingFiles[0]);
            }
            else
            {
                FileStreamStatus = FileStreamerStatusEnum.Complete;
            }
        }
示例#4
0
        /// <summary>
        /// Processes a streaming file packet, building a file as bytes are received.
        /// Files received must be content packages for security reasons.
        /// </summary>
        /// <param name="packet"></param>
        private void ProcessStreamingFilePacket(StreamingFilePacket packet)
        {
            if (Path.GetExtension(packet.FileName) == FileExtensionFactory.GetFileExtension(FileTypeEnum.ContentPackage) && FileStreamStatus == FileStreamerStatusEnum.Downloading)
            {
                string filePath = DirectoryPaths.ContentPackageDirectoryPath + packet.FileName;
                if (!File.Exists(filePath))
                {
                    File.Create(filePath).Close();
                }

                LastReceivedFile = packet.FileName;

                using (FileStream fileStream = new FileStream(filePath, FileMode.Append))
                {
                    fileStream.Write(packet.FileBytes, 0, (int)packet.FileBytes.Length);
                }

                // If this is the end of the file, we need to remove it from the list
                // and request the next file from the server.
                if (packet.IsEndOfFile)
                {
                    MissingFiles.Remove(packet.FileName);

                    if (MissingFiles.Count > 0)
                    {
                        FileStreamStatus = FileStreamerStatusEnum.Stopped;
                        RequestFileFromServer(MissingFiles[0]);
                    }
                    else
                    {
                        FileStreamStatus = FileStreamerStatusEnum.Complete;
                    }
                }
            }
        }