public FTPRcvObj(FTPRcvObj obj, string receiverId) { RemoteEndPoint = obj.RemoteEndPoint; Key = obj.Key; FileName = obj.FileName; FileSize = obj.FileSize; SenderId = obj.SenderId; ReceiverId = receiverId; }
/// <summary> /// TcpClient인 경우 처리 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected virtual void ProcessOnMessageReceived(object sender, SocStatusEventArgs e) { //OnMessageReceived(e); switch (e.Status.Cmd) { case MsgDef.MSG_TEXT: { OnTCPMsgReceived(e); break; } case MsgDef.MSG_BYE: //처리없음 break; case MsgDef.MSG_FTP_INFO_TO_RCV: //받는쪽. 파일전송의사가 전달됨 //1. 서버로 재전송 { //string msg = e.Status.Data.Substring(MsgDef.MSG_TEXT.Length+1); //"MSG|..." //this.Send(e.Status.Data); //2. 하위단에서 이벤트처리토록 둠. OnManagerStatusChanged(string.Format("2단계 서버 =>전송자 파일전송공지[{0}]", e.Status.Data)); string[] msgToken = e.Status.Data.Split(SocConst.TOKEN); string senderId = msgToken[1]; string fileName = msgToken[2]; long fileSize = Convert.ToInt64(msgToken[3]); string mapKey = SocUtils.GenerateFTPClientKey(mKey, fileName, fileSize, senderId); FTPRcvObj rcvObj = new FTPRcvObj((IPEndPoint)e.Status.Soc.RemoteEndPoint, mapKey, fileName, fileSize, senderId); OnFTPSendingNotified(new SocFTPInfoEventArgs <FTPRcvObj>(rcvObj)); break; } case MsgDef.MSG_FTP_READY_TO_SND: //header|(senderid|ip)|filename|filesize|(receiverId|ip or m) 'm'은 서버 { //수신준비된것이 확인됨.==> FTP기동 //필요한 인자: 파일정보, 수신자정보 OnManagerStatusChanged(string.Format("4단계 서버=>전송자 파일수신준비완료[{0}]", e.Status.Data)); string[] msgToken = e.Status.Data.Split(SocConst.TOKEN); string fileName = msgToken[2]; long fileSize = Convert.ToInt64(msgToken[3]); string receiverId = msgToken[4]; string mapKey = SocUtils.GenerateFTPClientKey(mKey, fileName, fileSize, receiverId); FTPSendObj sendObj = mFileInfoMap[mapKey]; string fullFileName = sendObj.FileName; if (mFileInfoMap.ContainsKey(mapKey)) { mFileInfoMap.Remove(mapKey); } StartFTP(sendObj.RemoteEndPoint, receiverId, fullFileName, fileSize); Thread thServer = new Thread(new ParameterizedThreadStart(SendFile)); thServer.Start((object)mapKey); OnFTPSendingAccepted(new SocFTPInfoEventArgs <FTPSendObj>(sendObj)); break; } case MsgDef.MSG_FTP_REJECT_TO_SND: //header|(senderid|ip)|filename|filesize|(receiverId|ip or m) 'm'은 서버 { //파일전송의사가 전달됨 //처리없음 OnManagerStatusChanged(string.Format("4단계 서버=>전송자 파일수신준비거부[{0}]", e.Status.Data)); string[] msgToken = e.Status.Data.Split(SocConst.TOKEN); string fileName = msgToken[2]; long fileSize = Convert.ToInt64(msgToken[3]); string receiverId = msgToken[4]; string mapKey = SocUtils.GenerateFTPClientKey(mKey, fileName, fileSize, receiverId); FTPSendObj sendObj = mFileInfoMap[mapKey]; OnFTPSendingRejected(new SocFTPInfoEventArgs <FTPSendObj>(sendObj)); break; } default: break; } }