Prengepower
Mitglied
Moin!
Wie vielleicht einige schon mitbekommen haben, arbeite ich zur Zeit an einem Multiuser-Editor.
Ich habe mir das so vorgestellt, dass halt mehrere Leute das Programm öffnen. Einer sagt: "Ich mach Host" und klickt dann auf den Button "Hosten".
Danach soll dann der Server gestartet werden. Die anderen Verbinden sich dann mit der IP des Hosters zu dem Server sodass die Verbindung zwischen allen besteht - soweit müsste das umsetzbar sein ne?
Jedenfalls stehe ich jetzt vor der Frage: wie mache ich das mit dem Multiuser-Quatsch
Generell hatte ich mir die Übertragung der neuen Daten so überlegt, dass ich nach jedem Zeichenanschlag (außer STRG, SHIFT, ALT,...) die Position auslese und das eingegebene Zeichen. Das wird dann zum Server geschickt und an alle anderen Teilnehmer der Session verschickt. Darauf wird dann aus diesen Informationen das Zeichen an der richtigen Stelle eingefügt und farblich in der Farbe des Autors markiert. Müsste ja so klappen oder?
Doch ich bin mir noch nicht sicher wie das mache wer grad schreibt... Ich habe mich ein bisschen umgehört und dürfte es folgende Varianten geben:
1) Button "Master"
Der der etwas schreiben will muss den Button Master klicken. Daraufhin wird bei den anderen Teilnehmern, dieser Button deaktiviert und erst wieder aktiviert, wenn der andere die Masterfunktion deaktivert hat. Dann kann der nächste --> ist eigentlich recht umständlich von der Bedienung her...
2) Automatische Mastervergabe
Sobald einer einen Tastenanschlag macht, wird dieser zum Master für beispielsweise die nächste Sekunde und die anderen sind gesperrt... --> Probleme bei gleichzeichtigem Tastenanschlag...
3) Named Pipes
Als ich mich während meinem Studium jetzt so ein wenig mit Pipes beschäftigen durfte kam mir die Idee. Ich könnte es komplett freilassen wann wer tippt.. Sobald jemand eine Eingabe macht, wird diese zuerst in eine Pipe weitergeleitet, welche vom Server erstellt wurde. Daraufhin greif der Server auf die Pipe nach dem FIFO-Prinzip zu und verarbeitet die ganzen Kommandos --> hört sich eignetlich am komfortabelsten an, aber ich bin mir nicht sicher ob es praktizierbar ist. Fakt ist, dass es die Klasse PipedOutputStream und so gibt...
Also was sagt ihr so zu meinen Ausführungen? Was ist praktikabel? Wie würdet ihr es machen? Habt ihr noch mehr Varianten auf dem Kasten? Kennt sich vielleicht jemand schon mit dem ganzen Problem aus?
Bin schonmal ganz gespannt auf hoffentlich viele interessante Beiträge
Mfg
Wie vielleicht einige schon mitbekommen haben, arbeite ich zur Zeit an einem Multiuser-Editor.
Ich habe mir das so vorgestellt, dass halt mehrere Leute das Programm öffnen. Einer sagt: "Ich mach Host" und klickt dann auf den Button "Hosten".
Danach soll dann der Server gestartet werden. Die anderen Verbinden sich dann mit der IP des Hosters zu dem Server sodass die Verbindung zwischen allen besteht - soweit müsste das umsetzbar sein ne?
Jedenfalls stehe ich jetzt vor der Frage: wie mache ich das mit dem Multiuser-Quatsch

Doch ich bin mir noch nicht sicher wie das mache wer grad schreibt... Ich habe mich ein bisschen umgehört und dürfte es folgende Varianten geben:
1) Button "Master"
Der der etwas schreiben will muss den Button Master klicken. Daraufhin wird bei den anderen Teilnehmern, dieser Button deaktiviert und erst wieder aktiviert, wenn der andere die Masterfunktion deaktivert hat. Dann kann der nächste --> ist eigentlich recht umständlich von der Bedienung her...
2) Automatische Mastervergabe
Sobald einer einen Tastenanschlag macht, wird dieser zum Master für beispielsweise die nächste Sekunde und die anderen sind gesperrt... --> Probleme bei gleichzeichtigem Tastenanschlag...
3) Named Pipes
Als ich mich während meinem Studium jetzt so ein wenig mit Pipes beschäftigen durfte kam mir die Idee. Ich könnte es komplett freilassen wann wer tippt.. Sobald jemand eine Eingabe macht, wird diese zuerst in eine Pipe weitergeleitet, welche vom Server erstellt wurde. Daraufhin greif der Server auf die Pipe nach dem FIFO-Prinzip zu und verarbeitet die ganzen Kommandos --> hört sich eignetlich am komfortabelsten an, aber ich bin mir nicht sicher ob es praktizierbar ist. Fakt ist, dass es die Klasse PipedOutputStream und so gibt...
Also was sagt ihr so zu meinen Ausführungen? Was ist praktikabel? Wie würdet ihr es machen? Habt ihr noch mehr Varianten auf dem Kasten? Kennt sich vielleicht jemand schon mit dem ganzen Problem aus?
Bin schonmal ganz gespannt auf hoffentlich viele interessante Beiträge

Mfg