public Task LoginAsync(VoiceLoginCredentials credentials)
        {
            if (client == null)
            {
                client = new Client();
                var config = new VivoxConfig
                {
                    InitialLogLevel = vx_log_level.log_error
                };
                client.Initialize(config);
            }

            var tcs = new TaskCompletionSource <byte>();

            var accountId = new AccountId(credentials.AccountId);

            loginSession = client.GetLoginSession(accountId);

            loginSession.BeginLogin(credentials.ServerAddress, credentials.AccessToken, ar =>
            {
                try
                {
                    loginSession.EndLogin(ar);
                    tcs.SetResult(0);
                    //Debug.Log("[Vivox] Login sucessful");
                }
                catch (Exception e)
                {
                    tcs.SetException(e);
                    Debug.LogError("[Vivox] Login error " + e.Message);
                }
            });

            return(tcs.Task);
        }
예제 #2
0
        public void Authenticate()
        {
            if (!AuthSettings)
            {
                Debug.LogError("Vivox Auth Settings is null, set the property before authenticate.");
                return;
            }

            string uniqueId    = string.IsNullOrEmpty(Id) ? Guid.NewGuid().ToString() : Id;
            string displayName = string.IsNullOrEmpty(DisplayName) ? "Bot 2031" : DisplayName;

            //for proto purposes only, need to get a real token from server eventually
            _accountId   = new AccountId(AuthSettings.TokenIssuer, uniqueId, AuthSettings.Domain, displayName);
            LoginSession = Client.GetLoginSession(_accountId);
            LoginSession.PropertyChanged += OnLoginSessionPropertyChanged;
            LoginSession.BeginLogin(AuthSettings.ServerUri, LoginSession.GetLoginToken(AuthSettings.TokenKey, AuthSettings.TokenExpiration),
                                    SubscriptionMode.Accept, null, null, null, ar =>
            {
                try
                {
                    LoginSession.EndLogin(ar);
                }
                catch (Exception e)
                {
                    // Handle error
                    VivoxLogError(nameof(e));
                    // Unbind if we failed to login.
                    LoginSession.PropertyChanged -= OnLoginSessionPropertyChanged;
                    return;
                }
            });
        }
    public void Login(string userName)
    {
        AccountId accountId = new AccountId(issuer, userName, domain);

        loginSession = client.GetLoginSession(accountId);

        Bind_Login_Callback_Listeners(true, loginSession);
        loginSession.BeginLogin(server, loginSession.GetLoginToken(tokenKey, timeSpan), ar =>
        {
            try
            {
                loginSession.EndLogin(ar);
            }
            catch (Exception e)
            {
                Bind_Login_Callback_Listeners(false, loginSession);
                Debug.Log(e.Message);
            }
            // run more code here
        });
    }
예제 #4
0
        public IEnumerator SentReceivedMessageComparison()
        {
            CheckCredentials();

            // Initialize the client.
            Client _client = new Client();

            _client.Initialize();

            float        timeout;
            IAsyncResult waitHandle;

            // Login.
            bool          isLoggedIn   = false;
            string        uniqueId     = Guid.NewGuid().ToString();
            AccountId     _accountId   = new AccountId(_tokenIssuer, uniqueId, _domain, TEST_ACCOUNT_NAME);
            ILoginSession LoginSession = _client.GetLoginSession(_accountId);

            waitHandle = LoginSession.BeginLogin(_server, LoginSession.GetLoginToken(_tokenKey, _tokenExpiration), SubscriptionMode.Accept, null, null, null, ar =>
            {
                try
                {
                    isLoggedIn = true;
                    LoginSession.EndLogin(ar);
                }
                catch (Exception e)
                {
                    Assert.Fail($"BeginLogin failed: {e}");
                    return;
                }
            });
            timeout = Time.time + TIMEOUT_INTERVAL;
            yield return(new WaitUntil(() => waitHandle.IsCompleted && LoginSession.State == LoginState.LoggedIn || Time.time > timeout));

            Assert.IsTrue(isLoggedIn, "Failed to login.");

            // Join a channel with audio and text enabled.
            ChannelId       channelId      = new ChannelId(_tokenIssuer, TEST_CHANNEL_NAME, _domain);
            IChannelSession channelSession = LoginSession.GetChannelSession(channelId);

            channelSession.MessageLog.AfterItemAdded += OnMessageLogRecieved;
            bool isInChannel = false;

            waitHandle = channelSession.BeginConnect(true, true, true, channelSession.GetConnectToken(_tokenKey, _tokenExpiration), ar =>
            {
                try
                {
                    isInChannel = true;
                    channelSession.EndConnect(ar);
                }
                catch (Exception e)
                {
                    Assert.Fail($"BeginConnect failed: {e}");
                    return;
                }
            });
            timeout = Time.time + TIMEOUT_INTERVAL;
            yield return(new WaitUntil(() => waitHandle.IsCompleted && channelSession.TextState == ConnectionState.Connected && channelSession.AudioState == ConnectionState.Connected || Time.time > timeout));

            Assert.IsTrue(isInChannel, "Failed to join the specified channel.");

            // Send a message to the channel.
            string textMessage = "hello 😉";

            waitHandle = channelSession.BeginSendText(textMessage, ar =>
            {
                try
                {
                    channelSession.EndSendText(ar);
                }
                catch (Exception e)
                {
                    Assert.Fail($"BeginSendText failed: {e}");
                }
            });
            timeout = Time.time + TIMEOUT_INTERVAL;
            yield return(new WaitUntil(() => waitHandle.IsCompleted || Time.time > timeout));

            // Make sure the sent and received messages are the same.
            var originalMsg = Encoding.UTF8.GetBytes(textMessage);
            var receivedMsg = Encoding.UTF8.GetBytes(testMessage);

            // Ensure that the same amount of bytes exist for the sent and received messages.
            Assert.IsTrue(originalMsg.Length == receivedMsg.Length, "Sent and received messages should have the same length but they do not.");
            // Make sure each byte matches between the sent and received messages.
            for (int i = 0; i < originalMsg.Length; i++)
            {
                Assert.IsTrue(originalMsg[i] == receivedMsg[i], "Comparison of sent and received message failed. They should be the same but are not.");
            }

            _client.Uninitialize();

            GameObject.Destroy(GameObject.FindObjectOfType <VxUnityInterop>());
        }