Esempio n. 1
0
 /// <summary>
 /// Envía un mensaje de petición de partes del archivo al usuario remoto y marca el estado del manejador como esperando
 /// </summary>
 public override void attendMessage(Message message)
 {
     if (message.Type == SubProtocol.FileTransfer.Types.FILEPARTMESSAGE)
     {
         FilePartMessage filePartMessage = (FilePartMessage)message;
         receivePartMessage(filePartMessage);
     }
 }
Esempio n. 2
0
 public void FilePartManager(FilePartMessage message)
 {
     using (FileStream File = new FileStream(DownloadDirr + DownloadFile, FileMode.Append))
     {
         byte[] array = message.Data;
         File.Write(array, 0, array.Length);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Atiende un mensaje que contiene una parte del archivo y escribe dicha parte a disco
        /// </summary>
        /// <param name="message">El mensaje con la parte del archivo</param>
        private void receivePartMessage(FilePartMessage message)
        {
            lock (thisLock)
            {
                try
                {
                    long pointer = message.PartId * PartSize;
                    if (pointer < FileInformation.Size && parts[message.PartId].Status == FilePartStatus.NOTRECEIVED)
                    {
                        FileHandlerStream.Seek(pointer, SeekOrigin.Begin);
                        FileHandlerStream.Write(message.FilePart, 0, message.FilePart.Length);
                        parts[message.PartId].Status = FilePartStatus.RECEIVED;
                        partsLoaded++;
                    }

                    bool completed = true;
                    for (long i = 0; i < parts.Length; i++)
                    {
                        if (parts[i].Status == FilePartStatus.NOTRECEIVED)
                        {
                            completed = false;
                            break;
                        }
                    }
                    if (completed)
                    {
                        sendMessage(new FileCompleteMessage(RemoteNetUser, Id));
                        this.State = FileMessageHandlerState.COMPLETED;
                    }
                    else
                    {
                        State = FileMessageHandlerState.ACTIVE;
                    }
                }
                catch (ThreadAbortException e)
                {
                    throw e;
                }
                catch (Exception e)
                {
                    sendMessage(new FileErrorMessage(RemoteNetUser, Id));
                    this.State = FileMessageHandlerState.ERROR;
                    this.Error = e.Message;
                    close();
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Se gatilla cuando no es posible entregar un mensaje
        /// </summary>
        /// <param name="message">El mensaje no entregado</param>
        public void errorMessage(Message message)
        {
            switch (message.Type)
            {
            case SubProtocol.FileTransfer.Types.FILEREQUESTMESSAGE:
            {
                FileRequestMessage fileRequestMessage = (FileRequestMessage)message;
                lock (fileMessageHandlerLock)
                {
                    if (activeDownloads.Contains(fileRequestMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeDownloads[fileRequestMessage.FileHandlerId];
                        controlFileHandler.downloadFileFailed(fileMessageHandler.Id.ToString());
                        fileMessageHandler.close();
                        activeDownloads.Remove(fileMessageHandler.Id);
                    }
                }
                break;
            }

            case SubProtocol.FileTransfer.Types.FILEERRORMESSAGES:
            {
                break;
            }

            case SubProtocol.FileTransfer.Types.FILEPARTMESSAGE:
            {
                FilePartMessage filePartMessage = (FilePartMessage)message;
                lock (fileMessageHandlerLock)
                {
                    if (activeUploads.Contains(filePartMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeUploads[filePartMessage.FileHandlerId];
                        controlFileHandler.uploadFileFailed(fileMessageHandler.Id.ToString());
                        fileMessageHandler.close();
                        activeUploads.Remove(fileMessageHandler.Id);
                    }
                }
                break;
            }

            case SubProtocol.FileTransfer.Types.FILEWAITMESSAGE:
            {
                FileWaitMessage fileWaitMessage = (FileWaitMessage)message;
                lock (fileMessageHandlerLock)
                {
                    if (activeDownloads.Contains(fileWaitMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeDownloads[fileWaitMessage.FileHandlerId];
                        controlFileHandler.downloadFileFailed(fileMessageHandler.Id.ToString());
                        fileMessageHandler.close();
                        activeDownloads.Remove(fileMessageHandler.Id);
                    }
                    else if (activeUploads.Contains(fileWaitMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeUploads[fileWaitMessage.FileHandlerId];
                        controlFileHandler.uploadFileFailed(fileMessageHandler.Id.ToString());
                        fileMessageHandler.close();
                        activeUploads.Remove(fileMessageHandler.Id);
                    }
                }
                break;
            }

            case SubProtocol.FileTransfer.Types.FILECOMPLETEMESSAGE:
            {
                break;
            }

            case SubProtocol.FileTransfer.Types.FILELISTREQUESTMESSAGE:
            {
                break;
            }

            case SubProtocol.FileTransfer.Types.FILELISTMESSAGE:
            {
                break;
            }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Se gatilla cuando se recibe un mensaje
        /// </summary>
        /// <param name="message">El mensaje recibido</param>
        public void proccessMessage(Message message)
        {
            switch (message.Type)
            {
            case SubProtocol.FileTransfer.Types.FILEREQUESTMESSAGE:
            {
                FileRequestMessage fileRequestMessage = (FileRequestMessage)message;
                FileInformation    fileInformation    = fileData.FileList.getFileInformation(fileRequestMessage.FileId);
                if (fileInformation != null)
                {
                    FileMessageSender fileMessageSender = new FileMessageSender(fileRequestMessage.SenderNetUser, fileRequestMessage.FileHandlerId, sendMessageDelegate, fileInformation, fileData);
                    lock (fileMessageHandlerLock)
                    {
                        if (!activeUploads.Contains(fileMessageSender.Id))
                        {
                            if (fileMessageUploadQueue.put(fileMessageSender))
                            {
                                controlFileHandler.uploadFileQueued(fileRequestMessage.SenderNetUser, fileMessageSender.Id.ToString(), fileInformation.Name);
                            }
                        }
                    }
                }
                else
                {
                    FileErrorMessage fileErrorMessage = new FileErrorMessage(fileRequestMessage.SenderNetUser, fileRequestMessage.FileHandlerId);
                    sendMessageEvent(fileErrorMessage);
                }
                break;
            }

            case SubProtocol.FileTransfer.Types.FILEERRORMESSAGES:
            {
                FileErrorMessage fileErrorMessage = (FileErrorMessage)message;
                lock (fileMessageHandlerLock)
                {
                    if (activeUploads.Contains(fileErrorMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeUploads[fileErrorMessage.FileHandlerId];
                        controlFileHandler.uploadFileFailed(fileMessageHandler.Id.ToString());
                        fileMessageHandler.close();
                        activeUploads.Remove(fileMessageHandler.Id);
                    }
                    else if (activeDownloads.Contains(fileErrorMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeDownloads[fileErrorMessage.FileHandlerId];
                        controlFileHandler.downloadFileFailed(fileMessageHandler.Id.ToString());
                        fileMessageHandler.close();
                        activeDownloads.Remove(fileMessageHandler.Id);
                    }
                }
                break;
            }

            case SubProtocol.FileTransfer.Types.FILEPARTMESSAGE:
            {
                FilePartMessage filePartMessage = (FilePartMessage)message;
                lock (fileMessageHandlerLock)
                {
                    if (activeDownloads.Contains(filePartMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeDownloads[filePartMessage.FileHandlerId];
                        fileMessageHandler.attendMessage(filePartMessage);
                        fileMessageHandler.waitUp(fileData.FileRiseUp);
                    }
                    else
                    {
                        FileErrorMessage fileErrorMessage = new FileErrorMessage(filePartMessage.SenderNetUser, filePartMessage.FileHandlerId);
                        sendMessageEvent(fileErrorMessage);
                    }
                }
                break;
            }

            case SubProtocol.FileTransfer.Types.FILEWAITMESSAGE:
            {
                FileWaitMessage fileWaitMessage = (FileWaitMessage)message;
                lock (fileMessageHandlerLock)
                {
                    if (activeDownloads.Contains(fileWaitMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeDownloads[fileWaitMessage.FileHandlerId];
                        fileMessageHandler.waitUp(fileData.FileRiseUp);
                    }
                    else if (activeUploads.Contains(fileWaitMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeUploads[fileWaitMessage.FileHandlerId];
                        fileMessageHandler.waitUp(fileData.FileRiseUp);
                    }
                    else
                    {
                        if (!fileMessageDownloadQueue.contains(fileWaitMessage.FileHandlerId) && !fileMessageUploadQueue.contains(fileWaitMessage.FileHandlerId))
                        {
                            FileErrorMessage fileErrorMessage = new FileErrorMessage(fileWaitMessage.SenderNetUser, fileWaitMessage.FileHandlerId);
                            sendMessageEvent(fileErrorMessage);
                        }
                    }
                }
                break;
            }

            case SubProtocol.FileTransfer.Types.FILECOMPLETEMESSAGE:
            {
                FileCompleteMessage fileCompleteMessage = (FileCompleteMessage)message;
                lock (fileMessageHandlerLock)
                {
                    if (activeUploads.Contains(fileCompleteMessage.FileHandlerId))
                    {
                        FileMessageHandler fileMessageHandler = (FileMessageHandler)activeUploads[fileCompleteMessage.FileHandlerId];
                        fileMessageHandler.State = FileMessageHandlerState.COMPLETED;
                    }
                }
                break;
            }

            case SubProtocol.FileTransfer.Types.FILELISTREQUESTMESSAGE:
            {
                FileListRequestMessage fileListRequestMessage = (FileListRequestMessage)message;
                FileListMessage        fileListMessage        = new FileListMessage(fileListRequestMessage.SenderNetUser, fileData.FileList);
                sendMessageEvent(fileListMessage);
                break;
            }

            case SubProtocol.FileTransfer.Types.FILELISTMESSAGE:
            {
                FileListMessage fileListMessage = (FileListMessage)message;
                controlFileListHandler.addFileList(fileListMessage.SenderNetUser, fileListMessage.FileList);
                break;
            }
            }
        }