আমি একটি ডেমন তৈরি করেছি যা খুব আদিম রূপ ব্যবহার করেছিল ipc(টেলনেট এবং একটি স্ট্রিং পাঠান যাতে নির্দিষ্ট ক্রমে নির্দিষ্ট শব্দ থাকে)। আমি এড়িয়ে গেলাম এবং এখন JSONএকটি Yesodসার্ভারে বার্তা প্রেরণ করতে ব্যবহার করছি । যাইহোক, আমার নকশা সম্পর্কে কিছু জিনিস সত্যই আমি পছন্দ করেছি এবং আমার পছন্দগুলি এখন কী তা নিশ্চিত।
আমি যা করছিলাম তা এখানে:
buildManager :: Phase -> IO ()
buildManager phase = do
let buildSeq = findSeq phase
jid = JobID $ pack "8"
config = MkConfig $ Just jid
flip C.catch exceptionHandler $
runReaderT (sequence_ $ buildSeq <*> stages) config
-- ^^ I would really like to keep the above line of code, or something like it.
return ()
বিল্ডসেক-এর প্রতিটি ফাংশন এর মতো দেখায়
foo :: Stage -> ReaderT Config IO ()
data Config = MkConfig (Either JobID Product) BaseDir JobMap
JobMapএটি এমন একটি TMVar Mapযা বর্তমান কাজ সম্পর্কে তথ্য ট্র্যাক করে।
সুতরাং এখন, আমার যা আছে হ্যান্ডলারগুলি হ'ল এটি সমস্তর মতো দেখতে
foo :: Handler RepJson
foo আমার ডিমনটির জন্য একটি কমান্ড উপস্থাপন করে, প্রতিটি হ্যান্ডলারের একটি আলাদা জেএসওএন অবজেক্টটি প্রক্রিয়া করতে হতে পারে।
আমি যা করতে চাই তা হ'ল একটি JSONঅবজেক্ট যা সাফল্যের প্রতিনিধিত্ব করে এবং অন্য জেএসওএন অবজেক্ট যা কিছু ব্যতিক্রম সম্পর্কে তথ্য প্রেরণ করে।
আমি চাই fooগুলি সাহায্যকারী ফাংশন একটি আসতে পাবে Either, কিন্তু আমি নিশ্চিত নই আমি, যে পেতে, প্লাস কর্মের আমার তালিকা মূল্যায়ন বিনষ্ট করার ক্ষমতা buildSeq।
এখানে আমি দেখতে একমাত্র পছন্দ
1) exceptionHandlerহ্যান্ডলারের মধ্যে আছে তা নিশ্চিত করুন । রাখুন JobMapমধ্যে Appরেকর্ড। ব্যতিক্রম সম্পর্কিত বিশদটি নির্দেশ getYesodকরতে উপযুক্ত মান পরিবর্তন করে ব্যবহার JobMapকরুন যা এর পরে প্রবেশ করা যেতে পারেfoo
একটি ভাল উপায় আছে কি?
আমার অন্যান্য পছন্দ কি?
সম্পাদনা করুন: স্পষ্টতার জন্য, আমি এর ভূমিকাটি ব্যাখ্যা করব Handler RepJson। কমান্ডগুলি গ্রহণ করার জন্য সার্ভারের কিছু উপায় প্রয়োজন build stop report। ক্লায়েন্টের এই কমান্ডগুলির ফলাফল জানার কিছু উপায় প্রয়োজন। সার্ভার এবং ক্লায়েন্ট একে অপরের সাথে যোগাযোগের মাধ্যম হিসাবে আমি জেএসএনকে বেছে নিয়েছি। আমি হ্যান্ডলারের ধরণটি কেবল JSON ইন / আউট পরিচালনা করতে এবং আরও কিছু না ব্যবহার করতে চাই।