# 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 ```