// decodePacket decodes from the readBuffer using the ISAAC rand generator func (svc *GameService) decodePacket(client player.Player) error { b := client.Conn().ReadBuffer data, err := b.Peek(1) if err != nil { return err } idByte := int(data[0]) rand := client.ISAACIn().Rand() realId := uint8(uint32(idByte) - rand) packet, err := game_protocol.NewInboundPacket(int(realId)) if err != nil { return fmt.Errorf("%v: packet %v", err, realId) } err = packet.Decode(b, rand) if err != nil { return err } if !client.Conn().IsDisconnecting() { client.Conn().Read <- packet } return nil }