/// <summary>
 /// Constructor
 /// </summary>
 public DatabasePoller(DbMessenger messenger, MessageGatewayService service)
     : base(messenger.PollingInterval * 1000)
 {
     this.messenger             = messenger;
     this.messageGatewayService = service;
     this.isRunning             = false;
 }
        /// <summary>
        /// Deletes the channel.
        /// </summary>
        private void DeleteMessenger()
        {
            DbMessenger messenger = lvwDbMessenger.SelectedObject as DbMessenger;

            if (messenger != null)
            {
                DialogResult result = FormHelper.Confirm(string.Format(Resources.MsgConfirmDeleteMessenger, messenger.Name));
                if (result == DialogResult.Yes)
                {
                    // Delete the messenger
                    DbMessenger.Delete(m => m.Name.ToLower() == messenger.Name.ToLower());

                    this.lvwDbMessenger.RemoveObjects(this.lvwDbMessenger.SelectedObjects);

                    if (MessengerRemoved != null)
                    {
                        // Raise the event
                        MessengerEventHandlerArgs arg = new MessengerEventHandlerArgs(messenger.Name);
                        this.MessengerRemoved.BeginInvoke(this, arg, new AsyncCallback(this.AsyncCallback), null);
                    }
                }
            }
            else
            {
                FormHelper.ShowInfo(Resources.MsgMessengerMustBeSelected);
            }
        }
        /// <summary>
        /// Shows the channels.
        /// </summary>
        private void SetupView()
        {
            lvwDbMessenger.BeginUpdate();

            this.olvColName.AspectGetter        = delegate(object x) { return(((DbMessenger)x).Name); };
            this.olvColDescription.AspectGetter = delegate(object x) { return(((DbMessenger)x).Description); };
            this.olvColStatus.AspectGetter      = delegate(object x) { return(((DbMessenger)x).Status); };

            lvwDbMessenger.SetObjects(DbMessenger.All());
            lvwDbMessenger.EndUpdate();
        }
        /// <summary>
        /// FRM_s the messenger updated.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The e.</param>
        void frm_MessengerUpdated(object sender, MessengerEventHandlerArgs e)
        {
            DbMessenger messenger = DbMessenger.SingleOrDefault(m => m.Name.ToLower() == e.Name.ToLower());

            if (MessengerUpdated != null)
            {
                // Raise the event
                MessengerEventHandlerArgs arg = new MessengerEventHandlerArgs(e.Name);
                this.MessengerUpdated.BeginInvoke(this, arg, new AsyncCallback(this.AsyncCallback), null);
            }
        }
示例#5
0
 /// <summary>
 /// Builds the connection string.
 /// </summary>
 /// <param name="messenger">The messenger.</param>
 /// <returns></returns>
 private static string BuildConnString(DbMessenger messenger)
 {
     if (messenger.RequiredAuth)
     {
         return(string.Format("DSN={0};Uid={1};Pwd={2};", messenger.Dsn, messenger.DbUserName, messenger.DbUserPassword));
     }
     else
     {
         return(string.Format("DSN={0}", messenger.Dsn));
     }
 }
示例#6
0
        /// <summary>
        /// Deletes the message.
        /// </summary>
        /// <param name="messenger">The messenger.</param>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        public static bool DeleteMsg(DbMessenger messenger, string id)
        {
            OdbcConnection dbConnection = null;
            OdbcCommand    dbCommand    = null;

            try
            {
                string   connString    = BuildConnString(messenger);
                DataType idColDataType = (DataType)StringEnum.Parse(typeof(DataType), messenger.UniqMsgIdColDataType);
                string   sqlCommand    = string.Empty;
                sqlCommand = string.Format("DELETE FROM {0} ", messenger.DbTable);


                if (idColDataType == DataType.Numeric)
                {
                    sqlCommand += " WHERE {0}={1}";
                }
                else
                {
                    sqlCommand += " WHERE {0}='{1}'";
                }

                sqlCommand   = string.Format(sqlCommand, messenger.UniqMsgIdColName, id);
                dbConnection = new OdbcConnection(connString);
                dbConnection.Open();
                dbCommand             = dbConnection.CreateCommand();
                dbCommand.CommandText = sqlCommand;

                int rowCount = dbCommand.ExecuteNonQuery();
                return(true);
            }
            catch (Exception ex)
            {
                string msg = string.Format("Messenger [{0}] error, DSN is [{1}]", messenger.Name, messenger.Dsn);
                log.Error(msg, ex);
                return(false);
            }
            finally
            {
                if (dbCommand != null)
                {
                    dbCommand.Dispose();
                }

                if (dbConnection != null)
                {
                    dbConnection.Close();
                    dbConnection.Dispose();
                    dbConnection = null;
                }
            }
        }
示例#7
0
        /// <summary>
        /// Gets the records.
        /// </summary>
        /// <param name="messenger">The messenger.</param>
        /// <returns></returns>
        public static DataTable GetRecords(DbMessenger messenger)
        {
            OdbcConnection dbConnection = null;
            OdbcCommand    dbCommand    = null;
            OdbcDataReader dbReader     = null;

            try
            {
                string connString = BuildConnString(messenger);
                string sqlCommand = string.Format("SELECT * FROM {0}", messenger.DbTable);
                if (!messenger.DeleteAfterSending)
                {
                    sqlCommand = string.Format("{0} WHERE {1}='{2}'", sqlCommand, messenger.StatusColName, messenger.StatusColNewValue);
                }
                dbConnection = new OdbcConnection(connString);
                dbConnection.Open();
                dbCommand             = dbConnection.CreateCommand();
                dbCommand.CommandText = sqlCommand;
                dbReader = dbCommand.ExecuteReader();
                DataTable dt = new DataTable();
                dt.TableName = messenger.DbTable;
                dt.Load(dbReader);
                dbReader.Close();
                return(dt);
            }
            catch (Exception ex)
            {
                string msg = string.Format("Messenger [{0}] error, DSN is [{1}]", messenger.Name, messenger.Dsn);
                log.Error(msg, ex);
                throw new SmartGatewayException(msg, ex);
            }
            finally
            {
                if (dbReader != null && !dbReader.IsClosed)
                {
                    dbReader.Close();
                }
                if (dbCommand != null)
                {
                    dbCommand.Dispose();
                }

                if (dbConnection != null)
                {
                    dbConnection.Close();
                    dbConnection.Dispose();
                    dbConnection = null;
                }
            }
        }
        private void frmTestForm_Load(object sender, EventArgs e)
        {
            DbMessenger messenger = DbMessenger.SingleOrDefault(m => m.Name.ToLower() == "messagingtoolkit".ToLower());

            if (messenger != null)
            {
                DatabasePoller poller = new DatabasePoller(messenger, null);
                poller.Name = messenger.Name;
                Thread worker = new Thread(new ThreadStart(poller.StartTimer));
                worker.IsBackground = true;
                worker.Name         = messenger.Name;
                worker.Start();
            }
        }
        /// <summary>
        /// Displays the messenger.
        /// </summary>
        private void DisplayMessenger()
        {
            if (!string.IsNullOrEmpty(this.MessengerName))
            {
                // Retrieve and display the messenger configuration
                DbMessenger messenger = DbMessenger.SingleOrDefault(m => m.Name.ToLower() == this.MessengerName.ToLower());
                if (messenger != null)
                {
                    // Display the messenger information
                    txtName.Text                     = messenger.Name;
                    txtDescription.Text              = messenger.Description;
                    cboDsn.Text                      = messenger.Dsn;
                    txtDbTable.Text                  = messenger.DbTable;
                    npdPollingInterval.Value         = messenger.PollingInterval;
                    chkRequireAuthentication.Checked = messenger.RequiredAuth;
                    txtDbUserName.Text               = messenger.DbUserName;
                    txtDbPassword.Text               = messenger.DbUserPassword;
                    txtUniqMsgIdColName.Text         = messenger.UniqMsgIdColName;

                    DataType dataType = (DataType)Enum.Parse(typeof(DataType), messenger.UniqMsgIdColDataType.ToString());
                    if ((dataType & DataType.String) == DataType.String)
                    {
                        radMsgIdDataTypeString.Checked = true;
                    }
                    if ((dataType & DataType.Numeric) == DataType.Numeric)
                    {
                        radMsgIdDataTypeNumeric.Checked = true;
                    }

                    txtMsgColName.Text                  = messenger.MsgColName;
                    txtDestNoColName.Text               = messenger.DestNoColName;
                    txtMsgPriorityColName.Text          = messenger.MsgPriorityColName;
                    txtMsgAlertColName.Text             = messenger.MsgAlertColName;
                    cboDefaultMsgPriority.Text          = messenger.DefaultMsgPriority;
                    txtDefaultTextMsg.Text              = messenger.DefaultTextMsg;
                    chkDeleteAfterSending.Checked       = messenger.DeleteAfterSending;
                    txtStatusColName.Text               = messenger.StatusColName;
                    txtStatusTimestampColName.Text      = messenger.StatusTimestampColName;
                    txtStatusColValue.Text              = messenger.StatusColNewValue;
                    txtStatusColUpdateSentValue.Text    = messenger.StatusColUpdateSuccessVal;
                    txtStatusColUpdateFailedValue.Text  = messenger.StatusColUpdateFailedValue;
                    txtStatusColUpdateSendingValue.Text = messenger.StatusColUpdateSendingValue;
                    chkAutoStart.Checked                = messenger.AutoStart;

                    txtName.Enabled = false;
                    this.IsUpdate   = true;
                }
            }
        }
        /// <summary>
        /// Edits the db messenger.
        /// </summary>
        private void EditMessenger()
        {
            object obj = lvwDbMessenger.SelectedObject;

            if (obj != null)
            {
                DbMessenger messenger = obj as DbMessenger;

                frmDatabaseMessenger frm = new frmDatabaseMessenger();
                frm.MessengerUpdated += new UpdateMessengerEventHandler(frm_MessengerUpdated);
                frm.MessengerName     = messenger.Name;

                DialogResult result = frm.ShowDialog();
            }
        }
        private void CheckMessengers()
        {
            try
            {
                List <DbMessenger> messengers = new List <DbMessenger>();
                while (true)
                {
                    messengers.Clear();
                    foreach (DbMessenger messenger in DbMessenger.All().OrderBy(m => m.Name))
                    {
                        try
                        {
                            EventAction action = new EventAction(StringEnum.GetStringValue(EventNotificationType.QueryMessengerStatus));
                            action.ActionType = EventAction.Synchronous;
                            action.Values.Add(EventParameter.MessengerName, messenger.Name);
                            EventResponse response = RemotingHelper.NotifyEvent(ServiceEventListenerUrl, action);

                            if (StringEnum.GetStringValue(EventNotificationResponse.Failed).Equals(response.Status))
                            {
                                messenger.Status = StringEnum.GetStringValue(MessengerStatus.Stopped);
                            }
                            else
                            {
                                messenger.Status = response.Results[EventParameter.MessengerStatus];
                            }

                            messengers.Add(messenger);
                        }
                        catch (Exception ex)
                        {
                            log.ErrorFormat("Error checking messenger - [{0}]", messenger.Name);
                            log.Error(ex.Message, ex);
                        }
                    }
                    RefreshView(messengers);
                    Thread.Sleep(PollingInterval);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
            }
        }
 /// <summary>
 /// Shows the messages.
 /// </summary>
 public void RefreshView(List <DbMessenger> messengers)
 {
     if (this.lvwDbMessenger.InvokeRequired)
     {
         SetListCallback callback = new SetListCallback(RefreshView);
         this.Invoke(callback, messengers);
     }
     else
     {
         DbMessenger messenger = lvwDbMessenger.SelectedObject as DbMessenger;
         lvwDbMessenger.BeginUpdate();
         lvwDbMessenger.ClearObjects();
         lvwDbMessenger.SetObjects(messengers);
         if (messenger != null)
         {
             lvwDbMessenger.SelectObject(messenger);
         }
         lvwDbMessenger.EndUpdate();
         lvwDbMessenger.Refresh();
     }
 }
 private void stopMessengerToolStripMenuItem_Click(object sender, EventArgs e)
 {
     try
     {
         DbMessenger messenger = lvwDbMessenger.SelectedObject as DbMessenger;
         if (messenger != null)
         {
             EventAction action = new EventAction(StringEnum.GetStringValue(EventNotificationType.StopMessenger));
             action.Values.Add(EventParameter.MessengerName, messenger.Name);
             EventResponse response = RemotingHelper.NotifyEvent(ServiceEventListenerUrl, action);
             messenger.Status = StringEnum.GetStringValue(MessengerStatus.Stopping);
             lvwDbMessenger.RefreshObject(messenger);
         }
         else
         {
             FormHelper.ShowInfo(Resources.MsgNoMessengerSelected);
         }
     }
     catch (Exception ex)
     {
         FormHelper.ShowError(ex.Message);
     }
 }
        /// <summary>
        /// Saves the changes.
        /// </summary>
        /// <returns></returns>
        private bool SaveChanges()
        {
            // Validate the name is not empty
            if (!FormHelper.ValidateNotEmpty(txtName, Resources.MsgUniqueNameRequired))
            {
                return(false);
            }
            string name = txtName.Text.Trim();

            if (!this.IsUpdate)
            {
                // The messenger name must be unique
                if (DbMessenger.Exists(m => m.Name.ToLower() == name.ToLower()))
                {
                    FormHelper.ShowError(txtName, string.Format(Resources.MsgMessengerNameAlreadyExists, name));
                    return(false);
                }
            }

            if (!FormHelper.ValidateNotEmpty(cboDsn, Resources.MsgDsnRequired))
            {
                return(false);
            }

            if (!FormHelper.ValidateNotEmpty(txtDbTable, Resources.MsgDbTableRequired))
            {
                return(false);
            }

            if (chkRequireAuthentication.Checked)
            {
                if (!FormHelper.ValidateNotEmpty(txtDbUserName, Resources.MsgDbUserNameRequired))
                {
                    return(false);
                }

                if (!FormHelper.ValidateNotEmpty(txtDbPassword, Resources.MsgDbUserPasswordRequired))
                {
                    return(false);
                }
            }


            if (!FormHelper.ValidateNotEmpty(txtUniqMsgIdColName, Resources.MsgUniqMsgIdColNameRequired))
            {
                return(false);
            }

            if (!FormHelper.ValidateNotEmpty(txtDestNoColName, Resources.MsgDestNoColNameRequired))
            {
                return(false);
            }

            if (!FormHelper.ValidateNotEmpty(txtDestNoColName, Resources.MsgDestNoColNameRequired))
            {
                return(false);
            }

            if (!FormHelper.ValidateNotEmpty(txtMsgColName, txtDefaultTextMsg, Resources.MsgMsgColDefaultMsgRequired))
            {
                return(false);
            }

            if (chkDeleteAfterSending.Checked)
            {
                if (!FormHelper.ValidateNotEmpty(txtStatusColName, Resources.MsgStatusColNameRequired))
                {
                    return(false);
                }
            }


            try
            {
                // Save the messenger configuration
                DbMessenger dbMessenger = new DbMessenger();

                if (this.IsUpdate)
                {
                    dbMessenger = DbMessenger.SingleOrDefault(m => m.Name.ToLower() == name.ToLower());
                }

                dbMessenger.Name             = name;
                dbMessenger.Description      = txtDescription.Text;
                dbMessenger.Dsn              = cboDsn.Text;
                dbMessenger.DbTable          = txtDbTable.Text;
                dbMessenger.PollingInterval  = Convert.ToInt32(npdPollingInterval.Value);
                dbMessenger.RequiredAuth     = chkRequireAuthentication.Checked;
                dbMessenger.DbUserName       = txtDbUserName.Text;
                dbMessenger.DbUserPassword   = txtDbPassword.Text;
                dbMessenger.UniqMsgIdColName = txtUniqMsgIdColName.Text;
                if (radMsgIdDataTypeString.Checked)
                {
                    dbMessenger.UniqMsgIdColDataType = StringEnum.GetStringValue(DataType.String);
                }
                else
                {
                    dbMessenger.UniqMsgIdColDataType = StringEnum.GetStringValue(DataType.Numeric);
                }

                dbMessenger.MsgColName                  = txtMsgColName.Text;
                dbMessenger.DestNoColName               = txtDestNoColName.Text;
                dbMessenger.MsgPriorityColName          = txtMsgPriorityColName.Text;
                dbMessenger.MsgAlertColName             = txtMsgAlertColName.Text;
                dbMessenger.DefaultMsgPriority          = cboDefaultMsgPriority.Text;
                dbMessenger.DefaultTextMsg              = txtDefaultTextMsg.Text;
                dbMessenger.DeleteAfterSending          = chkDeleteAfterSending.Checked;
                dbMessenger.StatusColName               = txtStatusColName.Text;
                dbMessenger.StatusTimestampColName      = txtStatusTimestampColName.Text;
                dbMessenger.StatusColNewValue           = txtStatusColValue.Text;
                dbMessenger.StatusColUpdateSuccessVal   = txtStatusColUpdateSentValue.Text;
                dbMessenger.StatusColUpdateFailedValue  = txtStatusColUpdateFailedValue.Text;
                dbMessenger.StatusColUpdateSendingValue = txtStatusColUpdateSendingValue.Text;
                dbMessenger.AutoStart = chkAutoStart.Checked;


                if (!this.IsUpdate)
                {
                    dbMessenger.Save();
                }
                else
                {
                    dbMessenger.Update();
                }

                if (MessengerAdded != null)
                {
                    // Raise the event
                    MessengerEventHandlerArgs arg = new MessengerEventHandlerArgs(name);
                    this.MessengerAdded.BeginInvoke(this, arg, new AsyncCallback(this.AsyncCallback), null);
                }

                if (MessengerUpdated != null)
                {
                    // Raise the event
                    MessengerEventHandlerArgs arg = new MessengerEventHandlerArgs(name);
                    this.MessengerUpdated.BeginInvoke(this, arg, new AsyncCallback(this.AsyncCallback), null);
                }
            }
            catch (Exception ex)
            {
                FormHelper.ShowError(ex.Message);
                return(false);
            }

            // Reset to false
            isFormChanged = false;

            // Show successful save message
            FormHelper.ShowInfo(Resources.MsgMessengerConfigSaved);

            // Return true as saving is successful
            return(true);
        }
示例#15
0
 /// <summary>
 /// Generates the message id.
 /// </summary>
 /// <param name="messenger">The messenger.</param>
 /// <param name="id">The message id.</param>
 /// <returns></returns>
 public static string GenerateMessageId(DbMessenger messenger, string id)
 {
     return(MessagePrefix + GuiHelper.FieldSplitter + messenger.Name + GuiHelper.FieldSplitter + id);
 }
示例#16
0
        /// <summary>
        /// Updates the status.
        /// </summary>
        /// <param name="messenger">The messenger.</param>
        /// <param name="row">The row.</param>
        /// <param name="id">The id.</param>
        /// <param name="status">The status.</param>
        /// <returns></returns>
        public static bool UpdateStatus(DbMessenger messenger, string id, string status)
        {
            OdbcConnection dbConnection = null;
            OdbcCommand    dbCommand    = null;

            try
            {
                string   connString    = BuildConnString(messenger);
                DataType idColDataType = (DataType)StringEnum.Parse(typeof(DataType), messenger.UniqMsgIdColDataType);
                string   sqlCommand    = string.Empty;
                sqlCommand = string.Format("UPDATE {0} SET {1}='{2}'", messenger.DbTable, messenger.StatusColName, status);

                if (!string.IsNullOrEmpty(messenger.StatusTimestampColName))
                {
                    sqlCommand += ", " + messenger.StatusTimestampColName + "=?";
                }

                if (idColDataType == DataType.Numeric)
                {
                    sqlCommand += " WHERE {0}={1}";
                }
                else
                {
                    sqlCommand += " WHERE {0}='{1}'";
                }

                sqlCommand   = string.Format(sqlCommand, messenger.UniqMsgIdColName, id);
                dbConnection = new OdbcConnection(connString);
                dbConnection.Open();
                dbCommand             = dbConnection.CreateCommand();
                dbCommand.CommandText = sqlCommand;

                if (!string.IsNullOrEmpty(messenger.StatusTimestampColName))
                {
                    dbCommand.Parameters.Add("@ts", OdbcType.DateTime);
                    dbCommand.Parameters["@ts"].Value = DateTime.Now;
                }
                int rowCount = dbCommand.ExecuteNonQuery();
                return(true);
            }
            catch (Exception ex)
            {
                string msg = string.Format("Messenger [{0}] error, DSN is [{1}]", messenger.Name, messenger.Dsn);
                log.Error(msg, ex);
                return(false);
            }
            finally
            {
                if (dbCommand != null)
                {
                    dbCommand.Dispose();
                }

                if (dbConnection != null)
                {
                    dbConnection.Close();
                    dbConnection.Dispose();
                    dbConnection = null;
                }
            }
        }