/// <summary> /// 게이트웨이로 데이터동기화의 동기 처리 결과 메시지 전송. /// </summary> public bool SendResultOfSASProfileUpdate(uint requestEventID, int updateResult) { bool result = false; try { SyncResult syncResult = SyncResult.Success; if (updateResult != 0) { syncResult = SyncResult.Fail; } SYNCProtocolBase protoBase = IEASProtocolManager.CreateProtocolForSYNC(SYNCCmdValue.SyncResult); SYNCPrtCmd13 cmd13 = protoBase as SYNCPrtCmd13; cmd13.Result = syncResult; cmd13.Identifier = requestEventID; byte[] frameData = IEASProtocolManager.MakeFrameForSYNC(cmd13); result = this.sessionManager.SendData(frameData); } catch (Exception ex) { System.Console.WriteLine("[CommunicationManager] SendResultOfSASProfileUpdate( " + ex.ToString() + " )"); FileLogManager.GetInstance().WriteLog("[CommunicationManager] SendResultOfSASProfileUpdate( Exception=[" + ex.ToString() + "] )"); return(false); } return(result); }
/// <summary> /// 큐에 저장된 패킷 데이터를 프레임 단위로 파싱. /// </summary> private int ParsingQueuingData(byte[] queuingData) { try { if (queuingData == null) { System.Console.WriteLine("[CommunicationManager] 파싱 실패 : 입력 파라미터가 널"); return(-1); } AnalyzeResult frameResult = IEASProtocolManager.AnalyzeFrame(this.remainderPacket, queuingData); if (frameResult == null || frameResult.FrameInfo == null) { System.Console.WriteLine("[CommunicationManager] 파싱 실패 : 입력 파라미터가 널"); return(-2); } // 프레임을 분리하고 남은 불완전 데이터를 남은데이터 보관 버퍼(로컬)에 저장 this.remainderPacket = null; if (frameResult.RemainderFrame != null && frameResult.RemainderFrame.Length > 0) { this.remainderPacket = new byte[frameResult.RemainderFrame.Length]; Buffer.BlockCopy(frameResult.RemainderFrame, 0, this.remainderPacket, 0, frameResult.RemainderFrame.Length); } // 파싱 실패 체크: 프레임 단위로 분리할 만한 데이터 크기가 아닌 경우 등 if (frameResult.FrameInfo.Count == 0) { System.Console.WriteLine("[CommunicationManager] 프레임 분리 실패(길이 부족 등)"); return(-3); } for (int index = 0; index < frameResult.FrameInfo.Count; index++) { Frame currentFrame = frameResult.FrameInfo[index]; if (currentFrame.HeaderKind == HeaderKind.KCAP) { IEASProtocolBase baseData = IEASProtocolManager.ParseFrameForKCAP(currentFrame.Data); DistributeKCAPCommandData(baseData.CmdValue, baseData); } else { SYNCProtocolBase baseData = IEASProtocolManager.ParseFrameForSYNC(currentFrame.Data); DistributeSYNCCommandData(baseData.CmdValue, baseData); } } } catch (Exception ex) { System.Console.WriteLine("[CommunicationManager] ParsingQueuingData( " + ex.ToString() + " )"); FileLogManager.GetInstance().WriteLog("[CommunicationManager] ParsingQueuingData( Exception=[" + ex.ToString() + "] )"); return(-99); } return(0); }
/// <summary> /// 게이트웨이로 개별 해쉬키 체크 결과 전송. /// 전체 해쉬키가 불일치일 때만 개별해쉬키 체크가 수행되므로, 불일치 프로필 아이디가 널인 경우는 논리적으로는 있을 수 없다. /// </summary> public bool SendResultOfCheckSingleHashKey(uint requestEventID, List <string> lstProfileID) { System.Console.WriteLine("[CommunicationManager] SendResultOfCheckSingleHashKey (requestEventID=[" + requestEventID + "])"); bool sendResult = true; try { if (lstProfileID == null || lstProfileID.Count <= 0) { System.Console.WriteLine("[ERROR] 모든 데이터가 동기화된 상태!!!"); // 빈 패킷이라도 보내야 하나? } else { uint totalCount = (uint)(lstProfileID.Count()); uint currentNo = 1; foreach (string profileID in lstProfileID) { SYNCProtocolBase protoBase = IEASProtocolManager.CreateProtocolForSYNC(SYNCCmdValue.ChkSingleHashResult); SYNCPrtCmd12 cmd12 = protoBase as SYNCPrtCmd12; cmd12.Identifier = requestEventID; cmd12.TotalCount = totalCount; cmd12.Num = currentNo++; cmd12.ProfileID = profileID; byte[] frameData = IEASProtocolManager.MakeFrameForSYNC(cmd12); bool result = this.sessionManager.SendData(frameData); if (!result) { System.Console.WriteLine("패킷 전송 실패(currentNo=" + currentNo + ")"); sendResult = false; } } } } catch (Exception ex) { System.Console.WriteLine("[CommunicationManager] SendResultOfCheckSingleHashKey( " + ex.ToString() + " )"); FileLogManager.GetInstance().WriteLog("[CommunicationManager] SendResultOfCheckSingleHashKey( Exception=[" + ex.ToString() + "] )"); return(false); } System.Console.WriteLine("[CommunicationManager] SendResultOfCheckSingleHashKey (sendResult=[" + sendResult.ToString() + "])"); return(sendResult); }
/// <summary> /// 데이터 동기화 수신 데이터 CRC16 체크 결과 전송 /// </summary> /// <param name="validationResult"></param> /// <returns></returns> public int SendResultOfCheckDataValidation(uint requestEventID, DataValidationCheckResult validationResult, List <uint> lstPacketNo = null) { int result = 0; try { SYNCProtocolBase protoBase = IEASProtocolManager.CreateProtocolForSYNC(SYNCCmdValue.RecvResult); SYNCPrtCmd10 cmd10 = protoBase as SYNCPrtCmd10; cmd10.Identifier = requestEventID; cmd10.Result = RecvResult.Success; if (lstPacketNo == null) { cmd10.Num = 0; byte[] frameData = IEASProtocolManager.MakeFrameForSYNC(cmd10); bool sendResult = this.sessionManager.SendData(frameData); if (!sendResult) { result--; } } else { foreach (uint packetNo in lstPacketNo) { cmd10.Num = packetNo; byte[] frameData = IEASProtocolManager.MakeFrameForSYNC(cmd10); bool sendResult = this.sessionManager.SendData(frameData); if (!sendResult) { result--; } } } } catch (Exception ex) { System.Console.WriteLine("[CommunicationManager] SendResultOfCheckDataValidation( " + ex.ToString() + " )"); FileLogManager.GetInstance().WriteLog("[CommunicationManager] SendResultOfCheckDataValidation( Exception=[" + ex.ToString() + "] )"); return(-99); } return(result); }
private int DistributeSYNCCommandData(SYNCCmdValue command, SYNCProtocolBase baseData) { System.Console.WriteLine("[CommunicationManager] SYNC 프레임 데이터 분배 - command(" + command.ToString() + ")"); try { switch (command) { case SYNCCmdValue.ChkTotalHash: // 전체 해쉬키 체크 요청 case SYNCCmdValue.ChkSingleHash: case SYNCCmdValue.UpdateProfile: { if (this.NotifyDataSyncRequested != null) { SynchronizationReqData syncReqData = ConvertToSynchronizationReqData(command, baseData); this.NotifyDataSyncRequested(this, new DataSyncEvtArgs(syncReqData)); } } break; default: { // do nothing } break; } } catch (Exception ex) { System.Console.WriteLine("[CommunicationManager] DistributeSYNCCommandData( " + ex.ToString() + " )"); FileLogManager.GetInstance().WriteLog("[CommunicationManager] DistributeSYNCCommandData( Exception=[" + ex.ToString() + "] )"); return(-99); } return(0); }
/// <summary> /// 게이트웨이로 전체 해쉬키 체크 결과 전송 /// </summary> public bool SendResultOfCheckEntireHashKey(uint requestEventID, bool isMatched) { bool result = false; try { ChkTotalHashResult checkResult = (isMatched ? ChkTotalHashResult.Success : ChkTotalHashResult.Fail); SYNCProtocolBase protoBase = IEASProtocolManager.CreateProtocolForSYNC(SYNCCmdValue.ChkTotalHashResult); SYNCPrtCmd11 cmd11 = protoBase as SYNCPrtCmd11; cmd11.Result = checkResult; cmd11.Identifier = requestEventID; byte[] frameData = IEASProtocolManager.MakeFrameForSYNC(cmd11); result = this.sessionManager.SendData(frameData); } catch (Exception ex) { System.Console.WriteLine("[CommunicationManager] SendResultOfCheckEntireHashKey( " + ex.ToString() + " )"); FileLogManager.GetInstance().WriteLog("[CommunicationManager] SendResultOfCheckEntireHashKey( Exception=[" + ex.ToString() + "] )"); return(false); } return(result); }
private SynchronizationReqData ConvertToSynchronizationReqData(SYNCCmdValue command, SYNCProtocolBase baseData) { SynchronizationReqData reqData = null; switch (command) { case SYNCCmdValue.ChkTotalHash: // 전체 해쉬키 체크 요청 { reqData = new SynchronizationReqData(); reqData.Command = DataSyncCommand.ChkEntireHashKey; SYNCPrtCmd1 protoCmd1 = baseData as SYNCPrtCmd1; reqData.EventID = protoCmd1.Identifier; reqData.ProfileHashKey = protoCmd1.HashKey; reqData.Crc16 = protoCmd1.Crc16; } break; case SYNCCmdValue.ChkSingleHash: { reqData = new SynchronizationReqData(); reqData.Command = DataSyncCommand.ChkSingleHashKey; SYNCPrtCmd2 protoCmd2 = baseData as SYNCPrtCmd2; reqData.EventID = protoCmd2.Identifier; reqData.TotalPacketCnt = protoCmd2.TotalCount; reqData.CurrentPacketNo = protoCmd2.Num; reqData.ProfileID = protoCmd2.ProfileID; reqData.ProfileHashKey = protoCmd2.HashKey; reqData.Crc16 = protoCmd2.Crc16; } break; case SYNCCmdValue.UpdateProfile: { reqData = new SynchronizationReqData(); reqData.Command = DataSyncCommand.UpdateProfileData; SYNCPrtCmd3 protoCmd3 = baseData as SYNCPrtCmd3; reqData.EventID = protoCmd3.Identifier; reqData.TotalPacketCnt = protoCmd3.TotalCount; reqData.CurrentPacketNo = protoCmd3.Num; switch (protoCmd3.Mode) { case SyncUpdateMode.Regist: reqData.Mode = ProfileUpdateMode.Regist; break; case SyncUpdateMode.Modify: reqData.Mode = ProfileUpdateMode.Modify; break; case SyncUpdateMode.Delete: reqData.Mode = ProfileUpdateMode.Delete; break; default: break; } reqData.ProfileID = protoCmd3.ID; reqData.SystemProfile = new SASProfile(); reqData.SystemProfile.ID = protoCmd3.ID; reqData.SystemProfile.Name = protoCmd3.SystemName; reqData.SystemProfile.AuthCode = protoCmd3.AuthCode; reqData.SystemProfile.KindCode = protoCmd3.SystemKindCode; reqData.SystemProfile.IpType = IPType.IPv4; if (protoCmd3.IPType == IPAddressType.IPv4) { reqData.SystemProfile.IpType = IPType.IPv4; } else if (protoCmd3.IPType == IPAddressType.IPv6) { reqData.SystemProfile.IpType = IPType.IPv6; } else { // } reqData.SystemProfile.IpAddress = protoCmd3.IPAddress; reqData.SystemProfile.Latitude = protoCmd3.Latitude.ToString(); reqData.SystemProfile.Longitude = protoCmd3.Longitude.ToString(); reqData.SystemProfile.AssignedIAGWRegionCode = protoCmd3.AssignedIAGWRegionCode; reqData.SystemProfile.Address = protoCmd3.Address; reqData.SystemProfile.ManagerName = protoCmd3.ManagerName; reqData.SystemProfile.ManagerDepartment = protoCmd3.ManagerDepartment; reqData.SystemProfile.ManagerPhone = protoCmd3.ManagerPhone; } break; default: { // do nothing } break; } return(reqData); }