Пример #1
0
        public void OnSent(SentEventArgs args)
        {
            InvokeEventLog(String.Format("状态:{0}:{1}", args.SmsInfo, args.Result));

            _smsQueue.Set(args.SmsInfo, args.Result ? 500 : 501);

            EventHandler <SentEventArgs> handler = Sent;

            if (handler != null)
            {
                handler(this, args);
            }


            #region 故障处理

            //TODO:16:32 2011-12-07 临时代码 // 重新设置 Modem
            if (args.Result == false)
            {
                //设备重置次数
                const int MAX_RESET = 3;

                string com = args.SmsInfo.Com;
                if (_smsPool.ContainsKey(args.SmsInfo.Com))
                {
                    SMSSender smsSender = _smsPool[args.SmsInfo.Com];
                    if (smsSender.HasError)
                    {
                        int reset = ++smsSender.Reset;
                        if (reset < MAX_RESET)
                        {
                            InvokeEventLog(String.Format("重置:{0}", com));

                            Queue <SMSSendInfo> smsSendInfos = smsSender.Stop();

                            foreach (SMSSendInfo sendInfo in _smsPool[com].Result)
                            {
                                if (sendInfo.State == 1)
                                {
                                    smsSendInfos.Enqueue(sendInfo);
                                }
                            }

                            RemoveModem(com);


                            ////Create
                            smsSender = CreateModem(com, 9600);
                            if (smsSender != null)
                            {
                                foreach (SMSSendInfo sendInfo in smsSendInfos)
                                {
                                    args.SmsInfo.State = 0;
                                    //smsSender.AsyncSend(sendInfo);
                                    AsyncSend(sendInfo);
                                }
                                _smsPool[com].Reset = reset;
                            }
                        }
                        else
                        {
                            //drive has a error .
                            InvokeEventLog(String.Format("设备错误:{0}", com));
                            RemoveModem(com);
                        }
                    }
                }
            }
            //TODO:End

            #endregion
        }