示例#1
0
        public void ProcessData(INetworkData ndata, Parameters param, ref IData[] supplData, ProcessInfo processInfo)
        {
            var remoteExe = param.GetParam <string>(InterpreterLabel).Value;
            var inFolder  = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());

            FolderFormat.Write(ndata, inFolder);
            var paramFile = Path.GetTempFileName();

            param.ToFile(paramFile);
            var outFolder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());

            if (!TryGetCodeFile(param, out string codeFile))
            {
                processInfo.ErrString = $"Code file '{codeFile}' was not found";
                return;
            }
            ;
            var suppFiles = SupplDataTypes.Select(Utils.CreateTemporaryPath).ToArray();
            var args      = $"{codeFile} {paramFile} {inFolder} {outFolder} {string.Join(" ", suppFiles)}";

            Debug.WriteLine($"executing > {remoteExe} {args}");
            if (Utils.RunProcess(remoteExe, args, processInfo.Status, out string processInfoErrString) != 0)
            {
                processInfo.ErrString = processInfoErrString;
                return;
            }
            ;
            ndata.Clear();
            FolderFormat.Read(ndata, outFolder, processInfo);
            supplData = Utils.ReadSupplementaryData(suppFiles, SupplDataTypes, processInfo);
        }
        public void ProcessData(INetworkData ndata, Parameters param, ref IMatrixData[] supplTables, ref IDocumentData[] documents,
                                ProcessInfo processInfo)
        {
            var remoteExe = param.GetParam <string>(InterpreterLabel).Value;            //get parameters??
            var inFolder  = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); //create outfolder

            Directory.CreateDirectory(inFolder);                                        //create outfolder directory
            NetworkIO.Write(ndata, inFolder);                                           //write graphs in folder
            var paramFile = Path.GetTempFileName();                                     //paramfile

            using (var f = new StreamWriter(paramFile))
            {
                param.Convert(ParamUtils.ConvertBack);
                var serializer = new XmlSerializer(param.GetType());
                serializer.Serialize(f, param);
            }
            var outFolder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); //create outfolder path

            Directory.CreateDirectory(outFolder);                                       //create outfolder directory
            var codeFile = GetCodeFile(param);                                          //get codefile
            var args     = $"{codeFile} {paramFile} {inFolder} {outFolder}";

            Debug.WriteLine($"executing > {remoteExe} {args}"); //
            var externalProcessInfo = new ProcessStartInfo      //processinfo with args={code,para,in,out}
            {
                FileName               = remoteExe,
                Arguments              = args,
                UseShellExecute        = false,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                CreateNoWindow         = true
            };

            using (var process = Process.Start(externalProcessInfo))
            {
                var    output = process.StandardOutput;
                string line;
                while ((line = output.ReadLine()) != null)
                {
                    Debug.WriteLine($"remote stdout > {line}");
                }
                var error = process.StandardOutput;
                while ((line = error.ReadLine()) != null)
                {
                    Debug.WriteLine($"remote error > {line}");
                }
                process.WaitForExit();
            }
            ndata.Clear();
            NetworkIO.Read(ndata, outFolder, processInfo);//read in matrices from outfolder
        }