# Cloud Point RPC Communication JSON RPC protocol and implementation with Unity Scene. ## API Documentation See [API.md](API.md) for detailed request/response formats. ## Comm model ```plantuml @startuml box ClientProcess #LightBlue Participant Caller Participant CloudPointClient Participant TCPClient end box box UnityProcess #LightGreen Participant TCPServer Participant CloudPointServer Participant UnityWorld end box UnityWorld -> CloudPointServer : init thread activate CloudPointServer CloudPointServer -> TCPServer : await for connection activate TCPServer ->CloudPointClient : init thread activate CloudPointClient CloudPointClient -> TCPClient : createConnection TCPClient -> TCPServer : establish connection TCPServer -> CloudPointServer : established deactivate TCPServer CloudPointServer -> TCPServer : await for calls TCPServer -> TCPServer : await for packet Caller -> CloudPointClient : I want something activate CloudPointClient CloudPointClient -> CloudPointClient : CallMethod CloudPointClient -> TCPClient : send(message) activate TCPClient TCPClient -> TCPServer : packet send TCPServer -> TCPServer : await for packet activate TCPServer TCPServer -> TCPServer : read packet TCPServer -> TCPClient : packet read TCPClient -> CloudPointClient : done deactivate TCPClient CloudPointClient -> TCPClient : await for response activate TCPClient TCPClient -> TCPClient : await for packet TCPServer -> CloudPointServer : callMethod activate CloudPointServer CloudPointServer -> UnityWorld : addToStaticQueue UnityWorld -> UnityWorld : read from queue activate UnityWorld UnityWorld -> UnityWorld : callMethod UnityWorld -> CloudPointServer: set task return value deactivate UnityWorld CloudPointServer -> TCPServer : return task deactivate CloudPointServer TCPServer -> TCPClient : send response TCPClient -> TCPServer : response read TCPClient -> CloudPointClient : response received TCPServer -> CloudPointServer : done deactivate TCPServer CloudPointClient -> Caller : here what you wanted deactivate CloudPointClient Caller -> CloudPointClient : destruct CloudPointClient -> TCPClient : finish waiting deactivate TCPClient deactivate CloudPointClient UnityWorld -> CloudPointServer : destruct deactivate CloudPointServer @enduml ``` ## Development The project uses **Meson** build system and **C++20**. ### Dependencies - Meson, Ninja - GCC/Clang (C++20 support) - Git (for subprojects) ### Build & Run ```bash meson setup build meson compile -C build ./build/src/cloud_point_rpc_server config.yaml ``` ### Testing ```bash meson test -C build -v ``` ## Docker You can build and run the cli using Docker. ### 1. Build Image ```bash docker build -t cloud-point-rpc . ``` ### 2. Run Container The cli will try to connect to a **running server** on ip and port defined in config.yml file. (defined in `config.yaml` inside the image). For simplicity, it's better to use a host network, so you will not have any headache with accessability. > *Server is not configured to run through container, if you need, contact me* You also can mount your own `config.yaml` to override the default settings: ```bash docker run --network=host -it -v $(pwd)/my_config.yaml:/app/config.yaml cloud-point-rpc ```