/// <summary>
    ///     Initialize events after initialize client
    /// </summary>
    /// <typeparam name="TAccount">Specified type of account</typeparam>
    /// <typeparam name="TSession">Specified type of session</typeparam>
    /// <param name="superNetCoreSocketClient">Instance of client</param>

    #region InitializeEvents

    private static void InitializeEvents <TAccount, TSession>(
        G9SuperNetCoreSocketClient <TAccount, TSession> superNetCoreSocketClient)
        where TAccount : AClientAccount <TSession>, new()
        where TSession : AClientSession, new()
    {
        // On connected
        superNetCoreSocketClient.OnConnected += account =>
                                                EventsQueue.Enqueue(() => AccessToG9Events4Unity.OnConnectedHandler?.Invoke(account));


        // On disconnect
        superNetCoreSocketClient.OnDisconnected += (account, reason) =>
                                                   EventsQueue.Enqueue(() => AccessToG9Events4Unity.OnDisconnectedHandler?.Invoke(account, reason));

        // On error
        superNetCoreSocketClient.OnError += (error, reason) =>
                                            EventsQueue.Enqueue(() => AccessToG9Events4Unity.OnErrorHandler?.Invoke(error, reason));

        // On reconnect
        superNetCoreSocketClient.OnReconnect +=
            (account, tryReconnectNumber) =>
            EventsQueue.Enqueue(
                () => AccessToG9Events4Unity.OnReconnectHandler?.Invoke(account, tryReconnectNumber));

        // On unhandled command
        superNetCoreSocketClient.OnUnhandledCommand +=
            (packet, account) =>
            EventsQueue.Enqueue(() => AccessToG9Events4Unity.OnUnhandledCommand?.Invoke(packet, account));

        // On unable to connect
        superNetCoreSocketClient.OnUnableToConnect +=
            () =>
            EventsQueue.Enqueue(() => AccessToG9Events4Unity.OnUnableToConnect?.Invoke());
    }
    public async Task StartConnection(string ip, int port)
    {
        // Initialize client
        G9SuperNetCoreClient =
            await G9SuperNetCoreClient4Unity.Initialize <GameAccount, GameSession>(GameAccount);

        await G9SuperNetCoreClient.StartConnection(ip, port);
    }
    /// <summary>
    ///     Run automatic in first time just one time
    /// </summary>

    #region Awake

    // ReSharper disable once UnusedMember.Local
    private async Task Awake()
    {
        // Run in background
        Application.runInBackground = true;
        // Screen set NeverSleep
        Screen.sleepTimeout = SleepTimeout.NeverSleep;
        // Make the game run as fast as possible
        Application.targetFrameRate = 60;
        // Initialize client
        G9SuperNetCoreClient = await G9SuperNetCoreClient4Unity.Initialize <ClientAccountSample, ClientSessionSample>(GameAccount);

        await G9SuperNetCoreClient.StartConnection();
    }