Beispiel #1
0
    public async Task CallbackTouch()
    {
        if (TouchProgress)
        {
            return;
        }
        TouchProgress = true;

        var account = Consts.GetAccountFromFile();
        var socket  = await NetworkManager.Instance.GetGameSocketAsync(loginIfMissing : false);

        if (account == null)
        {
            var authToken = new byte[128];
            var rnd       = new RNGCryptoServiceProvider();
            rnd.GetBytes(authToken);

            account = await ConnectCanvas.Instance.CreateConnectInformation <Account>("계정 생성", (listener) =>
            {
                socket.GenerateAccountAsync(authToken, listener);
            }, null).WaitAsync();

            if (account == null)
            {
                return;
            }
            await AsyncUtil.WriteBytesAsync(Consts.ACCOUNT_FILE, MessagePackSerializer.Serialize(account));

            beforeLogin.SetActive(false);
            afterLogin.SetActive(true);
        }
        else
        {
            await ConnectCanvas.Instance.CreateConnectInformation("로그인", (listener) =>
            {
                if (account == null)
                {
                    throw new Exception("계정이 없음");
                }
                socket.LoginAccountAsync(account.Id, account.AuthToken, listener);
            }, null)
            .StartAfter(ConnectCanvas.Instance.CreateConnectInformation("시작 데이터 가져오는중", (listener) =>
            {
                socket.FetchDataAsync(listener);
            }, new FinishListener <FetchData>((data) =>
            {
                DataManager.Instance.ReadFetchData(data);
            }, (message) => {  }), autoStart: false
                                                                        )).WaitAsync();

            SceneManager.LoadScene("MainScene");
        }
        TouchProgress = false;
    }