में अपवाद मैंने एक डेमॉन बनाया था जो ipc
(टेलनेट का एक बहुत ही प्राचीन रूप का उपयोग करता था और एक स्ट्रिंग भेजता था जिसमें एक निश्चित क्रम में कुछ शब्द थे)। मैंने इसे बाहर निकाला और Yesod
सर्वर पर संदेशों को पास करने के लिए अब JSON
का उपयोग कर रहा हूं। हालांकि, कुछ चीजें मुझे वास्तव में मेरे डिजाइन के बारे में पसंद आईं, और मुझे यकीन नहीं है कि मेरे विकल्प अब क्या हैं।यसोड
यहाँ मैं क्या कर रहा था है:
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()
buildSeq में प्रत्येक कार्य इस
foo :: Stage -> ReaderT Config IO()
data Config = MkConfig (Either JobID Product) BaseDir JobMap
JobMap
की तरह देखा एक TMVar Map
कि वर्तमान नौकरियों के बारे में जानकारी को ट्रैक करता है।
तो अब, हैंडलर, वह सब इस
foo :: Handler RepJson
foo
की तरह लग रही मेरी डेमॉन के लिए एक कमांड का प्रतिनिधित्व करता है कि मैं क्या है, प्रत्येक हैंडलर एक अलग JSON ऑब्जेक्ट पर कार्रवाई करने के लिए हो सकता है।
मैं जो करना चाहता हूं वह एक JSON
ऑब्जेक्ट भेजता है जो सफलता का प्रतिनिधित्व करता है, और एक और JSON ऑब्जेक्ट जो कुछ अपवाद के बारे में जानकारी को दबाता है।
मैं foo
रों सहायक समारोह एक Either
लौटने में सक्षम होना चाहते हैं, लेकिन मुझे यकीन है कि मैं यह कैसे प्राप्त नहीं कर रहा हूँ, के साथ साथ कार्रवाई की मेरी सूची, buildSeq
के मूल्यांकन को समाप्त करने की क्षमता।
यहाँ एकमात्र विकल्प मैं
1) यकीन है कि exceptionHandler
हैंडलर में है देखते हैं। App
रिकॉर्ड में JobMap
रखो। getYesod
JobMap
में उचित मान अपवाद के बारे में विवरण का संकेत, जो तब तक foo
वहाँ एक बेहतर तरीका है पहुँचा जा सकता है बदल ले रहे हैं?
मेरे अन्य विकल्प क्या हैं?
संपादित करें: स्पष्टता के लिए, मैं Handler RepJson
की भूमिका की व्याख्या करूंगा। सर्वर को build
stop
report
जैसे आदेशों को स्वीकार करने के किसी तरीके की आवश्यकता है। ग्राहक को इन आदेशों के परिणामों को जानने के कुछ तरीके की आवश्यकता है। मैंने JSON को माध्यम के रूप में चुना है जिसके साथ सर्वर और क्लाइंट एक दूसरे के साथ संवाद करते हैं। मैं JSON इन/आउट प्रबंधित करने के लिए हैंडलर प्रकार का उपयोग कर रहा हूं और कुछ और नहीं।
आपकी अंतर्दृष्टि के लिए धन्यवाद, टायलर डर्डन। –