Ejemplo n.º 1
0
        private void GetAssembly(SubsystemService subsystemService)
        {
            try
            {
                EnumSystemOperationMode mode = (EnumSystemOperationMode)Enum.Parse(typeof(EnumSystemOperationMode),
                                                                                   ConfigurationManager.AppSettings["SystemOperationMode"]);

                if (!Directory.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, mode.ToString())))
                {
                    Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, mode.ToString()));
                }

                using (SubsystemEndpoint subsystemEndPoint = new SubsystemEndpoint(new TCPBinding(), subsystemService.EndpointAddress))
                {
                    subsystemEndPoint.Open();
                    GetAssemblyParameterMessage msg      = new GetAssemblyParameterMessage(mode);
                    SubsystemAssembly           assembly = subsystemEndPoint.GetAssembly(msg);

                    //save the assembly locally
                    subsystemService.ZippedFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, mode.ToString(), assembly.filename);
                    using (FileStream stream = new FileStream(subsystemService.ZippedFilename, FileMode.Create))
                    {
                        assembly.file.CopyTo(stream);
                    }
                }

                if (SubsystemServiceListUpdateEvent != null)
                {
                    SubsystemServiceListUpdateEvent(subsystemService.Alias, SubsystemUpdateEnum.SubsystemConnect, subsystemService.ZippedFilename);
                }
            }
            catch (Exception ex)
            {
                RemoveSubsystem(subsystemService);
                _Logger.LogError(ex);
            }
        }
Ejemplo n.º 2
0
 public SubsystemAssembly GetAssembly(GetAssemblyParameterMessage message)
 {
     return(base.Channel.GetAssembly(message));
 }
Ejemplo n.º 3
0
        public SubsystemAssembly GetAssembly(GetAssemblyParameterMessage message)
        {
            try
            {
                string        assemblyDirLocation = AppDomain.CurrentDomain.BaseDirectory;
                List <string> dirList             = new List <string>(Directory.GetDirectories(assemblyDirLocation));

                Stream stream = new MemoryStream();

                string name = dirList.Find(
                    delegate(string dirName)
                {
                    return(dirName.Contains(message.SystemMode.ToString()));
                });

                //if specified assembly doesn't exist then
                //find one below the specified assembly level
                //e.g. if specified assembly is Engineer then look for
                // Maintenance, if not found then Supervisor, if not found
                // then Operator
                List <EnumSystemOperationMode> SearchCriteria = new List <EnumSystemOperationMode>();

                if (String.IsNullOrWhiteSpace(name))
                {
                    if (message.SystemMode == EnumSystemOperationMode.Engineer)
                    {
                        SearchCriteria.Add(EnumSystemOperationMode.Maintenance);
                    }

                    if (message.SystemMode == EnumSystemOperationMode.Maintenance ||
                        message.SystemMode == EnumSystemOperationMode.Engineer)
                    {
                        SearchCriteria.Add(EnumSystemOperationMode.Supervisor);
                    }

                    if (message.SystemMode == EnumSystemOperationMode.Supervisor ||
                        message.SystemMode == EnumSystemOperationMode.Engineer ||
                        message.SystemMode == EnumSystemOperationMode.Maintenance)
                    {
                        SearchCriteria.Add(EnumSystemOperationMode.Operator);
                    }

                    foreach (EnumSystemOperationMode criteria in SearchCriteria)
                    {
                        name = dirList.Find(
                            delegate(string dirName)
                        {
                            return(dirName.Contains(criteria.ToString()));
                        });

                        if (!String.IsNullOrWhiteSpace(name))
                        {
                            break;
                        }
                    }
                }

                if (!String.IsNullOrWhiteSpace(name))
                {
                    using (ZipFile zip = new ZipFile())
                    {
                        string[] files = Directory.GetFiles(name);

                        // changing this defalte threshold avoids corrupted files in the zipfile.
                        zip.ParallelDeflateThreshold = -1;

                        zip.AddFiles(files, "");

                        // zip up resource directories as well
                        string[] directories = Directory.GetDirectories(name);
                        foreach (string subDir in directories)
                        {
                            try
                            {
                                // only add resource files for this local project. Exclude the L3.Cargo.Common.Dashboard.resources.dll
                                string[] resFiles = Directory.GetFiles(subDir);
                                zip.AddDirectoryByName(Path.GetFileName(subDir));
                                foreach (string resFile in resFiles)
                                {
                                    // Avoid adding the resource file for the Dashboard.
                                    // TODO: this string should come from somewhere
                                    if (!resFile.Contains("L3.Cargo.Common.Dashboard.resources.dll"))
                                    {
                                        zip.AddFile(resFile, Path.GetFileName(subDir));
                                    }
                                }
                            }
                            catch (Exception e)
                            {
                                string ex = e.Message;
                            }
                        }

                        zip.Save(stream);
                        stream.Seek(0, SeekOrigin.Begin);
                    }

                    OperationContext clientContext = OperationContext.Current;
                    clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs e)
                    {
                        if (stream != null)
                        {
                            stream.Dispose();
                        }
                    });

                    return(new SubsystemAssembly(stream, m_aliasTag + "_" + m_assemblyTag + ".zip"));
                }
                else
                {
                    throw new FaultException(new FaultReason("File does not exist"));
                }
            }
            catch (Exception exp)
            {
                throw new FaultException(new FaultReason(exp.Message));
            }
        }