Exemplo n.º 1
0
        private void HandleStorCommand(String argument)
        {
            if (!isLogin)
            {
                SendResponse(ProtocolResponse.NotLoggedIn, "로그인 후 사용하세요.");
                return;
            }

            if (!ConnectUserDTP())
            {
                return;
            }

            FileModel userFile = FileModel.FromString(argument);

            userFile.UserId = userId;

            FileModel serverFile = fileDao.ReadFileUsingUniqueId(userFile);
            FileIOLog mFileIOLog = new FileIOLog();

            if (serverFile != null)
            {
                logger.Info("파일 로그를 남깁니다.");

                mFileIOLog.UserId            = serverFile.UserId;
                mFileIOLog.IOTime            = DateTime.Now;
                mFileIOLog.FileId            = serverFile.FileId;
                mFileIOLog.FileIOLogSequence = fileIOLogDao.ReadMaxFileIOLogSequence(serverFile) + 1;

                if (serverFile.Name == userFile.Name)
                {
                    mFileIOLog.IOType = "C";
                }
                else
                {
                    mFileIOLog.IOType = "R";
                }

                fileIOLogDao.CreateFileIOLog(mFileIOLog);

                logger.Info("파일 최신화를 시작합니다.");
                logger.Info(serverFile.ToString());

                if (serverFile.LastUpdateTime == userFile.LastUpdateTime)
                {
                    logger.Info("이미 최신화 되어 있습니다.");

                    serverDTP.SendAlreadyTheNewestFile();
                    serverDTP.CloseServerDTP();

                    SendResponse(ProtocolResponse.CloseDataConnection, "이미 최신화 되어 있습니다.");
                }
                else
                {
                    logger.Info("최신화를 위해 체크섬을 전송합니다.");
                    serverDTP.SendChecksumStream(serverFile);

                    logger.Info("변경 스트림을 수신합니다.");
                    serverDTP.ReceiveDifferenceStream(serverFile);
                    serverDTP.CloseServerDTP();

                    SendResponse(ProtocolResponse.CloseDataConnection, "파일의 최신화가 완료되었습니다.");
                }

                serverFile.Name           = userFile.Name; // 2014-07-24 ADD by KS
                serverFile.Size           = userFile.Size; // 2014-07-24 ADD by KS
                serverFile.LastUpdateTime = userFile.LastUpdateTime;
                fileDao.UpdateFile(serverFile);
            }
            else
            {
                logger.Info("새 파일 전송을 시작합니다.");

                userFile.UserId = userId;
                userFile.FileId = fileDao.ReadMaxFileId(userId) + 1;
                fileDao.CreateFile(userFile);

                logger.Info("파일 로그를 남깁니다.");

                mFileIOLog.UserId            = userId;
                mFileIOLog.IOTime            = DateTime.Now;
                mFileIOLog.FileId            = userFile.FileId;
                mFileIOLog.IOType            = "N";
                mFileIOLog.FileIOLogSequence = fileIOLogDao.ReadMaxFileIOLogSequence(userFile) + 1;
                fileIOLogDao.CreateFileIOLog(mFileIOLog);

                serverDTP.SendToRequestNewFile();
                serverDTP.ReceiveFileStream(userFile);
                serverDTP.CloseServerDTP();

                SendResponse(ProtocolResponse.CloseDataConnection, "파일이 정상적으로 수신되었습니다.");
            }
        }