Exemple #1
0
 /// <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 { }
 }
Exemple #2
0
        /// <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
        }