146 lines
3.6 KiB
Markdown
146 lines
3.6 KiB
Markdown
# 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<Something>
|
|
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
|
|
git submodule init
|
|
git submodule update
|
|
meson setup build
|
|
meson compile -C build
|
|
./build/src/cloud_point_rpc_server config.yaml
|
|
```
|
|
|
|
#### Build on windows
|
|
|
|
It's assumed that you have `GCC` and `make`/`ninja` installed on your system (and available in `PATH`)
|
|
|
|
```powershell
|
|
## FIRST OF ALL!
|
|
git submodule init
|
|
git submodule update
|
|
# Next python:
|
|
python3 -m venv .\venv
|
|
.\.venv\Scripts\Activate.ps1
|
|
pip install meson cmake
|
|
meson setup -Ddefault_library=static build
|
|
meson compile -C build
|
|
## .\build\tests\unit_tests < for dummy test
|
|
## .\build\src\.. < produced execs and libs
|
|
```
|
|
|
|
### 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
|
|
```
|