@UnityGaming Die Frage, die du hier stellen solltest ist, ob du wirklich das Rad neuerfinden willst, wenn es bereits robuste Lösungen gibt. Bedenke außerdem immer, dass es Anwender gibt, die ein einfaches Netzwerkshare bevorzugen würden, weil sie damit mehr Kontrolle über den Datenaustausch haben.
Mir war das jetzt zu viel Text den kompletten Thread zu lesen, aber ich hab das kurz überflogen und ich glaub die Frage war, wie du die Schematics auf mehrere Instanzen des Plugins verteilen kannst. Wenn du die Anforderung stellst, dass das Plugin keine externen Dienste braucht, dann würde ich das zumindest so aufbauen, dass man das trotzdem alles austauschen kann. Ich würde das daher so machen:
Sofern du irgendwelche Metadaten mit den Schematics speichern möchtest, dann würde ich das einfach als .json Datei neben der eigentlichen Schematic Datei machen. Ich gehe aktuell nicht davon aus, dass deine Instanzen gleichzeitig auf die selben Dateien schreiben wollen, ansonsten kommst du um eine Datenbank oder einen Syncserver nicht drum herum.
Aktuell scheinst du vermutlich die Schematics auf allen Instanzen vorhalten zu wollen, das ist allerdings blöd, wenn die Instanzen auf dem selben Server laufen und damit ohnehin auf das gemeinsame Verzeichnis Zugriff hätten. Also das würde ich daher auf jeden Fall so flexibel machen, dass man auch einfach ein Verzeichnis angeben kann, in dem die Daten liegen, also dass du dich erstmal überhaupt nicht darum kümmerst, wer die Dateien synchronisiert.
Im nächsten Schritt implementierst du dann ein (optionales) Feature, mit dem das Plugin das Synchronisieren selbst übernimmt. Ich würde hier aber auch auf Standards setzen, du könntest das z.B. über einen FTP Server machen und dann noch einen FTP Server mit deinem Plugin ausliefern. Dann könnte man wiederum ebenfalls selbst auswählen, ob man den Server nicht selbst hostet.
Du hättest damit dann 3 Betriebsmodi und maximale Flexibilität.
- Komplett ohne Sync (der Admin muss sich darum kümmern)
- Sync über externen FTP Server
- Sync über eingebauten FTP Server (eine Instanz wird dann zum Master und hostet den FTP Server). Musste natürlich nen FTP Server ins Plugin einbauen.
Warum keine eigene Lösung fürs Syncen? Weil du sonst Zugriffsberechtigungen, Dateitransfer und das Protokoll selbst entwickeln müsstest. Zuletzt noch der Hinweis, dass ich persönlich kein FTP sondern SFTP, also einfach das SSH Protokoll verwenden würde. FTP ist unverschlüsselt nämlich einfach Müll und es gibt massiv SFTP Libraries für Java. TFTP wär ansonsten noch ne Alternative, aber das hat halt gar keine Zugriffsberechtigungen und dürfte dann nicht offen übers Netzwerk erreichbar sein.
Eventuell willst du dir auch mal rsync angucken, das besteht nämlich eigentlich auch immer aus Client und Server, ich weiß nur nicht ob sich das überhaupt für deine Zwecke eignet, aber dafür gibts bestimmt auch Java Libraries. Oder du frägst mal Google, was es so zu "peer to peer sync" findet. Wenn dein Masterserver ausfällt stehen die anderen Instanzen nämlich dumm da. Das hier sah zumindest auf den ersten Blick ganz gut aus
http://hive2hive.com/
Edit: Was mir jetzt gerade noch eingefallen ist: Du könntest auch ein sehr simples System mit einem kleinen Webserver im Plugin aufbauen, der einfach GET und PUT anbietet und Metadaten und vielleicht auch einen Auth-Token im Header transportiert.