Textsynchronisation im Netzwerk

fireblade1282

Mitglied
Hey... ich hab mal eine Anfrage die eher etwas Brainstorming als konkrete Programmierung erfordert.. wobei... oftmals hilft die Kenntnis um die am besten geeignete Klasse schon weiter....
Jedenfalls bin ich dabei eine Art Netzwerk-Notepad zu schreiben und der ganze Netzwerk-Teil funktioniert auch soweit. Jeder Client hat jetzt sein "Notepad-Widget" vor sich und kann lostippen. Der Initialzustand ist konsistent auf alle Clients verteilt, sprich sie haben alle den gleichen Text vor sich... Die zu übertragenden Änderungen (Ich arbeite mit den JFace Komponenten + DocumentEvents) sind im wesentlichen ein Tupel aus den drei Angaben Offset, Länge, Neuer Text.

Beispiel: Der Initialtext aller Clients ist "123456789".

Client 1 schreibt jetzt dran rum und erzeugt "ABC123456789" also das ChangeTupel (0,0,"ABC") Client 2 schreibt "123456789XYZ" also (9,0,"XYZ")... und dann entstehen natürlich Synchronisationsprobleme... je nachdem wie die Pakete beim Server eintreffen erzeugt dieser entweder "ABC123456XYZ789" oder "ABC123456789XYZ"... wie kann ich da am geschicktesten ansetzen? Vorallem muss ich die Changes nach Änderung am Server ja an die jeweils anderen Clients mitverteilen....

Ich denke mein Problem kommt rüber... es ist ja offensichtlich,.. aber je mehr ich drüber nachdenke und je mehr mir der Kopf qualmt...

Ein paar Ansätze sind folgende: Die Changes durchsortieren. Es wird ja immer dann etwas falsches erzeugt, wenn sich die Position ändert an die ein Change schreiben will... ich müsste sie also von "rechts nach links" ausführen... Aber die von einem Client kommenden Changes in sich müssen von "links nach rechts" ausgeführt werden, da ihre Positions ja aufeinander aufbauen... das passt irgendwie net... die Zeitlichkeit spielt eben eine große Rolle....
Zweite Idee bzw. Ansatz, den ich aber irgendwie nicht fertigbekomme.... sollte ich eine Art Buffer anlegen? So wie damals bei der Grafikprogrammierung... nicht Änderungen am Objekt selbst sondern an einer Kopie, diese dann am Ende "switchen"...

Ich denk eine Lösung wird wohl sowohl Zeit, Reihenfolge und Buffer benötigen,... aber ich kanns mir einfach grad nicht vorstellen...

Für die, die genauer wissen wollen mit was ich arbeite: Zur Zeit ein "TextViewer" mit zugrunde liegendem "Document", beides aus JFace,... da die DocumentEvent Objekte nicht serialisierbar waren, hab ich eine serialisierbare Version dieses Tupels geschrieben, für den Netzwerksocket...
Mir qualmt der Kopf, bin für ein paar Anregungen sehr dankbar...
 
Zurück