Goal of my project is to build efficient cloud storage environment. For these purposes I've defined low-level transport protocol. Stumbling stone of developing worthy product was to build user-friendly GUI.
Network interaction is built with asynchronous event-driven framework Netty. Data is exchanged through self defined byte protocol. This decision was made to provide efficency and client platform independency.
Java 17, Netty, Spring, Hibernate, MySql, Lombock.
Many technologies were purposfully avoided. For example instead of using Spring Security, password encryption was implemented on byte level using SHA-256 algorithm.
I've managed to keep balance between efficient low-level code and architecture flexibility. For example:
- Building requests from bytes is encapsulated via Builder pattern.
- Requests are processed with Chain-of-responsibility pattern.
- File transfer operations are encapsulated via Command pattern.
Despite working with byte level, SOLID principles are followed.
Filesystem is provided via complex directory entity mapping. Folder sharing is defined.
Client application is built with Java 17 using JavaFX. Asynchronicity is established via using non-blocking Netty framework for network exchange.
User-friendliness of interface is achived by Drag and drop functionality, and using intuitively appealing context menus. Filesystems are represented by custom TreeView. Multiple scenes are staged. Client is always indicated with network operations progress.
- Requests are designed with Command pattern, wich is efficient for queuing and reverting actions.
- When user expands local directory, Observer is registered to monitor filesystem events.