ঠিকানা অ্যাসাইনমেন্ট
সারসংক্ষেপ
ভূমিকা:
যেহেতু ইন্টারফেসের মধ্যে বেশ কয়েকটি আন্তঃ-নির্ভরতা রয়েছে এবং যেহেতু বিভিন্ন ডিভাইস কনফিগারেশনের জন্য বিভিন্ন TCP/IP ঠিকানা এবং রুট অ্যাসাইনমেন্টের প্রয়োজন হতে পারে, তাই আইপি ঠিকানা এবং রুট অ্যাসাইনমেন্ট নিয়ন্ত্রণের যুক্তি একটি একক মডিউলে একত্রিত হওয়া অপরিহার্য বলে মনে করা হয়েছিল। WARM টিসিপি/আইপি ঠিকানাগুলি এবং রুটগুলিকে যুক্ত করা এবং সরানোর উদ্দেশ্যে কাজ করে কারণ সেই ইন্টারফেসগুলি সক্রিয়<->নিষ্ক্রিয় থেকে স্থানান্তরিত হয়।
WARM-এর উদ্দেশ্য হল কম্পাইলের সময় WarmProjectConfig.h এবং WarmConfig.h এর মাধ্যমে কনফিগার করা। WarmProjectConfig.h অবশ্যই ডিভাইসের সমর্থিত বৈশিষ্ট্যগুলিকে সঠিকভাবে প্রতিফলিত করবে যার উপর WARM কার্যকর করবে৷
WARM হল একটি পোর্টেবল মডিউল যা একটি TCP/IP স্ট্যাক এবং থ্রেড ইন্টারফেস কীভাবে কনফিগার করা হয় তার উপর নির্ভরতা সীমিত করে। এই উদ্দেশ্যে WARM প্ল্যাটফর্ম API-এর একটি সেটের উপর নির্ভর করে যা প্ল্যাটফর্ম ইন্টিগ্রেটর দ্বারা প্রয়োগ করা আবশ্যক। উপরন্তু, প্ল্যাটফর্ম ইন্টিগ্রেটর প্ল্যাটফর্ম কোড বেসের মধ্যে উপযুক্ত এক্সিকিউশন পয়েন্ট থেকে বিভিন্ন nl::Warm API কল করার জন্য দায়ী।
কার্যপ্রণালীর তত্ত্ব:
প্ল্যাটফর্ম কোড বেস ওয়াইফাই ইন্টারফেস এবং থ্রেড ইন্টারফেসের মতো সম্পর্কিত বৈশিষ্ট্যগুলির জন্য রাজ্যের পরিবর্তন ঘোষণা করতে nl::Warm API-কে কল করবে। এই nl::Warm API-এর যেকোনো একটিতে কলের ফলে WARM-এর প্ল্যাটফর্ম::RequestInvokeActions() থেকে একটি কল হতে পারে। প্ল্যাটফর্ম::RequestInvokeActions() প্রয়োজনীয় ক্রিয়াকলাপ সম্পাদন করার জন্য অবশ্যই প্রয়োগ করতে হবে যা Warm::InvokeActions() কল করবে। প্রথম নজরে এই প্রক্রিয়াটি অপ্রয়োজনীয়ভাবে পরোক্ষ প্রদর্শিত হতে পারে। কেন WARM সরাসরি InvokeActions কল করবে না? এই প্রশ্নের উত্তর হল, একটি মাল্টি-টাস্কিং সিস্টেমের যেকোন কাজকে nl::Warm State Change API-কে কল করার অনুমতি দেওয়া এবং একটি মেকানিজম প্রদান করা যাতে শুধুমাত্র একটি নির্দিষ্ট কাজকে Platform:: API-কে কল করা যায়। প্ল্যাটফর্মের প্রয়োজনীয়তাগুলি বিবেচনায় নেওয়ার পরে, প্ল্যাটফর্ম ইন্টিগ্রেটর প্লাটফর্ম::RequestInvokeActions() বাস্তবায়ন করতে বেছে নিতে পারে যাতে এটি উপযুক্ত কাজের জন্য একটি ইভেন্ট পোস্ট করে যা Warm::InvokeActions() কল করে প্রতিক্রিয়া জানাবে। যদি, একটি প্রদত্ত প্ল্যাটফর্মের জন্য, সিদ্ধান্ত নেওয়া হয় যে এই ধরনের কোনো মাল্টি-টাস্কিং উদ্বেগ নেই, তাহলে Platform::RequestInvokeActions() সরাসরি Warm::InvokeActions() কল করার জন্য প্রয়োগ করা যেতে পারে।
যখন Warm::InvokeActions() বলা হয় তখন WARM লজিক বর্তমান সিস্টেম স্টেট পরীক্ষা করবে এবং যেকোনো প্রয়োজনীয় প্ল্যাটফর্ম:: এপিআই কল করবে যাতে ঠিকানা এবং রাউটিং স্টেট সিস্টেম এবং কনফিগারেশন স্টেটের সাথে সামঞ্জস্যপূর্ণ হয়। এই কলগুলি একটি পূর্ব-নির্ধারিত ক্রমানুসারে করা হয় এবং যদি এই APIগুলির মধ্যে যেকোনও kPlatformResultInProgress ফেরত দেয়, তাহলে আদেশকৃত তালিকার সম্পাদন স্থগিত হবে এবং প্রস্থান করবে। অধিকন্তু, যখন এই APIগুলির মধ্যে একটি kPlatformResultInProgress ফেরত দেয়, তখন এটি ব্যাখ্যা করা হয় যে অপারেশনটি অ্যাসিঙ্ক্রোনাসভাবে সম্পূর্ণ হবে এবং WARM লজিকটি সেই অপারেশনটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করা উচিত। অপারেশন সমাপ্তির পরে, প্ল্যাটফর্ম কোডটি কল করা উচিত Warm::ReportActionComplete() , যা kPlatformResultSuccess বা kPlatformResultFailure এর ফলাফলে পাস করে। এই কলটি পাওয়ার পর WARM লজিক আবার Platform::RequestInvokeActions() এ কল করবে যাতে অর্ডারকৃত অ্যাকশন লিস্টের এক্সিকিউশন রিস্টার্ট করা যায়।
এইভাবে WARM-এর নিজস্ব টাস্কের প্রয়োজন হয় না তবে উপযুক্ত হিসাবে ওয়ার্মে কল করার জন্য অন্য কাজের উপর নির্ভর করতে পারে। অতিরিক্তভাবে, যে কোনো কাজ এক বা একাধিক সিস্টেম স্টেট পরিবর্তন API-কে কল করতে পারে, এইভাবে ইন্টিগ্রেশনকে সহজ করে।