Створити QR код з посиланням на сторінку в інтернеті можна використовуючи сервіс від Google. Достатньо сформувати URL в перейти по ньому зі свого браузера. Так от саме в цей момент браузер відправить GET запит на сервіс, сервіс опрацює параметри, і у відповідь поверне картинку QR код. В залежності від мети його можна або скачати на компьютер, або відсканувати своїм телефоном. Проте що робити коли таких кодів потрібно згенерувати багато? Правильно! Використовувати GET запити в ZennoPoster.
Значить для того щоб не повторюватись зразу рекомендую дві публікації по темі:
– Як заміряти час виконання роботи в ZennoPoster
– Як згенерувати sha256 в програмі ZennoPoster
– Як створити QR код з посиланням на сайт
– Як відправляти GET запити програмою ZennoPoster
Тепер, коли є достатньо вхідної інформації про те, з чим будемо мати справу, можна сформулювати завдання:
Є список посиланнь на різні ресурси, зберігаються вони в текстовому файлі input.txt
Для кожного посилання потрібно згенерувати QR код
Поряд з файлом проєкту створити папку для збереження результату
В цю папку зберігати згенеровані QR коди
Ім’я файла згенерувати у вигляді sha256(url).jpg
Якщо по якійсь причині не получилось згенерувати зображення – посилання перемістити в файл bad.txt
Якщо зображення було згенеровано успішно – зберегти імя файла і посилання в файл good.txt
В процесі роботи виводити повідомлення скільки ще залишилось посиланнь для генерації.
Проєкт повинен виконуватись в багато потоків одночасно
Створюємо папку, в якій буде існувати проєкт ZennoPoster
В ній створюємо сам проєкт, папку для результатів, текстові файли.
А в самому проєкті добавляємо блок Свій C# код.
Для забеспечення багатопотокової роботи, всі файли прив’язуємо до внутрішніх списків ZennoPoster.
Це дозволить всім потокам працювати з однією копією файла.
Тобто, коли один потік візьме з файла рядок з видаленням – інший потік виконавши цю саму операцію буде брати вже слідуючий рядок.
Кожне виконання проєкту буде мати справу тільки з одним рядком даних з файла input.txt
Після генерації QR коду результат однозначно буде збережений або у файл good.txt або bad.txt
На початку виконання і після збереження результату буде виведене повідомлення про початок і кінець.
Також щоб орієнтуватись скільки часу було затрачено на виконання роботи – виведемо також час виконання.
Логіка виконання буде наступною:
Запускаємо вимірювання часу
Синхронізуємо потоки завдяки конструкції lock
Дізнаємось скільки всього рядків в файлі input.txt
Якщо їх більше 0 – продовжуємо роботу
Інакше – завершуємо роботу по помилці
Одержуємо рядок з файла
Виходимо з синхронізації потоків, щоб дати можливість доступу іншим потокам звертатись до цього ж списку.
Дальше генеруємо майбутнє ім’я QR коду.
Генеруємо шлях по якому повинні зберегти результат.
Генеруємо параметри GET запиту для одержання QR коду.
Відправляємо запит, зберігаючи результат в масиві байт (щоб працювати в оперативній пам’яті, і не ставати в чергу зчитування/запису на диск, тому що ще повільна операція, і цю затримку буде замітно при роботі в багатопотоковому режимі).
В результаті ми могли одержати або корректний код, або помилку.
Тому перш за все переводимо байти в зображення.
Після чого перевіряємо щоб ширина і висота зображення були більше 0.
Якщо це так – значить код був згенерований вірно.
Тому зберігаємо його в необхідну папку.
В іншому випадку – вважаємо що відбулась помилка, і код є не корректним, тому зберігати його не будемо.
Наступним кроком блокуємо список в який будемо добавляти результат роботи.
Добавляємо рядок з результатом.
Після чого закінчуємо роботу нашого проєкту.
Тепер якщо добавити проєкт в програму ZennoPoster і запустити його на -1 виконання вказавши що завершимо роботу при 1 неуспішному виконанні – програма самостійно згенерує необхідну кількість QR кодів і зупинить роботу, коли в файлі input.txt завершаться рядки з посиланнями.