Exemplo n.º 1
0
        public RemoteFileInfo DownloadFile(ServerFileInfo request)
        {
            Stream stream = null;
            long length = 0;
            // get some info about the input file
            if (!request.IsFromDB)
            {
                string filePath = Path.Combine(AppDirectories.DownloadFolder, request.FileName);
                var fileInfo = new FileInfo(filePath);
                length = fileInfo.Length;
                // report start
                Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceVerbose, "Sending stream " + request.FileName + " to client");
                Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceVerbose,"Size " + fileInfo.Length);

                // check if exists
                if (!fileInfo.Exists)
                {
                    Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceError, "File not found");
                    throw new FileNotFoundException("File not found", request.FileName);
                }

                // open stream
                stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            }
            else
            {
                using (var ent = new CommonEntitiesManager())
                {

                    Pack P = ent.Packs.FirstOrDefault(p => p.Code == request.Code);
                    if (P != null)
                    {
                        Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceVerbose, "Sending pack " + request.Code + " to client","Verbose");
                        stream = new MemoryStream(P.Data);
                    }
                    else
                    {
                        Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceWarning, "Pack " + request.Code + " Not found", "Verbose");
                    }
                }
            }
            // return result
            var result = new RemoteFileInfo();
            result.FileName = request.FileName;
            result.Length = length;
            result.FileByteStream = stream;
            return result;

            // after returning to the client download starts. Stream remains open and on server and the client reads it, although the execution of this method is completed.
        }
Exemplo n.º 2
0
        public ServerFileInfo UploadFile(RemoteFileInfo request)
        {
            // report start

            Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceVerbose,"Start uploading " + request.FileName, "Verbose");
            Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceVerbose, "Size " + request.Length, "Verbose");

            string filePath = Path.Combine(AppDirectories.UploadFolder, Path.GetFileName(request.FileName));
            if (File.Exists(filePath)) File.Delete(filePath);

            ServerFileInfo ret = null;

            int chunkSize = 1024 * 4;
            var buffer = new byte[chunkSize];

            using (var writeStream = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write))
            {
                try
                {
                    do
                    {
                        // read bytes from input stream
                        int bytesRead = request.FileByteStream.Read(buffer, 0, chunkSize);
                        if (bytesRead == 0) break;

                        // write bytes to output stream
                        writeStream.Write(buffer, 0, bytesRead);
                    } while (true);

                    // report end
                    Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceVerbose, "Done!", "Verbose");
                    ret = new ServerFileInfo {FileName = filePath};

                    OnPackReceived(filePath, request.ConnectionID);

                    return ret;
                }
                catch (Exception exe)
                {
                    Trace.WriteLineIf(ZeroCommonClasses.Environment.Config.LogLevel.TraceError, exe);
                    throw;
                }
                finally
                {
                    writeStream.Close();
                }
            }
        }
Exemplo n.º 3
0
        private bool SendExistingPacks(SyncStartingEventArgs Config)
        {
            bool ret = true;
            try
            {
                Config.Notifier.SetProcess("Enviando Paquetes de datos");
                foreach (var module in Config.Modules)
                {
                    string[] filesToSend = new string[] {};
                    try
                    {
                        filesToSend = module.GetFilesToSend();
                    }
                    catch (Exception exe)
                    {
                        Config.Notifier.SetUserMessage(true, "Error al generar paquetes del módulo N°" + module.ModuleCode);
                    }
                    if (filesToSend.Length > 0)
                    {
                        Config.Notifier.SetUserMessage(false, "Enviando paquetes del módulo N°" + module.ModuleCode);
                        Config.Notifier.SetUserMessage(false, "Total " + filesToSend.Length);

                        foreach (var filePath in filesToSend)
                        {
                            var file = new FileInfo(filePath);
                            var aFile =
                            new RemoteFileInfo
                            {
                                FileName = filePath,
                                Length = file.Length,
                                ConnectionID = CurrentConnectionID,
                                FileByteStream = file.OpenRead()
                            };

                            ServerFileInfo inf = Config.FileTransferService.UploadFile(aFile);
                            aFile.FileByteStream.Close();
                            File.Move(filePath, Path.ChangeExtension(filePath, kSyncFileExtention));

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ret = false;
                Config.Notifier.SetUserMessage(false, "Error al enviar archivos: " + ex);
            }

            return ret;
        }
Exemplo n.º 4
0
        private bool DownloadFile(SyncStartingEventArgs Config, string filePath, RemoteFileInfo inf)
        {
            bool ret = true;
            int chunkSize = 1024 * 4;
            var buffer = new byte[chunkSize];
            using (var writeStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                try
                {
                    do
                    {
                        // read bytes from input stream
                        int bytesRead = inf.FileByteStream.Read(buffer, 0, chunkSize);
                        if (bytesRead == 0) break;

                        // write bytes to output stream
                        writeStream.Write(buffer, 0, bytesRead);
                    } while (true);

                }
                catch (Exception exe)
                {
                    ret = false;
                    Config.Notifier.Log(TraceLevel.Error, string.Format("Error Al recibir archivo. {0} - error {1}",filePath, exe));
                    Config.Notifier.SetProcess("Error Recibiendo Paquetes de datos");
                }
                finally
                {
                    writeStream.Close();
                }

            }
            return ret;
        }