예제 #1
0
 /// <summary>
 /// Executes the content of a parsed SMS message
 /// </summary>
 /// <param name="message">The SMS message to be executed</param>
 private void ExecuteMessageContent(ShortMessage message)
 {
     if (this.SmsReceived != null)
     {
         Core.Events.SmsReceivedArgs args = new Core.Events.SmsReceivedArgs(message);
         SmsReceived(this, args);
     }
 }
예제 #2
0
        /// <summary>
        /// Handles the reception of an SMS message
        /// </summary>
        /// <param name="sender">The object that fired the event</param>
        /// <param name="e">The event arguments</param>
        private void SmsController_SmsReceived(object sender, Core.Events.SmsReceivedArgs e)
        {
            string[] parts = e.Message.Message.Split(' ');
            if (parts.Length == 1 && parts[0].Equals(Project.SmsModule.SelfRegistrationCode) && Project.SmsModule.AllowsSelfRegistration)
            {
                // self-register message received
                bool registered = Project.ExecuteSmsSelfRegister(e.Message.Sender);
                if (registered)
                {
                    SmsController.SendSMS(e.Message.Sender, "Your phone has been registered to send messages.");
                    AddStatusMessage("Self-registration successful", e.Message.Sender);
                }
                else
                {
                    SmsController.SendSMS(e.Message.Sender, "Registration failed. Your phone may already be registered, or self-registration may be disabled.");
                    AddStatusMessage("Self-registration failed", e.Message.Sender);
                }
            }
            else if (parts.Length == 3)
            {
                int  updateType;
                bool success = int.TryParse(parts[0], out updateType);

                if (success)
                {
                    if (Project.IsUserAuthorized(e.Message.Sender, updateType))
                    {
                        AddStatusMessage(e.Message.Message, e.Message.Sender);
                    }
                    else
                    {
                        #region Rejection
                        AddStatusMessage("Unauthorized message was received and discarded: " + e.Message.Message, e.Message.Sender);

                        if (Project.SmsModule.SendsReadReceipts == true)
                        {
                            try
                            {
                                SmsController.SendSMS(e.Message.Sender, "Message was rejected. Reason: Unauthorized");
                            }
                            catch (Exception ex)
                            {
                                AddStatusMessage("An exception was thrown while sending message rejection message to sender " + e.Message.Sender + ". Exception: " + ex.Message, "[SERVER]");

                                // just in case this is causing a problem when the port fails, close/dispose and re-open
                                SmsController.SmsReceived -= SmsController_SmsReceived;
                                SmsController.Dispose();

                                SmsController              = new SmsController(SmsController.ModemConfiguration, Project.SmsModule.PollRate);
                                SmsController.SmsReceived += SmsController_SmsReceived;
                            }
                        }

                        return;

                        #endregion // Rejection
                    }

                    bool operationWasSuccessful = true;

                    try
                    {
                        operationWasSuccessful = Project.ExecuteSmsUpdate(e.Message);
                    }
                    catch (Exception ex)
                    {
                        operationWasSuccessful = false;
                        AddStatusMessage("An exception was thrown while updating contact follow-up information. Exception: " + ex.Message, "[SERVER]");
                    }

                    if (operationWasSuccessful && Project.SmsModule.SendsReadReceipts == true)
                    {
                        // send confirmation message
                        try
                        {
                            SmsController.SendSMS(e.Message.Sender, "Message received");
                        }
                        catch (Exception ex)
                        {
                            AddStatusMessage("An exception was thrown while sending message received message to sender " + e.Message.Sender + ". Exception: " + ex.Message, "[SERVER]");

                            // just in case this is causing a problem when the port fails, close/dispose and re-open
                            SmsController.SmsReceived -= SmsController_SmsReceived;
                            SmsController.Dispose();

                            SmsController              = new SmsController(SmsController.ModemConfiguration, Project.SmsModule.PollRate);
                            SmsController.SmsReceived += SmsController_SmsReceived;
                        }
                    }
                    else if (!operationWasSuccessful && Project.SmsModule.SendsReadReceipts == true)
                    {
                        #region Rejection
                        AddStatusMessage("Malformed message was discarded: " + e.Message.Message, e.Message.Sender);
                        if (Project.SmsModule.SendsReadReceipts == true)
                        {
                            try
                            {
                                SmsController.SendSMS(e.Message.Sender, "Message was rejected. Reason: Incorrect format");
                            }
                            catch (Exception ex)
                            {
                                AddStatusMessage("An exception was thrown while sending message rejection message to sender " + e.Message.Sender + ". Exception: " + ex.Message, "[SERVER]");

                                // just in case this is causing a problem when the port fails, close/dispose and re-open
                                SmsController.SmsReceived -= SmsController_SmsReceived;
                                SmsController.Dispose();

                                SmsController              = new SmsController(SmsController.ModemConfiguration, Project.SmsModule.PollRate);
                                SmsController.SmsReceived += SmsController_SmsReceived;
                            }
                        }
                        #endregion // Rejection
                    }
                }
            }
            else
            {
                AddStatusMessage("Malformed message was discarded: " + e.Message.Message, e.Message.Sender);
                if (Project.SmsModule.SendsReadReceipts == true)
                {
                    try
                    {
                        SmsController.SendSMS(e.Message.Sender, "Message was rejected. Reason: Incorrect format");
                    }
                    catch (Exception ex)
                    {
                        AddStatusMessage("An exception was thrown while sending message rejection message to sender " + e.Message.Sender + ". Exception: " + ex.Message, "[SERVER]");

                        // just in case this is causing a problem when the port fails, close/dispose and re-open
                        SmsController.SmsReceived -= SmsController_SmsReceived;
                        SmsController.Dispose();

                        SmsController              = new SmsController(SmsController.ModemConfiguration, Project.SmsModule.PollRate);
                        SmsController.SmsReceived += SmsController_SmsReceived;
                    }
                }
            }
        }