---
# System prepended metadata

title: RFC protocol Client / Server

---

# RFC protocol Client / Server

## Introduction

### How work the update of the game

Every x ticks, all the game is resend to the client so that no roll back may cause a desync, else all the entities that have been updated are send.
Packet types shouldn't represent where they come from, they should be universal.

### Words and meanings:

    EntityNetworkId -> 2 byte binary of the entity's ID
    PosX -> 2 byte binary of the horizontal position
    PosY -> 2 byte binary of the vertical position
    Width -> 1 byte binary of the entity's width
    Height -> 1 byte binary of the entity's height
    TypeId -> 1 byte binary of the entity's type ID
    VelocityX -> 1 byte binary of the horizontal velocity of entity
    VelocityY -> 1 byte binary of the vertical velocity of entity
    ClientName -> 4 bytes of chars that identify the player
    OccupiedSlots -> 1 byte binary of the amount of clients already connected
    Health -> 1 byte binary of the amount of health the player has

### Order of bytes:

In order to stay consistant with the information that is received and sent, we have decided to follow this template for all packets.

    <packet type>(<Health>)(<OccupiedSlots>)(<ClientName>)(<EntityNetworkId>)(<TypeId>)(<PosX><PosY>)(<Width><Height>)(<VelocityX><VelocityY>)

## Universal

### Keep Alive Request

Keep alive response request, asks the other side of the connection for a packet to ensure that it is still alive

```
    Packet type: 01000110 (70)
```

### Keep Alive Response

Response to the KA request

```
    Packet type: 01000111 (71)
```

## Client to Hub Server

In order for the client to connect to a room, they must first connect to the main server in order to get the current list of rooms.

### Connection

Client connects to the hub
```
Packet type: 00000000 (0)
```

### Request room information

Client refreshes server list

```
Packet type: 00111100 (60)
```

## Hub Server to Client

### Connection

Client connects to the lobby
```
Packet type: 01000000 (64)
    
```

### Room info

```
Packet type: 10000001 (129)
    Port: 2 byte
    OccupiedSlots: 1 byte
```

## Hub to Room

Hub connects to room for the first time

```
Packet type: 01000100 (68)
```

### Room check

```
Packet type: 01111111 (127)
```

## Room to Hub

```
Packet type: 10000010 (130)
    OccupiedSlots: 1 byte
```

### Room info

```
Packet type: 00111101 (61)
    OccupiedSlots: 1 byte
```

## Client to Room

### Connection

Client connects to server for first time
```
Packet type: 00000000 (0)
```

### Client sends an input to the Room Server

Moved player to position:
```
Packet type: 00000001 (1)
    PosX: 2 byte
    PosY: 2 byte
```
Client shot:
```
Packet type: 00000010 (2)
```
Client Charged Shot:
```
Packet type: 00000100 (4)
```
## Room to Client

### Connection

Server responds to client connecting for first time
```
Packet type: 00000000 (0)
    EntityNetworkId: 2 byte
```

### Server updates on movement

Movement of Entity:
```
Packet type: 00001000 (8)
    EntityNetworkId: 2 byte
    TypeId: 1 byte
    PosX: 2 bytes
    PosY: 2 bytes
    Width: 1 byte
    Height: 1 byte
    VelocityX: 1 byte
    VelocityY: 1 byte
```

### Server on player health

Health of player:
```
Packet type: 00100110 (38)
    NetworkID: 2 bytes
    Health: 1 byte
```

### Server on wave counter

Wave:
```
Packet type: 00101000 (40)
    WaveCount: 1 byte
```    