- Регистрация
- 03.05.2016
- Сообщения
- 733
- Благодарностей
- 485
- Баллы
- 63
Вступление
Привет, друзья программисты. Поздравляю Всех с Юбилейным 20 конкурсом статей! А я продолжаю углубляться в изучении программирования. Недавно я начал разбираться в работе с абстракциями и не могу не поделиться с вами своими открытиями. Одним из которых является написание более гибкого кода, который легко использовать и расширять в дальнейшем.
Когда нам требуется добавить новый сервис по работе с SMS, обычно приходится сталкиваться с необходимостью переписывать большую часть кода, чтобы адаптировать его под новый функционал. Однако, работая с абстракциями, нам не придется тратить много усилий и времени, чтобы расширить наш функционал. Достаточно написать реализацию нового сервиса и инициализировать его, и весь наш код, использующий абстракции, автоматически начнет взаимодействовать с новым сервисом.
Абстракция, как я ее понимаю – это сущность, которая знает, что она умеет делать, но не знает, как конкретно это делает. Для примера рассмотрим метод получения баланса, который знает о своей функции, что он будет получать баланс, но не знает, каким образом конкретно он будет это делать.
К данной статье я прикрепляю библиотеку, где реализована абстракция, исходники VS и шаблон для примера. В статье я опишу, как работать с библиотекой, а в видео расскажу про саму абстракцию и как добавлять новые сервисы в библиотеку.
Библиотека написана в виде примера, что бы показать, как круто можно работать с абстракциями. В ней не реализованы проверки! И вообще это моя первая работа с абстракциями, скорей всего она реализована не совсем правильно!
Приступаем к работе.
ВАЖНО! Чтобы у вас все работало в ProjectMaker, нужно УБРАТЬ галочку в настройках.
Данная галочка нужна, чтобы мы могли получать данные в одном кубике и работать с ними в других кубиках, если поставить галочку, то будем получать ошибку, "ссылка на объект не найдена". Для самого ZennoPoster дополнительного делать ничего не нужно, все будет работать.
В данной библиотеке реализованы методы для работы смс сервисов:
- SmsHub
- SmsActivate
- SmsActivate Rent
Пример:
C#:
var service = new SmsInit();
service.SmsHub(token, proxy);
//service.SmsActivate(token);
//service.SmsActivateRent(token, rentTime);
Пример:
C#:
var sms = SmsInit.Service;
project.SendInfoToLog("Инициализировали: " + sms.Name, true);
var balance = sms.GetBalance();
- ISmsService SmsHub (string token, string proxy) - работаем с SmsHub. Передаем токен и прокси (RU ip заблокированы РКН)
- ISmsService SmsActivate (string token) - работаем с SmsActivate. Передаем Токен.
- ISmsService SmsActivateRent (string token, Rent rentTime) - работаем с SmsActivate Rent. Передаем Токен и срок аренды, на сколько арендуем номер.
Абстрактные Свойства:
- Id (string) - id который выдается вместе с номером телефона, получаем его из метода GetNumber().
- Name (string) - Хранит в себе имя смс сервиса, что бы мы могли понимать с каким сервисом мы работаем.
- Code (string) - смс код, который мы получили от смс сервиса, получаем его из метода GetCode().
- Number (string) - Номер телефона который выдал нам смс сервис, получаем его из метода GetNumber().
- Responce (string) - Http ответ от Смс сервиса, что бы можно было быстро посмотреть что идет не так и что именно отвечает сервер.
Абстрактные Методы:
- void SmsOk() - метод подтверждения номер телефона.
- void SmsCancel() - метод отмены номер телефона.
- void SetProxy (string proxy) - метод установки прокси для работы смс сервисов. Передаем прокси в параметрах и запросы к смс сервисам идут через прокси. Например SmsHub не работает с RU IP, поэтому устанавливаем например немецкий прокси и все работает.
- bool GetNumber(string service, string country, string smsOperator = "") - метод запроса номер телефона, в параметры передаем: service - сервис для кого мы запрашиваем смс (Яндекс, ВК и т.п.); country - страна для смс; smsOperator - необязательный параметр, если нужен конкретный оператор, то передаем его данные. Возвращается bool, если номер получили - true иначе false.
- bool GetCode (int attempts = 3, int pause_Sec = 30) - метод получения кода от смс сервиса. attempts - количество попыток запроса статуса у смс сервиса; pause_Sec - пауза в секундах между запросами статуса к смс сервису.
- decimal GetBalance() - метод получения баланса.
Пример Входных настроек:
Примеры кода для работы в шаблонах.
Подключаем библиотеку к шаблону, в using прописываем: using SmsService;
Инициализация смс сервиса:
C#:
var smsService = project.Variables["smsService"].Value;
string token;
var service = new SmsInit();
switch (smsService)
{
case "SmsHub":
{
token = project.Variables["tokenSmsHub"].Value;
var proxy = project.Variables["smsProxy"].Value;
service.SmsHub(token, proxy);
break;
}
case "SmsActivate":
{
token = project.Variables["tokenSmsActivate"].Value;
service.SmsActivate(token);
break;
}
case "SmsActivateRent":
{
token = project.Variables["tokenSmsActivate"].Value;
var time = int.Parse(project.Variables["rentTime"].Value);
var rentTime = (Rent)Enum.ToObject(typeof(Rent), time);
service.SmsActivateRent(token, rentTime);
break;
}
default:
throw new Exception("Неизвестный Смс Сервис!");
}
var sms = SmsInit.Service;
project.SendInfoToLog("Инициализировали: " + sms.Name, true);
После того, как мы инициализировали смс сервис, теперь в любом кубике можем обращаться к SmsInit.Service и иметь доступ к свойствам и методам для работы с смс сервисом.
Запрос баланса:
C#:
var sms = SmsInit.Service;
try
{
var balance = sms.GetBalance();
var log = $"{sms.Name} | Баланас: {balance}";
project.SendInfoToLog(log, true);
}
catch
{
throw new Exception(sms.Responce);
}
Используя свойство Responce сразу выведем информацию в лог, если что-то пойдет не так.
Получить номер:
C#:
var service = project.Variables["service"].Value;
var country = project.Variables["country"].Value;
var sms = SmsInit.Service;
string number, id;
if (sms.GetNumber(service, country))
{
number = sms.Number;
id = sms.Id;
}
else throw new Exception("Не смогли получить номер!");
var log = $"{sms.Name} | Номер: {number} | ID: {id}";
project.SendInfoToLog(log, true);
Получить код:
C#:
var sms = SmsInit.Service;
var isGetCode = sms.GetCode(2, 10);
if (isGetCode)
{
project.SendInfoToLog("Cмс код: " + sms.Code, true);
}
else
{
sms.SmsCancel();
throw new Exception($"Отмена номера: {sms.Number}, смс код не приходит!");
}
Подтвердить или отменить номер:
C#:
var sms = SmsInit.Service;
//Отменить
sms.SmsCancel();
project.SendInfoToLog("Отмена номера:" + sms.Number, true);
project.SendInfoToLog(sms.Responce);
//Подтвердить
sms.SmsOk();
project.SendInfoToLog("Работа выполнена:" + sms.Number, true);
- Тема статьи
- Нестандартные хаки
- Номер конкурса статей
- Двадцатый конкурс статей
Вложения
-
124,9 КБ Просмотры: 82
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование модератором: