/// <summary>
        /// Does the work.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void DoWork(object sender, ElapsedEventArgs e)
        {
            if (isRunning)
            {
                return;
            }

            if (messageGatewayService == null || messageGatewayService.Gateways.Count() == 0)
            {
                return;
            }

            if (log.IsDebugEnabled)
            {
                log.DebugFormat("[{0}]: Polling from DSN [{1}]", messenger.Name, messenger.Dsn);
            }
            try
            {
                isRunning = true;
                DataTable dt = MessengerHelper.GetRecords(messenger);
                if (dt.Rows.Count > 0)
                {
                    List <IMessage> outgoingMessages = new List <IMessage>();
                    try
                    {
                        foreach (DataRow row in dt.Rows)
                        {
                            Sms sms = Sms.NewInstance();
                            sms.DestinationAddress = row[messenger.DestNoColName].ToString();
                            string msgColName = messenger.MsgColName;
                            if (string.IsNullOrEmpty(msgColName))
                            {
                                sms.Content = messenger.DefaultTextMsg;
                            }
                            else
                            {
                                sms.Content = row[msgColName].ToString();
                            }
                            sms.ValidityPeriod = MessageValidPeriod.OneDay;

                            if (string.IsNullOrEmpty(messenger.MsgPriorityColName))
                            {
                                sms.QueuePriority = EnumMatcher.MessagePriority[messenger.DefaultMsgPriority];
                            }
                            else
                            {
                                sms.QueuePriority = EnumMatcher.MessagePriority[row[messenger.MsgPriorityColName].ToString()];
                            }

                            if (!string.IsNullOrEmpty(messenger.MsgAlertColName))
                            {
                                sms.DcsMessageClass = EnumMatcher.MessageClass[row[messenger.MsgAlertColName].ToString()];
                            }
                            sms.Identifier = MessengerHelper.GenerateMessageId(messenger, row[messenger.UniqMsgIdColName].ToString());
                            outgoingMessages.Add(sms);
                            MessengerHelper.UpdateStatus(messenger, row[messenger.UniqMsgIdColName].ToString(), messenger.StatusColUpdateSendingValue);
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Error(string.Format("Messenger [{0}] encountered error in sending", messenger.Name), ex);
                    }

                    if (outgoingMessages.Count > 0)
                    {
                        int count = messageGatewayService.SendMessages(outgoingMessages);
                        log.InfoFormat("Database messenger [{0}] : Messages are queued for sending. Count of number of messages is [{1}]", messenger.Name, count);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
            }
            finally
            {
                isRunning = false;
            }
        }