के बीच रेस स्थिति से निपटने के लिए कैसे करें मैंने एरलांग के संदेश उत्तीर्ण निर्माण का उपयोग करके एक बहु खिलाड़ी गेम (सटीक, 4 खिलाड़ी होने के लिए) बनाया है। मैं एक उदाहरण के रूप में दिए गए लिंक पर tictactoe खेल का पालन किया है, लेकिन क्या वास्तव में इसी तरह की है के रूप में खेल में दिखाया गया है का निर्माण गुजर संदेश है:फ़ंक्शन कॉल
मैं तो ejabberd मल्टी उपयोगकर्ता चैट रूम पर इस खेल को चलाने के लिए चुना है, मैं लिखा इसके लिए एक ejabberd हुक। लेकिन यदि आप उपरोक्त लिंक पर tictactoe.erl फ़ाइल में NewGameState को देखते हैं, तो आप पाएंगे कि को एक चर में पुनर्प्राप्त करने का कोई तरीका नहीं है।
तो मैंने मैनेशिया का उपयोग किया और इस मैनेशिया टेबल से उत्पन्न प्रत्येक नए गैमेस्टेट को लिखा। अब मेरे ejabberd हुक के अंदर मैं अपने गेम फ़ंक्शन को कॉल करता हूं (यानी प्रत्येक कॉल पर मॉड्यूल की एक श्रृंखला -> "gen_server, game_modules, mnesia_modules" निष्पादित की जाती हैं) और गेम फ़ंक्शन के कॉल के ठीक नीचे हुक के अंदर मैं मेनेसिया टेबल से पढ़ रहा हूं gamestate इस प्रकार के लिए (यहाँ समारोह myMessage ejabberd हुक अंदर समारोह है):
myMessage({#message = Msg, C2SState})->
some_other_module:game_func(Args),
State=mnesia_module:read(key),
{Msg, C2SState};
myMessage(Acc) ->
Acc.
अब मेरी समस्या यह है कि पढ़ने के लिए आपरेशन मुझे एक खाली टेबल दे रहा है जब निष्पादन के आदेश
some_other_module:game_func(Args),
GameState=mnesia_module:read(key),
है
और जब मैं इन दो पंक्तियों के बीच timer:sleep/1
के रूप में देरी डालता हूं
some_other_module:game_func(Args),
timer:sleep(200)
GameState=mnesia_module:read(key),
मैं मुझे सुझाव है कि लाइन में पढ़ने आपरेशन
GameState=mnesia_module:read(key),
प्रदर्शन किया जा रहा है GameState का सही मूल्य मिल रहा है इस प्रकार: elow (मूल्य 200 विभिन्न मूल्यों के साथ कुछ परीक्षण के बाद बेतरतीब ढंग से चुना जाता है)/some_other_module:game_func(Args)
(जो मॉड्यूल की एक श्रृंखला है -> "gen_server, game_modules, mnesia_modules") से पहले निष्पादित किया गया है, मैनेशिया मॉड्यूल निष्पादित करने और गेमस्टेट को मेनेसिया टेबल में लिखने में सक्षम है।
मैं इस समस्या को कैसे हल कर सकता हूं क्योंकि मैं timer:sleep/1
का उपयोग नहीं करना चाहता क्योंकि यह भरोसेमंद समाधान नहीं है।
क्या कोई मुझे यहां एक काम का सुझाव दे सकता है। मेरा मतलब यह है कि क्या कोई मुझे हंस के अंदर गेमस्टेट को मैनेशिया के अलावा किसी अन्य माध्यम से पुनर्प्राप्त करने का एक तरीका सुझा सकता है, इसलिए मेरे पास दौड़ की स्थिति नहीं है।
या तो कोई तरीका है कि ejabberd कुछ कार्यक्षमता प्रदान करता है जिसका मैं यहां उपयोग कर सकता हूं?
अग्रिम धन्यवाद।
क्या आप मेनेसिया का उपयोग कर रहे हैं: dirty_ * functions? – Pouriya
नहीं @Pouriya मैं mnesia का उपयोग कर रहा हूं: कुछ लिखने के लिए लिखने के लिए लिखें/लिखें जबकि कुछ_other_module: game_func (Args) चल रहा है और मैनेशिया: जब डेटास्टेट = mnesia_module: read (key) कहा जाता है तो डेटा को पढ़ने के लिए पढ़ें/3 फ़ंक्शन। –
क्या आप कोड दिखा सकते हैं? – Pouriya