/// <summary> /// Constructor Parametrizado /// </summary> /// <param name="remoteNetUser">El usuario remoto con el cual se intercambiará el archivo</param> /// <param name="sendMessageDelegate">Un método con el cual se puedan envíar mensajes a la MANET</param> /// <param name="fileInformation">La información del archivo</param> /// <param name="FileData">Los parámetros de configuración</param> public FileMessageReceiver(NetUser remoteNetUser, SendMessageDelegate sendMessageDelegate, FileInformation fileInformation, FileData fileData) : base(remoteNetUser, sendMessageDelegate, fileInformation, fileData) { thisLock = new Object(); this.Type = FileMessageHandlerType.DOWNLOAD; this.downloadDir = fileData.DownloadDir; }
/// <summary> /// Constructor parametrizado /// </summary> /// <param name="remoteNetUser">El usuario con quien se intercambia el archivo</param> /// <param name="remoteFileHandlerId">El id de la transferencia de archivo</param> /// <param name="sendMessageDelegate">Una función por la que se pueda enviar un mensaje</param> /// <param name="fileInformation">Información del archivo</param> /// <param name="fileData">Datos de configuración de archivos</param> public FileMessageSender(NetUser remoteNetUser, Guid remoteFileHandlerId, SendMessageDelegate sendMessageDelegate, FileInformation fileInformation, FileData fileData) : base(remoteNetUser, sendMessageDelegate, fileInformation, fileData) { FileName = fileInformation.Path; currentPart = 0; this.Type = FileMessageHandlerType.UPLOAD; this.Id = remoteFileHandlerId; }
/// <summary> /// Genera un array con el contenido de la coleccion /// </summary> /// <returns>el array con el contenido de la coleccion</returns> public FileInformation[] toArray() { lock (thisLock) { FileInformation[] us = new FileInformation[collection.Count]; IDictionaryEnumerator en = collection.GetEnumerator(); int i = 0; while (en.MoveNext()) { us[i] = (FileInformation)en.Value; i++; } return us; } }
/// <summary> /// Agrega a la lista /// </summary> /// <param name="fileInformation">La informacion de archivo a agregar</param> public void add(FileInformation fileInformation) { lock (thisLock) { if (!collection.Contains(fileInformation.Id)) { collection.Add(fileInformation.Id, fileInformation); } else { collection.Remove(fileInformation.Id); collection.Add(fileInformation.Id, fileInformation); } } }
public FileMessageHandler(NetUser remoteNetUser, SendMessageDelegate sendMessage, FileInformation fileInformation, FileData fileData) { this.Id = Guid.NewGuid(); this.RemoteNetUser = remoteNetUser; this.sendMessage = sendMessage; this.FileInformation = fileInformation; this.PartSize = fileData.PartSize; State = FileMessageHandlerState.WAITING; MaxTimeOut = fileData.FileTimeOut; resetTimeOut(); }
/// <summary> /// Constructor parametrizado /// </summary> /// <param name="remoteNetUser">El usuario con quien se intercambia el archivo</param> /// <param name="remoteFileHandlerId">El id de la transferencia de archivo</param> /// <param name="sendMessageDelegate">Una función por la que se pueda enviar un mensaje</param> /// <param name="fileInformation">Información del archivo</param> /// <param name="FileData">Datos de configuración de archivos</param> public FileMessageSender(NetUser remoteNetUser, Guid remoteFileHandlerId, SendMessageDelegate sendMessageDelegate, FileInformation fileInformation, FileData fileData) : base(remoteNetUser, sendMessageDelegate, fileInformation, fileData) { FileName = fileInformation.Path; currentPart = 0; this.Type = FileMessageHandlerType.UPLOAD; this.Id = remoteFileHandlerId; }
/// <summary> /// Se gatilla cuando se quiere enviar una petición de archivo /// </summary> /// <param name="netUser">El usuario dueño del archivo</param> /// <param name="fileInformation">los datos del archivo</param> public void sendFileRequest(NetUser netUser, FileInformation fileInformation) { FileMessageReceiver fileMessageReceiber = new FileMessageReceiver(netUser, sendMessageDelegate, fileInformation, fileData); if (fileMessageDownloadQueue.put(fileMessageReceiber)) { controlFileHandler.downloadFileQueued(netUser, fileMessageReceiber.Id.ToString(), fileInformation.Name); } }
/// <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; } } }