2012-05-12 56 views
5

Arka plan: Birden çok kişinin bir belgeyi/not defterini düzenleyebileceği not defteri benzeri bir uygulama oluşturmak istiyorum. Grafik arayüzünü zaten oluşturdum ve şimdi çok kullanıcılı işbirliği bölümünü araştırmaya başlamak istiyorum.Java'da Gerçek Zamanlı İşbirliği Not Defteri Oluşturma

Sorular: Başka bir istemcinin metin kutusuna gitmek için metni bir istemcinin metin kutusundan nasıl alırım? Yuva mı kullanırdım? Tüm müşterilerle paylaşılacak metni nerede saklayacağım? İşleyen bir gerçek zamanlı işbirliği metin kutusu oluşturmak için ne kullanmalıyım/yapmalıyım? Ne üzerinde araştırma yapabileceğim iyi bir başlangıç ​​noktası nedir?

Örnekler: Etherpad.com/Titanpad.com/Piratepad.com veya Docs.Google.com

cevapları ortaya çıkmıştır bazı sorular Adresleme (i bir masaüstü uygulama oluşturmak için değil, bir web sitesi istiyorum hariç):

kullanıcıların düzenlemek istediğiniz belgeyi almak nasıl: Evet

kullanıcıların yeni belgeler oluşturmak yapmak nasıl: birçok kullanıcı düzenlemeye çalıştığınızda ne olur ana menüye

yeni Dosya seçeneğin seçilmesi ile aynı belgede bir Zamanlar? : Hepsi belgeyi düzenlemelerine izin verilir.

Bir kullanıcı, değişiklikler yansıtılmadan önce bir "kaydet" düğmesine tıklamanız mı gerekiyor? : Hayır, değişiklikler aynı anda yansıtılmalıdır

Kullanıcıların giriş yapması gerekiyor mu? : Evet

Herhangi bir belgeyi düzenleyebilir veya erişim kısıtlamaları var mı? : Kısıtlamalar var yani. belge yaratıcısı, bir kullanıcının belgeleri düzenlemesini durdurabilir ..

cevap

2

Bir çözüm aramanın ilk adımı, numaralı telefonun istenilen sonucunu belirlemektir.. Sadece çok kullanıcılı işbirliği bölümünü göz önünde bulundurmak yerine, kullanıcı deneyiminin tamamını tanımlamaya çalışın:

  • Kullanıcılar, düzenlemek istedikleri bir belgeyi nasıl seçer?
  • Kullanıcılar yeni belgeler nasıl oluşturur?
  • Birçok kullanıcı aynı belgeyi bir defada düzenlemeye çalışırsa ne olur?
  • Bir kullanıcı, değişiklikler yansıtılmadan önce bir "kaydet" düğmesine tıklamanız mı gerekiyor?
  • Kullanıcıların giriş yapması gerekiyor mu?
  • Herhangi bir belgeyi düzenleyebilir veya erişim kısıtlamaları var mı?

Bu tasarım kararlarını düşünürseniz, sonuçta yanıtlamaya çalıştığınız bazı özel uygulama sorularıyla sonuçlanacaksınız.

+0

Tüm bu soruları yanıtlayan çok özel bir "Program Planlama Sayfası" yazdım. İlk adımım, içinden çıkabileceğim basit bir ortak metin kutusu elde etmektir. – Singh

+0

Question, bu belirli soruları yanıtlarken düzenlenmiştir, – Singh

0

Kesinlikle Collab_server.js .That bu dosyanın ana yönteminin functionalists.One sürü yapmasıdır ana dosya etherpad.Especially kaynak koduna bakmak gerekir değerinde çek olabilir şöyle:

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); 
} 

Bu, yeni başlamanıza yardımcı olabilir.

+0

Bana nerede bakacağımı söylediğin için teşekkür ederim. Kaynağı birkaç hafta önce indirdim, ancak nereden bakacağımı bilmiyordum. – Singh

İlgili konular