private void LoadProjectFile(InternalLoadProject obj) { try { using var stream = File.OpenRead(obj.ProjectFile.Source); using var reader = new BinaryReader(stream); var projectFile = ProjectFile.ReadFile(reader, obj.ProjectFile.Source, Sender); obj.OriginalSender.Tell(new LoadedProjectFile(obj.ProjectFile.OperationId, projectFile, null, true)); } catch (Exception e) { obj.OriginalSender.Tell(new LoadedProjectFile(obj.ProjectFile.OperationId, ProjectFile.FromSource(obj.ProjectFile.Source, Sender), e, false)); } finally { Context.Stop(Self); } }
private Maybe <LoadedProjectFile> LoadProjectFile(Maybe <InternalLoadProject> obj) { Maybe <ProjectFile> LoadProject(string source) { return(IO.File.Open(May(source), FileMode.Open, s => ProjectFile.ReadFile( s.Select(ss => new BinaryReader(ss)), May(source), May(Sender)))); } return(from load in obj let id = load.ProjectFile.OperationId let source = load.ProjectFile.Source select Finally(() => Match( Try(() => from proj in LoadProject(source) select new LoadedProjectFile(id, proj, Maybe <Exception> .Nothing, true)), e => new LoadedProjectFile(id, ProjectFile.FromSource(source, Sender), May(e), false)), () => Context.Stop(Self))); }