private Dictionary <ENodeType, StreamStruct> CreateStreams(EDeflateCompression CompressMode) { if (IsFileWrite) { return(CreateFileStreams(CompressMode)); } WebRequests.Clear(); Dictionary <ENodeType, StreamStruct> Streams = new Dictionary <ENodeType, StreamStruct>(); EProcessedFileType HierarchyFileType = EProcessedFileType.HIERARCHY_RAF; EProcessedFileType GeometryFileType = EProcessedFileType.GEOMETRY_RAF; EProcessedFileType MetadateFileType = EProcessedFileType.METADATA_RAF; if (CompressMode == EDeflateCompression.Compress) { HierarchyFileType = EProcessedFileType.HIERARCHY_CF; GeometryFileType = EProcessedFileType.GEOMETRY_CF; MetadateFileType = EProcessedFileType.METADATA_CF; } HttpWebRequest HierarchyRequest = CreateWebRequest(UploadUrls[HierarchyFileType]); lock (WebRequests) { WebRequests.Add(HierarchyRequest); } Stream WriteHierarchyStream = HierarchyRequest.GetRequestStream(); StreamStruct HierarchyStreamStruct = new StreamStruct(WriteHierarchyStream, CompressMode); HttpWebRequest GeometryRequest = CreateWebRequest(UploadUrls[GeometryFileType]); lock (WebRequests) { WebRequests.Add(GeometryRequest); } Stream WriteGeometryStream = GeometryRequest.GetRequestStream(); StreamStruct GeometryStreamStruct = new StreamStruct(WriteGeometryStream, CompressMode); HttpWebRequest MetadataRequest = CreateWebRequest(UploadUrls[MetadateFileType]); lock (WebRequests) { WebRequests.Add(MetadataRequest); } Stream WriteMetadataStream = MetadataRequest.GetRequestStream(); StreamStruct MetadataStreamStruct = new StreamStruct(WriteMetadataStream, CompressMode); Streams.Add(ENodeType.Hierarchy, HierarchyStreamStruct); Streams.Add(ENodeType.Geometry, GeometryStreamStruct); Streams.Add(ENodeType.Metadata, MetadataStreamStruct); return(Streams); }
private Dictionary <ENodeType, StreamStruct> CreateFileStreams(EDeflateCompression CompressMode) { WriteStreams.Clear(); Dictionary <ENodeType, StreamStruct> Streams = new Dictionary <ENodeType, StreamStruct>(); EProcessedFileType HierarchyFileType = EProcessedFileType.HIERARCHY_RAF; EProcessedFileType GeometryFileType = EProcessedFileType.GEOMETRY_RAF; EProcessedFileType MetadateFileType = EProcessedFileType.METADATA_RAF; string Ext = "x3dp_"; if (CompressMode == EDeflateCompression.Compress) { Ext = "x3dc_"; GeometryFileType = EProcessedFileType.GEOMETRY_CF; HierarchyFileType = EProcessedFileType.HIERARCHY_CF; MetadateFileType = EProcessedFileType.METADATA_CF; } Stream WriteHierarchyStream = new FileStream($"{UploadUrls[HierarchyFileType]}-{CurrentFileSet}.{Ext}h", FileMode.Create); lock (WriteStreams) { WriteStreams.Add(WriteHierarchyStream); } StreamStruct HierarchyStreamStruct = new StreamStruct(WriteHierarchyStream, CompressMode); Stream WriteGeometryStream = new FileStream($"{UploadUrls[GeometryFileType]}-{CurrentFileSet}.{Ext}g", FileMode.Create); lock (WriteStreams) { WriteStreams.Add(WriteGeometryStream); } StreamStruct GeometryStreamStruct = new StreamStruct(WriteGeometryStream, CompressMode); Stream WriteMetadataStream = new FileStream($"{UploadUrls[MetadateFileType]}-{CurrentFileSet}.{Ext}m", FileMode.Create); lock (WriteStreams) { WriteStreams.Add(WriteMetadataStream); } StreamStruct MetadataStreamStruct = new StreamStruct(WriteMetadataStream, CompressMode); Streams.Add(ENodeType.Hierarchy, HierarchyStreamStruct); Streams.Add(ENodeType.Geometry, GeometryStreamStruct); Streams.Add(ENodeType.Metadata, MetadataStreamStruct); return(Streams); }
public static bool GetProcessedFile( WebServiceBaseTimeoutable _Request, EProcessedFileType _FileType, IBDatabaseServiceInterface _DatabaseService, IBFileServiceInterface _FileService, string _CadFileStorageBucketName, string _ModelID, int _RevisionIndex, out BWebServiceResponse _SuccessResponse, out BWebServiceResponse _FailureResponse, string _GeometryId = null, Action <string> _ErrorMessageAction = null) { _SuccessResponse = BWebResponse.InternalError(""); if (!Controller_AtomicDBOperation.Get().GetClearanceForDBOperation(_Request.InnerProcessor, ModelDBEntry.DBSERVICE_MODELS_TABLE(), _ModelID, _ErrorMessageAction)) { _FailureResponse = BWebResponse.InternalError("Atomic operation control has failed."); return(false); } var bResult = GetProcessedFile_Internal( _FileType, _DatabaseService, _FileService, _CadFileStorageBucketName, _ModelID, _RevisionIndex, out _SuccessResponse, out _FailureResponse, _GeometryId, _ErrorMessageAction); Controller_AtomicDBOperation.Get().SetClearanceForDBOperationForOthers(_Request.InnerProcessor, ModelDBEntry.DBSERVICE_MODELS_TABLE(), _ModelID, _ErrorMessageAction); return(bResult); }
private static bool GetProcessedFile_Internal( EProcessedFileType _FileType, IBDatabaseServiceInterface _DatabaseService, IBFileServiceInterface _FileService, string _CadFileStorageBucketName, string _ModelID, int _RevisionIndex, out BWebServiceResponse _SuccessResponse, out BWebServiceResponse _FailureResponse, string _GeometryId = null, Action <string> _ErrorMessageAction = null) { _SuccessResponse = BWebResponse.InternalError(""); if (!TryGettingAllInfo( _DatabaseService, _ModelID, _RevisionIndex, out ModelDBEntry _, out Revision RevisionObject, out int _, out _FailureResponse, _ErrorMessageAction)) { return(false); } if (RevisionObject.FileEntry.FileProcessStage != (int)Constants.EProcessStage.Uploaded_Processed) { _FailureResponse = BWebResponse.NotFound("Raw file has not been processed yet."); return(false); } string RelativeFileUrl = null; switch (_FileType) { case EProcessedFileType.HIERARCHY_CF: RelativeFileUrl = RevisionObject.FileEntry.HierarchyCFRelativeUrl; break; case EProcessedFileType.HIERARCHY_RAF: RelativeFileUrl = RevisionObject.FileEntry.HierarchyRAFRelativeUrl; break; case EProcessedFileType.METADATA_CF: RelativeFileUrl = RevisionObject.FileEntry.MetadataCFRelativeUrl; break; case EProcessedFileType.METADATA_RAF: RelativeFileUrl = RevisionObject.FileEntry.MetadataRAFRelativeUrl; break; case EProcessedFileType.GEOMETRY_CF: RelativeFileUrl = RevisionObject.FileEntry.GeometryCFRelativeUrl; break; case EProcessedFileType.GEOMETRY_RAF: RelativeFileUrl = RevisionObject.FileEntry.GeometryRAFRelativeUrl; break; case EProcessedFileType.UNREAL_HGM: RelativeFileUrl = RevisionObject.FileEntry.UnrealHGMRelativeUrl; break; case EProcessedFileType.UNREAL_HG: RelativeFileUrl = RevisionObject.FileEntry.UnrealHGRelativeUrl; break; case EProcessedFileType.UNREAL_H: RelativeFileUrl = RevisionObject.FileEntry.UnrealHRelativeUrl; break; case EProcessedFileType.UNREAL_G: if (_GeometryId == null) { _ErrorMessageAction?.Invoke("GeometryId was not set when tried to retrieve UnrealGeometry file (u_g)"); _FailureResponse = BWebResponse.InternalError("GeometryId was not provided."); } RelativeFileUrl = $"{RevisionObject.FileEntry.UnrealGRelativeUrlBasePath}{_GeometryId}.{Constants.ProcessedFileType_Extension_Map[EProcessedFileType.UNREAL_G]}"; break; } if (!_FileService.CreateSignedURLForDownload( out string DownloadUrl, _CadFileStorageBucketName, RelativeFileUrl, FileEntry.EXPIRY_MINUTES, _ErrorMessageAction)) { _FailureResponse = BWebResponse.InternalError("Signed url generation has failed."); return(false); } _SuccessResponse = BWebResponse.StatusOK("File has been located.", new JObject() { [FileEntry.FILE_DOWNLOAD_URL_PROPERTY] = DownloadUrl, [FileEntry.FILE_DOWNLOAD_UPLOAD_EXPIRY_MINUTES_PROPERTY] = FileEntry.EXPIRY_MINUTES }); return(true); }
public static bool SplitRelativeUrl( string _RelativeUrl, out string _OwnerModelID, out int _OwnerRevisionIndex, out bool _bIsProcessed, out EProcessedFileType _ProcessedFileType_IfProcessed, out string _RawExtension_IfRaw) { _OwnerModelID = null; _OwnerRevisionIndex = -1; _ProcessedFileType_IfProcessed = EProcessedFileType.NONE_OR_RAW; _RawExtension_IfRaw = null; _bIsProcessed = false; foreach (var FolderPrefix in Constants.ProcessedFileType_FolderPrefix_Map) { if (_RelativeUrl.StartsWith(FolderPrefix.Value)) { _ProcessedFileType_IfProcessed = FolderPrefix.Key; _bIsProcessed = true; _RelativeUrl = _RelativeUrl.Substring(FolderPrefix.Value.Length); } } if (_ProcessedFileType_IfProcessed == EProcessedFileType.NONE_OR_RAW) { if (!_RelativeUrl.StartsWith(RAW_FILE_FOLDER_PREFIX)) { return(false); } _RelativeUrl = _RelativeUrl.Substring(RAW_FILE_FOLDER_PREFIX.Length); } if (_RelativeUrl == null || _RelativeUrl.Length == 0) { return(false); } var Splitted = _RelativeUrl.Split('/'); if (Splitted.Length < 3) { return(false); } _OwnerModelID = Splitted[0]; if (!int.TryParse(Splitted[1], out _OwnerRevisionIndex)) { return(false); } if (!_bIsProcessed) { var ExtensionSplit = Splitted[2].Split('.'); if (ExtensionSplit.Length < 2) { return(false); } _RawExtension_IfRaw = ExtensionSplit[ExtensionSplit.Length - 1]; } return(true); }
private BWebServiceResponse OnRequest_Internal(HttpListenerContext _Context, Action <string> _ErrorMessageAction) { if (_Context.Request.HttpMethod != "GET") { return(BWebResponse.BadRequest($"This service does not accept requests of type : {_Context.Request.HttpMethod}")); } string FileTypeStr = ""; string Filename = "file"; try { FileTypeStr = _Context.Request.QueryString.Get("fileType").ToLower().Trim().TrimStart('.'); } catch { return(BWebResponse.BadRequest($"Expected parameters have not been provided")); } EProcessedFileType FileTypeEnum = EProcessedFileType.NONE_OR_RAW; if (Constants.ProcessedFileType_Enum_Map.ContainsKey(FileTypeStr)) { FileTypeEnum = Constants.ProcessedFileType_Enum_Map[FileTypeStr]; } else { return(BWebResponse.BadRequest($"Invalid File Type was provided")); } try { Filename = _Context.Request.QueryString.Get("fileName"); } catch { //This is an optional field so do nothing } if (string.IsNullOrWhiteSpace(Filename)) { Filename = "file"; } string Url = _Context.Request.RawUrl; int CopyStart = Url.LastIndexOf('/') + 1; int CopyEnd = Url.IndexOf("?"); string Podname = Url.Substring(CopyStart, CopyEnd - CopyStart).TrimEnd('/'); if (CopyEnd == -1) { return(BWebResponse.BadRequest($"Expected parameters have not been provided")); } BatchProcessingCreationService.Instance.GetBucketAndFile(Podname, out string _Bucket, out string _Filename); if (!string.IsNullOrWhiteSpace(_Bucket) && !string.IsNullOrWhiteSpace(_Filename)) { string RawStrippedPath = _Filename.TrimStart("raw/"); int FilenameStripLength = RawStrippedPath.LastIndexOf('/'); RawStrippedPath = RawStrippedPath.Substring(0, FilenameStripLength); if (!FileService.CreateSignedURLForUpload(out string SignedUploadUrl, DEFAULT_UPLOAD_BUCKET, $"{Constants.ProcessedFileType_FolderPrefix_Map[FileTypeEnum]}{RawStrippedPath}/{Filename}.{Constants.ProcessedFileType_Extension_Map[FileTypeEnum]}", UPLOAD_CONTENT_TYPE, UPLOAD_URL_VALIDITY_MINUTES, _ErrorMessageAction)) { return(BWebResponse.InternalError("Failed to create Upload Url")); } return(BWebResponse.StatusOK("success", new JObject() { ["uploadUrl"] = SignedUploadUrl })); } else { return(BWebResponse.NotFound("Could not find pod details")); } }