প্রকল্প সম্পর্কে
itch হলো itch.io থেকে গেম খেলার জন্য ডেস্কটপ অ্যাপ্লিকেশন। এর ঘোষিত লক্ষ্য হলো ব্যবহারকারীদের গেম ডাউনলোড ও চালানো, আপডেট নোটিফিকেশন পাওয়া এবং গেম আপডেট রাখা, itch.io ওয়েবসাইটকে প্রতিস্থাপন না করেই।
আর্কিটেকচার
অ্যাপটি একটি Electron অ্যাপ্লিকেশন, যা মাল্টি-প্রসেস ডিজাইনে তৈরি। মেইন প্রসেস (Node.js) Redux দিয়ে স্টেট ম্যানেজমেন্ট, বিজনেস লজিক এবং সহযোগী কম্পোনেন্টগুলোর সমন্বয় পরিচালনা করে; Redux অ্যাকশন থেকে সৃষ্ট সাইড ইফেক্টের জন্য এটি "reactor" প্যাটার্ন ব্যবহার করে। রেন্ডারার প্রসেস হলো React-ভিত্তিক UI, যার স্টেট electron-redux-এর মাধ্যমে মেইন প্রসেস থেকে সিঙ্ক করা হয়।
দুটি সহযোগী Go কম্পোনেন্ট এটিকে সহায়তা করে:
- butler: একটি ডেমন, যা গেম ডাউনলোড, ইনস্টল, আপডেট ও চালু করা পরিচালনা করে, ইনস্টলেশন ডেটার একটি SQLite ডেটাবেস রাখে এবং TCP-ভিত্তিক RPC-এর মাধ্যমে অ্যাপের সাথে যোগাযোগ করে। এটি অ্যাপের লাইফসাইকেলের সাথে যুক্ত একটি চাইল্ড প্রসেস হিসেবে চালু হয়।
- itch-setup: একটি এক্সিকিউটেবল, যা সব প্ল্যাটফর্মে প্রাথমিক ইনস্টলেশন পরিচালনা করে এবং স্ব-আপডেট চেক ও রিস্টার্ট নিয়ন্ত্রণ করে।
ভার্সন ম্যানেজমেন্ট (broth)
অ্যাপটি broth নামক একটি সিস্টেমের মাধ্যমে butler ও itch-setup-এর ভার্সন পরিচালনা করে; এটি এমন একটি সার্ভিস যা itch.io API-কে প্রক্সি করে বাইনারি ও অ্যাসেটের জন্য নির্দিষ্ট ডাউনলোড URL সরবরাহ করে। বাইনারিগুলো broth.itch.zone-এর অধীনে হোস্ট করা হয়, যেখানে linux-amd64, darwin-arm64 এবং windows-386-এর মতো প্ল্যাটফর্ম আইডেন্টিফায়ার থাকে। লোকালি, ভার্সনগুলো একটি broth ডিরেক্টরির অধীনে সংরক্ষিত থাকে (উদাহরণস্বরূপ Linux-এ ~/.config/itch/broth/), যেখানে এক্সট্র্যাক্ট করা বাইনারি, সাময়িক ডাউনলোড এবং একটি .chosen-version মার্কার থাকে।
ভার্সন নির্বাচনে src/main/broth/formulas.ts-এ সংজ্ঞায়িত semver কনস্ট্রেইন্ট ব্যবহৃত হয় (butler ^15.20.0, itch-setup ^1.8.0)। অ্যাপটি একটি /versions এন্ডপয়েন্ট ফেচ করে এবং কনস্ট্রেইন্ট পূরণ করে এমন নতুনতম ভার্সন বেছে নেয়; canary বিল্ডগুলো -head চ্যানেল ব্যবহার করে, কোনো কনস্ট্রেইন্ট ছাড়াই। স্টার্টআপে এটি নির্বাচিত ভার্সন যাচাই করে, অ্যাপ ভার্সন পরিবর্তিত হলে নতুন কম্পোনেন্ট ভার্সন খোঁজে, CRC32 যাচাইসহ ডাউনলোড ও এক্সট্র্যাক্ট করে, একটি sanity check চালায়, তারপর মার্কার আপডেট করে এবং পুরনো ভার্সন পরিষ্কার করে। একটি ডেভেলপমেন্ট ওভাররাইড (BROTH_USE_LOCAL=butler) লোকালি বিল্ড করা butler ব্যবহারের সুযোগ দেয়।
butlerd বাইন্ডিং
butler-এর সাথে যোগাযোগে butlerd নামক একটি JSON-RPC 2.0 প্রোটোকল ব্যবহৃত হয়। রিকোয়েস্ট, নোটিফিকেশন ও ডেটা টাইপের TypeScript ডেফিনিশন src/common/butlerd/messages.ts-এ থাকে এবং generous নামক একটি টুল ব্যবহার করে Go টাইপ ডেফিনিশন থেকে স্বয়ংক্রিয়ভাবে তৈরি হয়। জেনারেট করা কোডটি @itchio/butlerd npm প্যাকেজের উপর নির্ভর করে, যা ডেমন চালু করা, TCP-এর মাধ্যমে সংযোগ স্থাপন এবং JSON-RPC মেসেজ বিনিময়ের রানটাইম সরবরাহ করে। butler রিপোজিটরি sibling ডিরেক্টরি হিসেবে চেকআউট করা থাকলে npm run sync-butler দিয়ে বাইন্ডিং পুনরায় জেনারেট করা যায়।
itch বনাম kitch
কোডবেস দুটি ভ্যারিয়েন্ট সমর্থন করে: itch (stable) এবং kitch (canary), যা পাশাপাশি ইনস্টল করা যায়। বিল্ডের সময় git ট্যাগ দিয়ে ভ্যারিয়েন্ট নির্ধারিত হয়: -canary দিয়ে শেষ হওয়া ট্যাগ kitch তৈরি করে, অন্যথায় itch। লোকাল ডেভেলপমেন্ট সবসময় kitch হিসেবে চলে, কারণ package.json-এর name ডিফল্টভাবে "kitch"; প্রোডাকশন প্যাকেজিং non-canary বিল্ডের জন্য এটি "itch"-এ ওভাররাইট করে। পার্থক্যের মধ্যে রয়েছে URL প্রোটোকল (itchio:// ও itch:// বনাম kitchio:// ও kitch://), broth চ্যানেল (regular বনাম -head), semver কনস্ট্রেইন্ট (উপস্থিত বনাম নেই), macOS বান্ডল ID, tray/window আইকন এবং আর্টিফ্যাক্টের নাম।
ডেভেলপমেন্ট ও টেস্টিং
ডেভেলপমেন্টের জন্য npm install, তারপর watching ও rebuilding সহ ডেভেলপমেন্ট মোডে চালাতে npm start প্রয়োজন। অন্যান্য স্ক্রিপ্টের মধ্যে রয়েছে টাইপ চেকিংয়ের জন্য npm run ts-check এবং অ্যাসেট বিল্ডের জন্য npm run compile। ইন্টিগ্রেশন টেস্টে ChromeDriver ব্যবহার করে Electron অ্যাপ নিয়ন্ত্রণ করা হয় এবং লগইন, গেম ইনস্টল ও UI নেভিগেশনের মতো ফ্লো পরীক্ষা করা হয়। এগুলোর জন্য Go (টেস্ট রানার Go-তে লেখা), একটি ডিসপ্লে (Linux CI-তে xvfb) এবং একটি টেস্ট অ্যাকাউন্টের itch.io API key প্রয়োজন। ChromeDriver ভার্সন Electron ভার্সনের সাথে মিলতে হবে; package.json-এ Electron ভার্সন পরিবর্তিত হলে integration-tests/versions.go accordingly আপডেট করতে হবে। টেস্টগুলো প্যাকেজ করা বিল্ডের বিরুদ্ধে (npm run integration-tests) বা ডেভেলপমেন্ট ভার্সনের বিরুদ্ধে (node release/test.js --test-dev) চালানো যায়।
লাইসেন্স ও সম্পর্কিত প্রকল্প
itch MIT License-এর অধীনে প্রকাশিত। README-তে Mitch-ও উল্লেখ করা হয়েছে, যা অন্য ডেভেলপারদের শুরু করা একটি Android ক্লায়েন্ট।
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.