using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace NewPosInstaller { /// /// POS 이미지 전체 다운로드 /// 07 POS운영이미지 PosConst.PGM_UPDATE_TYPE.CONTENTS /// 03 고객화면이미지 PosConst.PGM_UPDATE_TYPE.CUSTOMER /// 04 상품이미지 PosConst.PGM_UPDATE_TYPE.ITEM_IMAGE /// 05 캠페인이미지 PosConst.PGM_UPDATE_TYPE.CAMPAIGN /// 06 연습모드이미지 PosConst.PGM_UPDATE_TYPE.TEST_MODE /// public class PosImageDownload : Echo, IProcess { //private bool isStop = false; public bool Execute() { bool retValue = false; try { ComLog.WriteLog(ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "Start"); if (string.IsNullOrWhiteSpace(BasicInfo.IMGDownDate) == false) { base.OnEcho("POS operation image download skip."); System.Threading.Thread.Sleep(1000); ComLog.WriteLog(ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format(" => POS operation image download. Result={0} DownDate={1} ", "Skip", BasicInfo.IMGDownDate)); return retValue = true; } // 다운로드 정보 조회(IRT) 정보 획득 CmMessage cmCommPort = CmMessage.MakeMessageFromFile(Path.Combine(DirInfo.InstallDir, @"INI\CommPort.INI")); var commPort = ComLib.IntParse(ComLib.GetConfigInfo(cmCommPort, "SERVER", "SysInfoPort", "")); var commAddr = ServerInfo.SvrIP; ComLog.WriteLog(ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format(" => Inquery infomration. ip={0} port={1}", commAddr, commPort.ToString()), true); bool isSuccess = true; // 다운로드 이미지 목록 Dictionary imgDownList = new Dictionary(); imgDownList.Add(PosConst.PGM_UPDATE_TYPE.CONTENTS, "POS Contents image"); imgDownList.Add(PosConst.PGM_UPDATE_TYPE.CUSTOMER, "POS Customer display image"); imgDownList.Add(PosConst.PGM_UPDATE_TYPE.ITEM_IMAGE, "POS Item image"); imgDownList.Add(PosConst.PGM_UPDATE_TYPE.CAMPAIGN, "POS Campaign image"); imgDownList.Add(PosConst.PGM_UPDATE_TYPE.TEST_MODE, "POS Testmode image"); foreach (var lst in imgDownList) { for (var i = 0; i < 3; i++) { retValue = ImageDownload(lst.Key, lst.Value, commAddr, commPort); if (retValue == false) { isSuccess = false; } else { break; } System.Threading.Thread.Sleep(1000); } } if (isSuccess) { BasicInfo.IMGDownDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); retValue = true; } return retValue = isSuccess; } catch (Exception ex) { ComLog.WriteLog(ComLog.Level.Exception , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , " => Exception : " + ex.Message); return retValue = false; } finally { ComLog.WriteLog(ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format("End, Result={0}", retValue ? "Success" : "Failed")); } } public void Stop() { //isStop = true; } private bool ImageDownload(string downKind, string downName, string commIp, int commPort) { bool retValue = false; try { ComLib.CreateDirectory(DirInfo.DownDir); ComLib.DeleteDirectoryInFile(DirInfo.TempDir, 2); #region ### POS 파일 전송 요청 IRT FTP IP/PORT/PW/FilePath 획득 base.OnEcho(string.Format("Inquery ftp server information.\n{0}", downName)); // 통신해더 생성 string commHead = ItemColumn.MakeCommHeader(0, "06"); Hashtable htSendData = new Hashtable(); Hashtable htRecvData = new Hashtable(); htSendData.Add(Column.IQ_PGMUPDATE_REQ.DATA.INQ_TYPE, Column.IQ_PGMUPDATE_REQ.MSG_ID); htSendData.Add(Column.IQ_PGMUPDATE_REQ.DATA.FILE_KIND, downKind); htSendData.Add(Column.IQ_PGMUPDATE_REQ.DATA.FILE_APP_TY, "0"); htSendData.Add(Column.IQ_PGMUPDATE_REQ.DATA.FILE_YMDHMS, DateTime.Now.ToString("yyyyMMddHHmmss")); //htSendData.Add(Column.IQ_PGMUPDATE_REQ.DATA.DOWN_DIV, "U"); htSendData.Add(Column.IQ_PGMUPDATE_REQ.DATA.DOWN_DIV, "A"); NetworkJSON irt = new NetworkJSON(); int ret = irt.IRTSendReceive(commIp, commPort, 1000 * 20, commHead, htSendData, ref htRecvData); if (ret != ComLib.OK) { ComLog.WriteLog(ComLog.Level.Error , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , " => Server communication error"); return false; } string res = htRecvData[Column.IQ_INSTALL_STATUS_INQ.DATA.RES_CD].ToString(); ComLog.WriteLog(res != "00" ? ComLog.Level.Error : ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format(" => Inquery image download infomation, RespCode={0}, Result={1}", res, res == "00" ? "Success" : "Failed")); if (res != "00") { return retValue = false; } #endregion #region ### 이미지파일 다운로드 base.OnEcho(string.Format("{0} downloading.", downName)); var ftpHost = htRecvData[Column.IQ_PGMUPDATE_RSP.DATA.FTP_IP].ToString(); var ftpPort = ComLib.IntParse(htRecvData[Column.IQ_PGMUPDATE_RSP.DATA.FTP_PORT].ToString()); var ftpUser = htRecvData[Column.IQ_PGMUPDATE_RSP.DATA.FTP_ID].ToString(); var ftpPass = htRecvData[Column.IQ_PGMUPDATE_RSP.DATA.FTP_PWD].ToString(); var downList = htRecvData[Column.IQ_PGMUPDATE_RSP.DATA.VALUE].ToString().Split(new string[] { "#~" }, StringSplitOptions.None); var value = downList[0].Split('|'); var fileName = value[4].Trim(); var svrPath = value[3].Trim(); var locFile = Path.Combine(DirInfo.DownDir, fileName); ComLib.FileDelete(locFile); if (ftpPort == 0) ftpHost = string.Format("{0}:{1}", ftpHost, ftpPort.ToString()); FTP ftp = new FTP(ftpHost, ftpUser, ftpPass); if (ftp == null) return false; if (svrPath.Substring(svrPath.Length - 1, 1) != "/") svrPath += "/"; retValue = ftp.Download(svrPath + fileName, locFile); ComLog.WriteLog(ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format(" => FTP Download Result={0} File={1} {2}", retValue ? "Success" : "Failed", svrPath, fileName)); System.Threading.Thread.Sleep(300); #endregion #region ### 이미지 파일 적용 (압축해지, 파일복사) base.OnEcho(string.Format("Donwload image file copy.\n{0}", downName)); // 이미지 파일 적용 (압축해지, 파일복사) retValue = ComLib.ExcuteUnzip(DirInfo.WorkDir, locFile, DirInfo.TempDir, System.Diagnostics.ProcessWindowStyle.Hidden); ComLog.WriteLog(ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format(" => Download file unzip Result={0} File={1}", retValue ? "Success" : "Failed", locFile)); if (retValue == false) return retValue; System.Threading.Thread.Sleep(300); ComLib.CreateDirectory(DirInfo.InstallDir); //DirectoryInfo[] dir = new DirectoryInfo(DirInfo.TempDir).GetDirectories(); //foreach (DirectoryInfo d in dir) //{ // retValue = ComLib.DirectoryCopy(d.FullName, DirInfo.InstallDir, ""); // ComLog.WriteLog(ComLog.Level.trace // , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." // + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" // , string.Format(" => Download file copy Result={0} DestDirctory={1}", retValue ? "Success" : "Failed", DirInfo.InstallDir)); // if (retValue == false) return retValue; //} retValue = ComLib.DirectoryCopy(DirInfo.TempDir, DirInfo.InstallDir, ""); ComLog.WriteLog(ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format(" => Download file copy Result={0} DestDirctory={1}", retValue ? "Success" : "Failed", DirInfo.InstallDir)); if (retValue == false) return retValue; #endregion return retValue = true; } catch (Exception ex) { ComLog.WriteLog(ComLog.Level.Exception , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , " => Exception : " + ex.Message); return retValue = false; } finally { ComLog.WriteLog(ComLog.Level.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format(" => {0}/{1} download result={2}", downKind, downName, retValue ? "Success" : "Failed"), true); } } } }