/// <summary> /// Updates the A sync session. /// </summary> /// <param name="ASync">The A sync.</param> private void UpdateASyncSession(eTerm443Async ASync) { try { ConnectSetup TSession = ASyncSetup.AsynCollection.SingleOrDefault <ConnectSetup>(Fun => Fun.userPass == ASync.userPass && Fun.userName == ASync.userName); SocketTraffic Traffic = TSession.Traffics[TSession.Traffics.IndexOf(new SocketTraffic(DateTime.Now.ToString(@"yyyyMM")))]; Traffic.Traffic++; Traffic.UpdateDate = DateTime.Now; } catch { } }
/// <summary> /// 追加活动配置. /// </summary> /// <param name="Async">配置实体.</param> public void AppendAsync(eTerm443Async Async) { #region 授权校验 if (__asyncList.Count >= LicenceManager.Instance.LicenceBody.MaxAsync) { return; } #endregion Async.Instruction = AsyncStackNet.Instance.ASyncSetup.SequenceDirective; Async.IgInterval = AsyncStackNet.Instance.ASyncSetup.SequenceRate ?? 5; Async.ReconnectDelay = ASyncSetup.ReconnectDelay; #region OnAsynConnect Async.OnAsynConnect += new EventHandler <AsyncEventArgs <eTerm443Async> >( delegate(object sender, AsyncEventArgs <eTerm443Async> e) { if (OnAsyncConnect != null) { OnAsyncConnect(sender, e); } } ); #endregion #region OnReadPacket Async.OnReadPacket += new EventHandler <eTerm.AsyncSDK.AsyncEventArgs <eTerm443Packet, eTerm443Packet, eTerm443Async> >( delegate(object sender, AsyncEventArgs <eTerm443Packet, eTerm443Packet, eTerm443Async> e) { if (e.Session.TSession != null) { byte[] PacketBytes = e.InPacket.OriginalBytes; PacketBytes[8] = e.Session.TSession.SID; PacketBytes[9] = e.Session.TSession.RID; e.Session.TSession.IsCompleted = true; e.Session.TSession.SendPacket(PacketBytes); } UpdateASyncSession(e.Session); if (LicenceManager.Instance.LicenceBody.AllowAfterValidate) { try { string Command = Encoding.GetEncoding("gb2312").GetString(e.Session.UnInPakcet(e.OutPacket)).Trim().ToLower(); foreach (var PlugIn in from entry in AsyncStackNet.Instance.ASyncSetup.PlugInCollection where Command.ToLower().StartsWith(entry.PlugInName.ToLower()) orderby entry.PlugInName ascending select entry) { if (PlugIn.ASyncInstance == null) { continue; } PlugIn.ASyncInstance.BeginExecute(new AsyncCallback(delegate(IAsyncResult iar) { PlugIn.ASyncInstance.EndExecute(iar); }), e.Session, e.InPacket, e.OutPacket, LicenceManager.Instance.LicenceBody); } } catch { } } if (this.OnAsyncReadPacket != null) { this.OnAsyncReadPacket(sender, e); } } ); #endregion #region OnAsyncTimeout Async.OnAsyncTimeout += new EventHandler <AsyncEventArgs <eTerm443Async> >( delegate(object sender, AsyncEventArgs <eTerm443Async> e) { if (e.Session.TSession != null) { e.Session.TSession.SendPacket(__eTerm443Packet.AsyncSocketTimeoutInfo(e.Session.TSession.SID, e.Session.TSession.RID)); } if (this.OnAsyncTimeout != null) { this.OnAsyncTimeout(sender, e); } } ); #endregion #region OnBeginConnect Async.OnBeginConnect += new EventHandler <AsyncEventArgs <eTerm443Async> >( delegate(object sender, AsyncEventArgs <eTerm443Async> e) { if (this.OnBeginConnect != null) { this.OnBeginConnect(sender, e); } } ); #endregion #region OnAsyncPacketSent Async.OnPacketSent += new EventHandler <AsyncEventArgs <eTerm443Packet, eTerm443Packet, eTerm443Async> >( delegate(object sender, AsyncEventArgs <eTerm443Packet, eTerm443Packet, eTerm443Async> e) { if (this.OnAsyncPacketSent != null) { this.OnAsyncPacketSent(sender, e); } } ); #endregion #region OnValidated Async.OnValidated += new EventHandler <AsyncEventArgs <eTerm443Packet, eTerm443Async> >( delegate(object sender, AsyncEventArgs <eTerm443Packet, eTerm443Async> e) { if (this.OnAsyncValidated != null) { this.OnAsyncValidated(sender, e); } string CurrentMonth = DateTime.Now.ToString(@"yyyyMM"); ConnectSetup TSession = ASyncSetup.AsynCollection.SingleOrDefault <ConnectSetup>(Fun => Fun.userPass == e.Session.userPass && Fun.userName == e.Session.userName); if (!TSession.Traffics.Contains(new SocketTraffic(CurrentMonth))) { TSession.Traffics.Add(new SocketTraffic() { MonthString = CurrentMonth, Traffic = 0.0, UpdateDate = DateTime.Now }); } SocketTraffic Traffic = TSession.Traffics[TSession.Traffics.IndexOf(new SocketTraffic(CurrentMonth))]; if (Traffic.Traffic >= TSession.FlowRate) { e.Session.ObligatoryReconnect = false; e.Session.Close(); return; } this.__asyncList.Add(Async); } ); #endregion #region CallBack Async.TSessionReconnectValidate = new AsyncBase <eTerm443Async, eTerm443Packet> .ValidateTSessionCallback(delegate(eTerm443Packet Packet, eTerm443Async ASync) { return((ASyncSetup.AutoReconnect ?? false) && Async.ReconnectCount < (ASyncSetup.MaxReconnect ?? 10)); }); #endregion #region OnAsyncDisconnect Async.OnAsyncDisconnect += new EventHandler <AsyncEventArgs <eTerm443Async> >( delegate(object sender, AsyncEventArgs <eTerm443Async> e) { UpdateASyncSession(e.Session); this.__asyncList.Remove(sender as eTerm443Async); if (this.OnAsyncDisconnect != null) { this.OnAsyncDisconnect(sender, e); } if (e.Session.TSession == null) { return; } if (!e.Session.TSession.IsCompleted) { e.Session.TSession.SendPacket(__eTerm443Packet.BuildSessionPacket(e.Session.TSession.SID, e.Session.TSession.RID, "指令错误!")); } e.Session.TSession.Async443 = null; } ); #endregion #region 调用 Async.Connect(Async.Address, Async.Port, Async.IsSsl); #endregion }