| | |
| | | |
| | | ## Official Implementation |
| | | |
| | | As seen in HyperScape, this protocol is done over [RendezVous](./03_structure.md) data packets. |
| | | As seen in HyperScape, this protocol is done over [RendezVous](03_structure) data packets. |
| | | |
| | | When a request is made, usually in a function going by `<protocol name>Protocol::Call<method name>`, a call context is created and containers in memory for data returned by the server are associated with **return value pointers**, with IDs from `[0, n)`, where n is the number of parameters. |
| | | |
| | |
| | | |
| | | Here are the currently understood RMC protocols implemented in HyperScape. Some appear to be standard to Ubisoft games as a whole, while others appear to be designed specifically for the game. |
| | | |
| | | | Protocol | Description | HyperScape-specific? | |
| | | |------------------------------------------------------------------------------|-------------------------------------------------------------------|----------------------| |
| | | | [`LoginProtocol`](./01_rmc_protocols/loginprotocol.md) | Used for authenticating with an RMC server using a Ubisoft token. | ✖️ | |
| | | | [`CloudServersProtocol`](./01_rmc_protocols/cloudserversprotocol.md) | Used for listing datacenters for connecting to game servers. | ✔️ | |
| | | | [`ApexAntitoxicityProtocol`](./01_rmc_protocols/apexantitoxicityprotocol.md) | Currently unknown, presumably for managing bans and mutes. | ✔️ | |
| | | | ... | ... | ... | |
| | | | Protocol | Description | HyperScape-specific? | |
| | | |------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|----------------------| |
| | | | [`LoginProtocol`](01_rmc_protocols/loginprotocol) | Used for authenticating with an RMC server using a Ubisoft token. | ✖️ | |
| | | | [`CloudServersProtocol`](01_rmc_protocols/cloudserversprotocol) | Used for listing datacenters for connecting to game servers. | ✔️ | |
| | | | [`ApexAntitoxicityProtocol`](01_rmc_protocols/apexantitoxicityprotocol) | Currently unknown, possibly for managing bans and mutes. | ✔️ | |
| | | | [`SessionProtocol`](01_rmc_protocols/sessionprotocol) | Presumably for creating, joining and leaving game sessions, but it is unknown what that entails. | ✔️ | |
| | | | ... | ... | ... | |
| | | |
| | | > [!NOTE] |
| | | > This list is far from complete. |
| | |
| | | | Name | Description | Type | |
| | | |---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------| |
| | | | Packet Length | The total number of bytes in the packet, not including the length itself. | `u32` | |
| | | | Protocol Name | The protocol service on the server that is responsible for managing this request | [`String`](./03_structure.md#structure-string) | |
| | | | Protocol Name | The protocol service on the server that is responsible for managing this request | [`String`](03_structure.md#structure-string) | |
| | | | Is Request? | Whether or not this packet is for a _request_. | `bool` | |
| | | | ... | See [Request Packet Format](#request-packet-format) or [Response Packet Format](#response-packet-format) for parsing the packet depending on `Is Request?`. | ... | |
| | | |
| | |
| | | |----------------|---------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------| |
| | | | ... | See [Base Packet Format](#base-packet-format) for parsing the prologue of a request packet. | ... | |
| | | | Call ID | The nonce token for this call to identify the response associated with this request. | `u32` | |
| | | | Method Name | The method to call on the server. | [`String`](./03_structure.md#structure-string) | |
| | | | Class Versions | Version information about the data in the request | [`List`](./03_structure.md#structure-listt)`<`[`ClassVersion`](#structure-classversion)`>` | |
| | | | Method Name | The method to call on the server. | [`String`](03_structure.md#structure-string) | |
| | | | Class Versions | Version information about the data in the request | [`List`](03_structure.md#structure-listt)`<`[`ClassVersion`](#structure-classversion)`>` | |
| | | | ... | See the respective [protocol and method specification](#known-protocols) to parse and write the rest of the packet. | | |
| | | |
| | | ### Structure: `ClassVersion` |
| | |
| | | |
| | | | Name | Description | Type | |
| | | |----------------|---------------------------------------------------|------------------------------------------------| |
| | | | Structure Name | The name of the structure to assign a version to. | [`String`](./03_structure.md#structure-string) | |
| | | | Structure Name | The name of the structure to assign a version to. | [`String`](03_structure.md#structure-string) | |
| | | | Version | The version of the structure. | `u16` | |
| | | |
| | | ## Response Packet Format |
| | |
| | | |-------------|---------------------------------------------------------------------------------------------------------------------|------------------------------------------------| |
| | | | ... | See [Response Packet Format](#response-packet-format) for parsing the prologue of a successful response packet. | ... | |
| | | | Call ID | The nonce token for the call to associate the response to the request. | `u32` | |
| | | | Method Name | The method that was called by the client, see note below. | [`String`](./03_structure.md#structure-string) | |
| | | | Method Name | The method that was called by the client, see note below. | [`String`](03_structure.md#structure-string) | |
| | | | ... | See the respective [protocol and method specification](#known-protocols) to parse and write the rest of the packet. | | |
| | | |
| | | > [!NOTE] |
| | |
| | | | Name | Description | Type | |
| | | |-----------------|--------------------------------------------------------------------------------------------------------------------|------------------------------------------------| |
| | | | ... | See [Response Packet Format](#response-packet-format) for parsing the prologue of an unsuccessful response packet. | ... | |
| | | | Error Namespace | The category of error that occurred. | [`String`](./03_structure.md#structure-string) | |
| | | | Error Namespace | The category of error that occurred. | [`String`](03_structure.md#structure-string) | |
| | | | Error Code | The code of the error in the specified namespace | `u16` | |
| | | | Call ID | The nonce token for the call to associate the response to the request. | `u32` | |