예제 #1
0
        public static string TryConvertToE164PhoneNumber(IPhoneNumber phoneNumber, out ValidationResult errorType)
        {
            Exception error;
            string    e164PhoneNumber = getE164PhoneNumber(phoneNumber, out errorType, out error);

            return(e164PhoneNumber ?? phoneNumber.Number);
        }
예제 #2
0
 public void GetCall(IPhoneNumber from)
 {
     if (Port != null)
     {
         OnIncomingCall(this, from);
     }
 }
예제 #3
0
        public static bool NumbersAreEquivalent(IPhoneNumber number1, IPhoneNumber number2)
        {
            string number1Stripped = Strip(number1);
            string number2Stripped = Strip(number2);

            return(number1Stripped.Equals(number2Stripped));
        }
예제 #4
0
        private void OnOutgoingCall(object sender, IPhoneNumber phone)
        {
            var answerer = _terminalService.FindTerminalByNumber(phone);
            var caller   = sender as Terminal;

            if (answerer != null && caller != null)
            {
                caller.RememberConnection(caller.Number, phone);
                _portService.ChangeState(caller.Port, PortState.Busy);
                CallInfo info = new CallInfo
                {
                    From          = caller.Number,
                    To            = phone,
                    DateTimeStart = DateTime.Now,
                    Duration      = TimeSpan.Zero
                };
                _callService.AddCall(info);

                if (answerer.Port.State != PortState.Busy)
                {
                    answerer.GetCall(caller.Number);
                }
                else
                {
                    Console.WriteLine($"Terminal is busy");
                    caller.RejectCall();
                }
            }
            else
            {
                Console.WriteLine($"Phone not binded to terminal");
                caller.RejectCall();
            }
        }
 public static bool IsValidOoredooNumber(this IPhoneNumber phoneNumber)
 {
     return(phoneNumber
            .WithMask("002135########")
            .WithMask("+2135########")
            .IsValid());
 }
 public static bool IsValidDjezzyNumber(this IPhoneNumber phoneNumber)
 {
     return(phoneNumber
            .WithMask("002137########")
            .WithMask("+2137########")
            .IsValid());
 }
예제 #7
0
 public CallerId(string name, IPhoneNumber number)
 {
     if (name == null) throw new ArgumentNullException("name");
     if (number == null) throw new ArgumentNullException("number");
     _name = name;
     _number = number;
 }
예제 #8
0
 public PhoneNumberModel(IPhoneNumber data)
 {
     this.Id     = data.PhoneNumberId;
     this.Uid    = data.PhoneNumberUid;
     this.Number = data.Number;
     this.Type   = data.Type;
 }
예제 #9
0
        private void OnIncomingCall(object sender, IPhoneNumber phone)
        {
            var answerer = sender as Terminal;

            _portService.ChangeState(answerer.Port, PortState.Busy);
            answerer.RememberConnection(phone, answerer.Number);
        }
 public static bool IsValidMobilisNumber(this IPhoneNumber phoneNumber)
 {
     return(phoneNumber
            .WithMask("002136########")
            .WithMask("+2136########")
            .IsValid());
 }
예제 #11
0
        public static bool NumbersAreEquivalent(IPhoneNumber number1, IPhoneNumber number2)
        {
            string number1Stripped = Strip(number1);
            string number2Stripped = Strip(number2);

            return number1Stripped.Equals(number2Stripped);
        }
예제 #12
0
 public PhoneNumber(IPhoneNumber data)
 {
     PhoneNumberId  = data.PhoneNumberId;
     PhoneNumberUid = data.PhoneNumberUid;
     Number         = data.Number;
     Type           = data.Type;
 }
예제 #13
0
 public void Call(IPhoneNumber to)
 {
     if (Port != null)
     {
         OnOnutgoingCall(this, to);
     }
 }
        static IPhoneNumber GetPhoneNumber(IContact contact, IObjectHelper objectHelper)
        {
            IPhoneNumber phoneNumber = objectHelper.CreatePhoneNumber(contact);

            phoneNumber.Number    = "+0 000 111 222 333";
            phoneNumber.PhoneType = "Work";
            return(phoneNumber);
        }
예제 #15
0
        //################################################################################

        #region Constructor

        public Client(CountryCode countryCode)
        {
            this.m_Factory = FactoryProvider.CreateFactory(countryCode);

            this.m_Address      = this.m_Factory.CreateAddressFormat();
            this.m_PhoneNumber  = this.m_Factory.CreatePhoneNumberFormat();
            this.m_LicencePlate = this.m_Factory.CreateLicencePlateFormat();
        }
예제 #16
0
        public static string TryConvertToRegionE164PhoneNumber(
            IPhoneNumber phoneNumber,
            out ValidationResult errorType)
        {
            Exception error;

            return(InternalConvertToRegionE164PhoneNumber(phoneNumber, out errorType, out error));
        }
예제 #17
0
 public void RememberConnection(IPhoneNumber from, IPhoneNumber to)
 {
     Connection = new Connection()
     {
         From = from,
         To   = to
     };
 }
예제 #18
0
 public static PhoneDestinationType GetPhoneDestinationType(this IPhoneNumber phoneNumberObject,
                                                            int?defCountryCode)
 {
     if (!phoneNumberObject.CountryCode.HasValue || phoneNumberObject.CountryCode.Value == defCountryCode)
     {
         return(PhoneDestinationType.Domestic);
     }
     return(PhoneDestinationType.International);
 }
예제 #19
0
        public async Task SendSMS(IPhoneNumber receiver)
        {
            TwilioClient.Init(Account_SID, AUTH_TOKEN);

            var message = await MessageResource.CreateAsync(
                body : "Your student's grade has dropped below a 70.",
                from : new Twilio.Types.PhoneNumber(TwilioPhoneNumber),
                to : new Twilio.Types.PhoneNumber($"1{receiver.PhoneNumber}")
                );
        }
예제 #20
0
        /// <summary>
        /// Get toll free phone number assigned to the applcation by name (or reserve it if need)
        /// </summary>
        /// <param name="phoneNumber">IPhoneNumber instance</param>
        /// <param name="availableNumber">IAvailableNumber instance</param>
        /// <param name="applicationId">Application Id</param>
        /// <param name="name">Name of allocated phone number</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>Phone number</returns>
        public static async Task <string> GetOrCreateTollFreeAsync(this IPhoneNumber phoneNumber, IAvailableNumber availableNumber, string applicationId, string name = null, CancellationToken?cancellationToken = null)
        {
            var existingNumber = phoneNumber.GetByName(applicationId, name);

            if (existingNumber != null)
            {
                return(existingNumber.Number);
            }
            return(await phoneNumber.CreateTollFreeAsync(availableNumber, applicationId, name, cancellationToken));
        }
예제 #21
0
 public static string ToParsableString(IPhoneNumber phoneNumber)
 {
     try
     {
         return(ToRegionE164PhoneNumber(phoneNumber));
     }
     catch
     {
         return(phoneNumber.Number ?? string.Empty);
     }
 }
예제 #22
0
        public static string GetFullNumber(this IPhoneNumber phoneNumberObject)
        {
            if (!phoneNumberObject.CountryCode.HasValue ||
                string.IsNullOrWhiteSpace(phoneNumberObject.LocalNumberWithAreaCode))
            {
                return(phoneNumberObject.LocalNumberWithAreaCode);
            }
            var localNumber = GetLocalNumberInDigits(phoneNumberObject);

            return(phoneNumberObject.CountryCode.Value + localNumber);
        }
예제 #23
0
        public static PhoneNumber CreatePhoneNumber(IPhoneNumber data)
        {
            var phoneNumber = new PhoneNumber
            {
                Number         = data.Number,
                PhoneNumberUid = data.PhoneNumberUid,
                Type           = (int)data.Type
            };

            return(phoneNumber);
        }
예제 #24
0
        /// <summary>
        /// Inserts a new phone number into the DAL.
        /// </summary>
        /// <param name="data">DTO to create from</param>
        /// <returns>An PhoneNumber DAL object</returns>
        /// <exception cref="System.ArgumentException">Errors in data will result in an exception being thrown</exception>
        public IPhoneNumber InsertPhoneNumber(IPhoneNumber data)
        {
            var db = new Context();

            var pn = PhoneNumber.CreatePhoneNumber(data);

            db.PhoneNumbers.Add(pn);

            db.SaveChanges();

            return(pn);
        }
예제 #25
0
        public static string ToRegionE164PhoneNumber(IPhoneNumber phoneNumber)
        {
            ValidationResult errorType;
            Exception        error;
            string           result = InternalConvertToRegionE164PhoneNumber(phoneNumber, out errorType, out error);

            if (errorType != ValidationResult.Success)
            {
                throw error;
            }

            return(result);
        }
예제 #26
0
 public CallerId(string name, IPhoneNumber number)
 {
     if (name == null)
     {
         throw new ArgumentNullException("name");
     }
     if (number == null)
     {
         throw new ArgumentNullException("number");
     }
     _name   = name;
     _number = number;
 }
예제 #27
0
        /// <summary>
        /// Allocate local phone number and assign it to the application
        /// </summary>
        /// <param name="phoneNumber">IPhoneNumber instance</param>
        /// <param name="availableNumber">IAvailableNumber instance</param>
        /// <param name="applicationId">Application Id</param>
        /// <param name="query">Optioons to allocate number</param>
        /// <param name="name">Name of allocated phone number</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>Created phone number</returns>
        public static async Task <string> CreateLocalAsync(this IPhoneNumber phoneNumber, IAvailableNumber availableNumber, string applicationId, LocalNumberQueryForOrder query = null, string name = null, CancellationToken?cancellationToken = null)
        {
            query          = query ?? new LocalNumberQueryForOrder();
            query.Quantity = 1;
            var result = (await availableNumber.SearchAndOrderLocalAsync(query, cancellationToken)).First();
            await phoneNumber.UpdateAsync(result.Id, new UpdatePhoneNumberData
            {
                ApplicationId = applicationId,
                Name          = name
            }, cancellationToken);

            return(result.Number);
        }
예제 #28
0
 public void ShouldSetContactProfile([Frozen] IContactProfileProvider contactProfileProvider, string key, IPhoneNumber phoneNumber, string firstName, string lastName, IContactPersonalInfo personalInfo, Sitecore.Analytics.Tracking.Contact contact)
 {
   contactProfileProvider.Contact.Returns(contact);
   var contactProfileService = new ContactProfileService(contactProfileProvider);
   contactProfileProvider.PersonalInfo.Returns(personalInfo);
   var profile = new EditProfile();
   profile.FirstName = firstName;
   profile.LastName = lastName;
   profile.PhoneNumber = phoneNumber.Number;
   contactProfileService.SetProfile(profile);
   contactProfileProvider.PersonalInfo.FirstName.ShouldBeEquivalentTo(profile.FirstName);
   contactProfileProvider.PersonalInfo.Surname.ShouldBeEquivalentTo(profile.LastName);
   contactProfileProvider.PhoneNumbers.Entries[contactProfileProvider.PhoneNumbers.Preferred].Number.ShouldBeEquivalentTo(profile.PhoneNumber);
 }
예제 #29
0
        static string InternalConvertToRegionE164PhoneNumber(
            IPhoneNumber phoneNumber,
            out ValidationResult errorType,
            out Exception error)
        {
            string e164PhoneNumber = getE164PhoneNumber(phoneNumber, out errorType, out error);

            if (string.IsNullOrEmpty(e164PhoneNumber))
            {
                return(e164PhoneNumber);
            }

            return(phoneNumber.CountryCode + "|" + e164PhoneNumber);
        }
예제 #30
0
        /// <summary>
        /// Allocate toll free number and assign it to the application
        /// </summary>
        /// <param name="phoneNumber">IPhoneNumber instance</param>
        /// <param name="availableNumber">IAvailableNumber instance</param>
        /// <param name="applicationId">Application Id</param>
        /// <param name="name">Name of allocated phone number</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>Created phone number</returns>
        public static async Task <string> CreateTollFreeAsync(this IPhoneNumber phoneNumber, IAvailableNumber availableNumber, string applicationId, string name = null, CancellationToken?cancellationToken = null)
        {
            var query = new TollFreeNumberQuery {
                Quantity = 1
            };
            var result = (await availableNumber.SearchAndOrderTollFreeAsync(query, cancellationToken)).First();
            await phoneNumber.UpdateAsync(result.Id, new UpdatePhoneNumberData
            {
                ApplicationId = applicationId,
                Name          = name
            }, cancellationToken);

            return(result.Number);
        }
예제 #31
0
        public PhoneNumberDTO(IPhoneNumber phoneNumber)
        {
            if (phoneNumber.Id < 0)
            {
                throw new ArgumentOutOfRangeException($"{nameof(phoneNumber.Id)} cannot be less than 0.");
            }
            ValidateInParameters(phoneNumber.Value, phoneNumber.Type);

            Id      = phoneNumber.Id;
            Value   = phoneNumber.Value;
            Type    = phoneNumber.Type;
            Active  = phoneNumber.Active;
            sa_Info = phoneNumber.sa_Info;
        }
예제 #32
0
        public static string Strip(IPhoneNumber number)
        {
            if (number.Number == null)
            {
                return(null);
            }

            string strippedNumber;

            strippedNumber = number.Number;

            strippedNumber = CharStripRegex.Replace(strippedNumber, "");

            try
            {
                if (!string.IsNullOrEmpty(number.Country))
                {
                    string countryCallingCode = CountryCallingCodeFinder.GetCountryCallingCode(number.Country);
                    Regex  countryCodeRegex   = new Regex(@"^\+?" + countryCallingCode);
                    strippedNumber = countryCodeRegex.Replace(strippedNumber, "");
                }
            }
            catch
            {
                ;
            }

            strippedNumber = StripLeadingZeroes(strippedNumber, number.Country);

            //
            // Strip any remaining +'s
            //

            strippedNumber = strippedNumber.Replace("+", "");

            //
            // In an 11 digit US/Canadian number with a leading 1, strip the leading 1.
            //

            if ((number.Country == CountryCallingCodeFinder.CountryAbbreviationUnitedStates) || (number.Country == CountryCallingCodeFinder.CountryAbbreviationCanada) || string.IsNullOrEmpty(number.Country))
            {
                if ((strippedNumber.Length == 11) && (strippedNumber.StartsWith("1")))
                {
                    strippedNumber = strippedNumber.Substring(1);
                }
            }

            return(strippedNumber);
        }
예제 #33
0
        public static string Strip(IPhoneNumber number)
        {
            if (number.Number == null)
            {
                return null;
            }

            string strippedNumber;

            strippedNumber = number.Number;

            strippedNumber = CharStripRegex.Replace(strippedNumber, "");

            try
            {
                if (!string.IsNullOrEmpty(number.Country))
                {
                    string countryCallingCode = CountryCallingCodeFinder.GetCountryCallingCode(number.Country);
                    Regex countryCodeRegex = new Regex(@"^\+?" + countryCallingCode);
                    strippedNumber = countryCodeRegex.Replace(strippedNumber, "");
                }
            }
            catch
            {
                ;
            }

            strippedNumber = StripLeadingZeroes(strippedNumber, number.Country);

            //
            // Strip any remaining +'s
            //

            strippedNumber = strippedNumber.Replace("+", "");

            //
            // In an 11 digit US/Canadian number with a leading 1, strip the leading 1.
            //

            if ((number.Country == CountryCallingCodeFinder.CountryAbbreviationUnitedStates) || (number.Country == CountryCallingCodeFinder.CountryAbbreviationCanada) || string.IsNullOrEmpty(number.Country))
            {
                if ((strippedNumber.Length == 11) && (strippedNumber.StartsWith("1")))
                {
                    strippedNumber = strippedNumber.Substring(1);
                }
            }

            return strippedNumber;
        }
예제 #34
0
        protected void AddPhoneNumber(IPhoneNumber phoneNumberToAdd)
        {
            //
            // If the number is already in the phone number list, ignore it.
            //

            foreach (IPhoneNumber phoneNumber in PhoneNumbers)
            {
                if (PhoneNumber.NumbersAreEquivalent(phoneNumber, phoneNumberToAdd))
                {
                    return;
                }
            }

            this.PhoneNumbers.Add(phoneNumberToAdd);
        }
예제 #35
0
        public static string FormatNumberWithDashes(IPhoneNumber phoneNumber)
        {
            string phoneNumberStripped = PhoneNumber.Strip(phoneNumber);

            if (_onlyNumbersRegex.IsMatch(phoneNumberStripped) && (string.IsNullOrEmpty(phoneNumber.Country) || CountryUsesAmericanStylePhoneFormat(phoneNumber.Country)))
            {
                return string.Format("{0}-{1}-{2}",
                                     phoneNumberStripped.Substring(0, 3),
                                     phoneNumberStripped.Substring(3, 3),
                                     phoneNumberStripped.Substring(6, 4));
            }
            else
            {
                return string.Format("{0}", phoneNumberStripped);
            }
        }
예제 #36
0
        private string FormatPhone(IPhoneNumber phoneNumber)
        {
            var formattedPhone = "";

            if (!string.IsNullOrEmpty(phoneNumber.CountryCode))
            {
                formattedPhone += $"+{phoneNumber.CountryCode}";
            }
            formattedPhone = string.Join(" ", formattedPhone, phoneNumber.Number).Trim();
            if (!string.IsNullOrEmpty(phoneNumber.Extension))
            {
                formattedPhone = string.Join("x", formattedPhone, phoneNumber.Extension).Trim();
            }

            return(formattedPhone);
        }
예제 #37
0
 public MockContact(string firstName, string lastName, IPhoneNumber phoneNumber)
     : this(firstName, null, lastName, phoneNumber)
 {
     ;
 }
예제 #38
0
 public MockContact(string firstName, string middleName, string lastName, IPhoneNumber phoneNumber)
     : base(MockContactId, firstName, middleName, lastName, phoneNumber)
 {
     ;
 }
예제 #39
0
 public bool IsEquivalentTo(IPhoneNumber number)
 {
     return NumbersAreEquivalent(this, number);
 }
예제 #40
0
    private string FormatPhone(IPhoneNumber phoneNumber)
    {
      var formattedPhone = "";
      if (!string.IsNullOrEmpty(phoneNumber.CountryCode))
      {
        formattedPhone += $"+{phoneNumber.CountryCode}";
      }
      formattedPhone = string.Join(" ", formattedPhone, phoneNumber.Number).Trim();
      if (!string.IsNullOrEmpty(phoneNumber.Extension))
      {
        formattedPhone = string.Join("x", formattedPhone, phoneNumber.Extension).Trim();
      }

      return formattedPhone;
    }
예제 #41
0
 public static string FormatForContactList(IPhoneNumber phoneNumber)
 {
     return FormatNumberWithDashes(phoneNumber);
 }