2012-05-12 11 views
5

पृष्ठभूमि: मैं एक नोटपैड लुकलाइक एप्लिकेशन बनाना चाहता हूं जिसमें एकाधिक लोग एक दस्तावेज़/नोटपैड संपादित कर सकते हैं। मैंने पहले ही ग्राफिक इंटरफ़ेस बनाया है और अब इसके बहु उपयोगकर्ता सहयोग भाग का शोध करना शुरू करना चाहते हैं।जावा में रीयल टाइम सहयोग नोटपैड बनाना

प्रश्न: मैं किसी क्लाइंट के टेक्स्टबॉक्स से टेक्स्ट को किसी अन्य क्लाइंट के टेक्स्टबॉक्स पर जाने के लिए कैसे प्राप्त करूं। क्या मैं सॉकेट का उपयोग करूँगा? मैं उस पाठ को कहां रखूंगा जो सभी ग्राहकों के साथ साझा किया जा रहा है? कार्यशील वास्तविक समय सहयोगी टेक्स्ट-बॉक्स बनाने के लिए मुझे क्या करना होगा/करना होगा। क्या एक अच्छा प्रारंभिक बिंदु है जिससे मैं शोध कर सकता हूं?

उदाहरण: Etherpad.com/Titanpad.com/Piratepad.com या Docs.Google.com (सिवाय मैं एक डेस्कटॉप अनुप्रयोग बनाना चाहते हैं, एक वेबसाइट नहीं)

कुछ सवाल है कि जवाब में पैदा हुए हैं को संबोधित करते:

कैसे उपयोगकर्ताओं को एक दस्तावेज़ वे संपादित करना चाहते हैं का चयन कैसे करूँ: हाँ

कैसे उन नए दस्तावेज़ भी बना कर: मुख्य मेनू

यदि बहुत से उपयोगकर्ताओं को संपादित करने की कोशिश क्या होता है में नई फ़ाइल विकल्प का चयन करके एक ही दस्तावेज़ पर एक बार? : वे सभी दस्तावेज़ को संपादित करने की अनुमति है।

क्या किसी उपयोगकर्ता को परिवर्तनों को प्रतिबिंबित करने से पहले "सहेजें" बटन पर क्लिक करने की आवश्यकता होती है? : नहीं, परिवर्तनों को एक साथ प्रतिबिंबित किया जाना चाहिए

क्या उपयोगकर्ताओं को लॉग इन करने की आवश्यकता है? : हाँ

क्या कोई भी दस्तावेज़ संपादित कर सकता है, या वहां प्रतिबंधों का उपयोग कर सकते हैं? : प्रतिबंध हैं यानी। दस्तावेज़ का निर्माता किसी उपयोगकर्ता को दस्तावेज़ों को संपादित करने से रोक सकता है ..

उत्तर

2

समाधान की तलाश में पहला कदम है, वांछित अंत परिणाम को पर्याप्त विवरण में परिभाषित करना है। केवल बहु-उपयोगकर्ता सहयोग भाग पर विचार करने के बजाय, पूरे उपयोगकर्ता अनुभव का वर्णन करने का प्रयास करें:

  • उपयोगकर्ता एक दस्तावेज़ चुनते हैं जिसे वे संपादित करना चाहते हैं?
  • उपयोगकर्ता नए दस्तावेज़ कैसे बनाते हैं?
  • क्या होता है यदि कई उपयोगकर्ता एक ही दस्तावेज़ को एक ही बार संपादित करने का प्रयास करते हैं?
  • क्या किसी उपयोगकर्ता को परिवर्तनों को प्रतिबिंबित करने से पहले "सहेजें" बटन पर क्लिक करने की आवश्यकता होती है?
  • क्या उपयोगकर्ताओं को लॉग इन करने की आवश्यकता है?
  • क्या कोई भी दस्तावेज़ संपादित कर सकता है, या वहां प्रतिबंधों का उपयोग कर सकते हैं?

इन डिज़ाइन निर्णयों के माध्यम से सोचकर, आप अंततः कुछ विशिष्ट कार्यान्वयन प्रश्नों के साथ समाप्त हो जाएंगे जिन्हें आप उत्तर देने का प्रयास कर सकते हैं।

+0

मैंने उन सभी सवालों के जवाब देने के लिए एक बहुत ही विशिष्ट "प्रोग्राम प्लानिंग शीट" लिखा है। मेरा पहला कदम एक साधारण सहयोगी टेक्स्टबॉक्स प्राप्त करना है जिसका मैं निर्माण कर सकता हूं। – Singh

+0

प्रश्न उन विशिष्ट प्रश्नों का उत्तर संपादित करते हुए संपादित किया गया, – Singh

0

आप निश्चित रूप से etherpad.Especially के स्रोत कोड में देखने की जरूरत है Collab_server.js .कि मुख्य फ़ाइल जो इस फ़ाइल की मुख्य विधि के functionalists.One की बहुत करता है इस प्रकार है लायक जाँच हो सकता है:

function applyUserChanges(pad, baseRev, changeset, optSocketId, optAuthor) { 
    // changeset must be already adapted to the server's apool 

    var apool = pad.pool(); 
    var r = baseRev; 
    while (r < pad.getHeadRevisionNumber()) { 
    r++; 
    var c = pad.getRevisionChangeset(r); 
    changeset = Changeset.follow(c, changeset, false, apool); 
    } 

    var prevText = pad.text(); 
    if (Changeset.oldLen(changeset) != prevText.length) { 
    _doWarn("Can't apply USER_CHANGES "+changeset+" to document of length "+ 
      prevText.length); 
    return; 
    } 

    var thisAuthor = ''; 
    if (optSocketId) { 
    var connectionId = getSocketConnectionId(optSocketId); 
    if (connectionId) { 
     var connection = getConnection(connectionId); 
     if (connection) { 
     thisAuthor = connection.data.userInfo.userId; 
     } 
    } 
    } 
    if (optAuthor) { 
    thisAuthor = optAuthor; 
    } 

    pad.appendRevision(changeset, thisAuthor); 
    var newRev = pad.getHeadRevisionNumber(); 
    if (optSocketId) { 
    _getPadRevisionSockets(pad)[newRev] = optSocketId; 
    } 

    var correctionChangeset = _correctMarkersInPad(pad.atext(), pad.pool()); 
    if (correctionChangeset) { 
    pad.appendRevision(correctionChangeset); 
    } 

    ///// make document end in blank line if it doesn't: 
    if (pad.text().lastIndexOf("\n\n") != pad.text().length-2) { 
    var nlChangeset = Changeset.makeSplice(
     pad.text(), pad.text().length-1, 0, "\n"); 
    pad.appendRevision(nlChangeset); 
    } 

    updatePadClients(pad); 

    activepads.touch(pad.getId()); 
    padevents.onEditPad(pad, thisAuthor); 
} 

यह हो सकता है कि इससे आपको शुरुआत करने में मदद मिलेगी।

+0

मुझे कहने के लिए धन्यवाद कि मुझे कहां देखना है। मैंने कई हफ्ते पहले स्रोत डाउनलोड किया था, लेकिन मुझे नहीं पता था कि कहां से देखना शुरू करना है। – Singh

0

Operational transformation पर एक नज़र डालें, जो Google उनके (बंद) वेव उत्पाद के लिए उपयोग कर रहा था। अपने पुस्तकालयों के प्रासंगिक लिंक के लिए here देखें।

0

यहां एक लिंक है http://scholar.lib.vt.edu/theses/available/etd-05032001-113750/unrestricted/FinalThesis.pdf आप इस पीडीएफ के माध्यम से जा सकते हैं। यह आपको एक अंतर्दृष्टि प्रदान करता है कि एक सहयोगी संपादक कैसे काम करता है। यह आर्किटेक्चर और डिज़ाइन के बारे में विवरण देता है जो वे उपयोग कर रहे हैं।
शायद यह आपको बस शुरू करने में मदद करेगा।

संबंधित मुद्दे