/// <summary> /// 指令结果解析适配器. /// </summary> /// <param name="Msg">指令结果集合.</param> /// <returns></returns> protected override ASyncResult ResultAdapter(string Msg) { Msg = string.Join("\r", Msg.Split(new char[]{'\0'}, StringSplitOptions.RemoveEmptyEntries)); RTResult Rt = new RTResult(); ParseContract(Rt, Msg); ParseGroup(Rt, Msg); ParsePassager(Rt, Msg); ParseSeg(Rt, Msg); return Rt; }
/// <summary> /// 指令结果解析适配器. /// </summary> /// <param name="Msg">指令结果集合.</param> /// <returns></returns> protected override ASyncResult ResultAdapter(string Msg) { Msg = string.Join("\r", Msg.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries)); RTResult Rt = new RTResult(); ParseContract(Rt, Msg); ParseGroup(Rt, Msg); ParsePassager(Rt, Msg); ParseSeg(Rt, Msg); return(Rt); }
/// <summary> /// Parses the passager. /// </summary> /// <param name="Rt">The rt.</param> /// <param name="Msg">The MSG.</param> private void ParsePassager(RTResult Rt, string Msg) { Rt.getPassengers = new List <PNRPassengerResult>(); foreach (Match m in Regex.Matches(Msg.Replace("\0", "\r"), @"(\d+\.(([A-Z]+\/[A-Z]+)|([\u4e00-\u9fa5]+))\s*(NI)?\s*)+" + this.__pnr, RegexOptions.IgnoreCase | RegexOptions.Multiline)) { foreach (Capture c in m.Groups[2].Captures) { Rt.getPassengers.Add(new PNRPassengerResult(c.Value)); } } }
/// <summary> /// Parses the seg. /// </summary> /// <param name="Rt">The rt.</param> /// <param name="Msg">The MSG.</param> private void ParseSeg(RTResult Rt, string Msg) { Rt.getAirSegs = new List <PNRAirSegResult>(); foreach (Match m in Regex.Matches(Msg.Replace("\0", "\r"), @"\d+\.\s+(\w{2}\d+)\s+([A-Z])\s+([A-Z]{2}\d{2}[A-Z]{3})\s+([A-Z]{3})([A-Z]{3})\s+(\w{3})\s+(\d{4})\s+(\d{4})\s+", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { PNRAirSegResult seg = new PNRAirSegResult(); seg.getActionCode = m.Groups[6].Value; seg.getAirNo = m.Groups[1].Value; seg.getArrivalTime = m.Groups[8].Value; seg.getDepartureTime = m.Groups[7].Value; seg.getDesCity = m.Groups[5].Value; seg.getFltClass = m.Groups[2].Value; seg.getOrgCity = m.Groups[4].Value; Rt.getAirSegs.Add(seg); } }
/// <summary> /// 开始线程. /// </summary> /// <param name="SESSION">会话端.</param> /// <param name="InPacket">入口数据包.</param> /// <param name="OutPacket">出口数据包.</param> /// <param name="Key">The key.</param> protected override void ExecutePlugIn(eTerm.AsyncSDK.Core.eTerm363Session SESSION, eTerm.AsyncSDK.Core.eTerm363Packet InPacket, eTerm.AsyncSDK.Core.eTerm363Packet OutPacket, eTerm.AsyncSDK.AsyncLicenceKey Key) { Match PnrMatch = Regex.Match(Encoding.GetEncoding("gb2312").GetString(SESSION.UnInPakcet(InPacket)).Trim(), @"^!SMSPNR\s+([A-Z0-9]{6,6})\s+(\d+)", RegexOptions.Multiline | RegexOptions.IgnoreCase); string Pnr = string.Empty; string Mobile = string.Empty; if (PnrMatch == null) { SESSION.SendPacket(__eTerm443Packet.BuildSessionPacket(SESSION.SID, SESSION.RID, "指令格式错误!")); return; } Pnr = PnrMatch.Groups[1].Value; Mobile = PnrMatch.Groups[2].Value; RTCommand Rt = new RTCommand(); IPEndPoint ServerEP = SESSION.AsyncSocket.LocalEndPoint as IPEndPoint; Rt.Connect(ServerEP.Address.ToString(), ServerEP.Port, SESSION.userName, SESSION.userPass); if (SESSION.Async443 != null) { SESSION.Async443.TSession = null; } RTResult Result = Rt.retrieve(Pnr) as RTResult; StringBuilder sb = new StringBuilder(); foreach (PNRAirSegResult Seg in Result.getAirSegs) { sb.AppendFormat("航段:{0} {1}-{2} {3} {4}\r", Seg.getAirNo, Seg.getOrgCity, Seg.getDesCity, Seg.getDepartureTime, Seg.getArrivalTime); } foreach (PNRPassengerResult Inf in Result.getPassengers) { sb.AppendFormat("旅客:{0}\r", Inf.getName); } sb.AppendFormat("{0} Pnr信息已经发送至:{1}", Pnr, Mobile); SESSION.SendPacket(__eTerm443Packet.BuildSessionPacket(SESSION.SID, SESSION.RID, sb.ToString() )); }
/// <summary> /// Parses the seg. /// </summary> /// <param name="Rt">The rt.</param> /// <param name="Msg">The MSG.</param> private void ParseSeg(RTResult Rt, string Msg) { Rt.getAirSegs = new List<PNRAirSegResult>(); foreach (Match m in Regex.Matches(Msg.Replace("\0", "\r"), @"\d+\.\s+(\w{2}\d+)\s+([A-Z])\s+([A-Z]{2}\d{2}[A-Z]{3})\s+([A-Z]{3})([A-Z]{3})\s+(\w{3})\s+(\d{4})\s+(\d{4})\s+", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { PNRAirSegResult seg = new PNRAirSegResult(); seg.getActionCode = m.Groups[6].Value; seg.getAirNo = m.Groups[1].Value; seg.getArrivalTime = m.Groups[8].Value; seg.getDepartureTime = m.Groups[7].Value; seg.getDesCity = m.Groups[5].Value; seg.getFltClass = m.Groups[2].Value; seg.getOrgCity = m.Groups[4].Value; Rt.getAirSegs.Add(seg); } }
/// <summary> /// Parses the passager. /// </summary> /// <param name="Rt">The rt.</param> /// <param name="Msg">The MSG.</param> private void ParsePassager(RTResult Rt, string Msg) { Rt.getPassengers =new List<PNRPassengerResult>(); foreach (Match m in Regex.Matches(Msg.Replace("\0", "\r"), @"(\d+\.(([A-Z]+\/[A-Z]+)|([\u4e00-\u9fa5]+))\s*(NI)?\s*)+" + this.__pnr, RegexOptions.IgnoreCase | RegexOptions.Multiline)) { foreach (Capture c in m.Groups[2].Captures) { Rt.getPassengers.Add(new PNRPassengerResult(c.Value)); } } }
/// <summary> /// Parses the group. /// </summary> /// <param name="Rt">The rt.</param> /// <param name="Msg">The MSG.</param> private void ParseGroup(RTResult Rt, string Msg) { }
/// <summary> /// Parses the contract. /// </summary> /// <param name="Rt">The rt.</param> /// <param name="Msg">The MSG.</param> private void ParseContract(RTResult Rt, string Msg) { }