private void closeOnError(object socObj, string errMsg) { transferStatus = FTPStatus.NONE; closedOnError = true; closeFTPConnection(socObj); throw new Exception(errMsg); }
void Initialize() { transferStatus = FTPStatus.NONE; rcvSize = 0; fileName = ""; fileSize = 0; }
public override void ProcessMsg(object socObj) { base.ProcessMsg(socObj); StateObject stateObj = (StateObject)socObj; switch (transferStatus) { case FTPStatus.NONE: //파일수신정보 if (stateObj.Cmd == MsgDef.MSG_SEND_FILE) { this.fileName = stateObj.FileName; this.fileSize = stateObj.FileSize; validFullPath = Utils.getValidFileName(filePath, fileName, 0); tempFullPath = validFullPath + SocConst.TEMP_FILE_SUFFIX; //수신대기상태 stateObj.data = MsgDef.MSG_ACK; //파일수신상태로 변경 transferStatus = FTPStatus.RECEIVE_STREAM; this.SetBinary(); stateObj.status = SocHandlerStatus.RECEIVING; stateObj.ftpStatus = FTPStatus.RECEIVED_FILE_INFO; stateObj.socMessage = string.Format("파일수신정보[{0}/{1}]==>[{2}]", stateObj.FileName, stateObj.FileSize, validFullPath); Logger.info(stateObj); OnSocStatusChangedOnInfo(new SocStatusEventArgs(stateObj)); fs = File.Open(tempFullPath, FileMode.Create, FileAccess.Write); //수신대기 알림 if (SendMsg(stateObj) == SocCode.SOC_ERR_CODE) { closeOnError(stateObj, string.Format("파일수신 대기메시지 전송에러:FTPStatus.NONE/Msg[{0}]", stateObj.data)); } } else { closeOnError(stateObj, string.Format("Unknown Msg[{0}]:FTPStatus.NONE", stateObj.data)); } break; //파일 수신 case FTPStatus.RECEIVE_STREAM: //파일 전송 취소인경우 if (stateObj.Cmd == MsgDef.MSG_CANCEL) { //수신종료 stateObj.data = MsgDef.MSG_BYE; if (SendMsg(stateObj) == SocCode.SOC_ERR_CODE) { closeOnError(stateObj, string.Format("파일수신종료메시지 전송에러:FTPStatus.RECEIVE_STREAM/Msg[{0}]", stateObj.data)); } //종료로 상태변경 transferStatus = FTPStatus.SENT_BYE; stateObj.ftpStatus = FTPStatus.SENT_DONE; stateObj.status = SocHandlerStatus.DISCONNECTED; stateObj.socMessage = string.Format("파일수신종료/Msg[{0}]", MsgDef.MSG_BYE); Logger.info(stateObj); OnSocStatusChangedOnInfo(new SocStatusEventArgs(stateObj)); closeFTPConnection(stateObj); break; } //수신파일스트림 Write fs.Write(stateObj.buffer, 0, stateObj.bufferSize); rcvSize += stateObj.bufferSize; stateObj.socMessage = string.Format("수신중인 바이트:rcvSize[{0}]/fileSize[{1}]", rcvSize, fileSize); Logger.debug(stateObj); //수신완료 if (rcvSize >= fileSize) { fs.Close(); File.Move(tempFullPath, validFullPath); stateObj.socMessage = string.Format("수신완료한 바이트 rcvSize[{0}]/fileSize[{1}]", rcvSize, fileSize); transferStatus = FTPStatus.SENT_DONE; this.SetText(); } stateObj.data = string.Format(MsgDef.MSG_RCVCHECK_FMT, MsgDef.MSG_RCVCHECK, stateObj.bufferSize); stateObj.ftpStatus = FTPStatus.RECEIVE_STREAM; stateObj.fileSizeDone = rcvSize; OnSocStatusChangedOnDebug(new SocStatusEventArgs(stateObj)); stateObj.socMessage = string.Format("수신바이트 확인전송:Msg[{0}]", stateObj.data); Logger.debug(stateObj); if (SendMsg(stateObj) == SocCode.SOC_ERR_CODE) { closeOnError(stateObj, string.Format("수신바이트 확인전송에러:FTPStatus.RECEIVE_STREAM/Msg[{0}]", stateObj.data)); } break; //수신취소 case FTPStatus.RECEIVE_CANCELED: //취소전송 stateObj.data = MsgDef.MSG_CANCEL; if (SendMsg(stateObj) == SocCode.SOC_ERR_CODE) { closeOnError(stateObj, string.Format("파일수신취소메시지 전송에러:FTPStatus.RECEIVE_CANCELED/Msg[{0}]", stateObj.data)); } //완료로 상태변경 transferStatus = FTPStatus.SENT_DONE; stateObj.ftpStatus = FTPStatus.SENT_DONE; stateObj.socMessage = string.Format("파일수신취소/Msg[{0}]", stateObj.data); Logger.info(stateObj); OnSocStatusChangedOnInfo(new SocStatusEventArgs(stateObj)); break; //수신완료 case FTPStatus.SENT_DONE: if (stateObj.Cmd == MsgDef.MSG_COMPLETE) { //수신종료 stateObj.data = MsgDef.MSG_BYE; if (SendMsg(stateObj) == SocCode.SOC_ERR_CODE) { closeOnError(stateObj, string.Format("파일수신종료메시지 전송에러:FTPStatus.SENT_DONE/Msg[{0}]", stateObj.data)); } transferStatus = FTPStatus.SENT_BYE; stateObj.ftpStatus = FTPStatus.SENT_DONE; stateObj.status = SocHandlerStatus.DISCONNECTED; stateObj.socMessage = string.Format("파일수신종료:{0}", MsgDef.MSG_BYE); Logger.info(stateObj); OnSocStatusChangedOnInfo(new SocStatusEventArgs(stateObj)); closeFTPConnection(stateObj); } else { closeOnError(stateObj, string.Format("Unknown Msg[{0}]:FTPStatus.SENT_DONE", stateObj.data)); } break; } stateObj.socMessage = string.Format("Ftp ProcessMsg End"); if (fileReceivingCanceled) { transferStatus = FTPStatus.RECEIVE_CANCELED; fileReceivingCanceled = false; } Logger.debug(stateObj); }