Exemplo n.º 1
0
        /// <summary>
        /// Sends a request to the server to login the user
        /// </summary>
        /// <param name="loginToken">The token to login the user</param>
        /// <returns></returns>
        public static async Task <Response> Login(LoginToken loginToken)
        {
            await Task.Run(() =>
            {
                // Set the ManualResetEvent to wait again in case the registration fails.
                _userLoginDone.Reset();

                ServerResponse += ChatClient_ServerResponse;

                string tcpString = loginToken.BuildLoginTcpString();

                // Send data to server and wait
                try
                {
                    Send(_client, tcpString);
                    _sendDone.WaitOne();
                }
                catch (ObjectDisposedException exc)
                {
                    Response response = new Response
                    {
                        Status = StatusCode.Failure,
                        Error  = "Unable to connect to server"
                    };

                    _sendDone.Set();

                    _loginResponse = response;

                    return;
                }

                // Wait until server response to register user
                while (!_userLoginDone.WaitOne(0))
                {
                    Thread.SpinWait(1000);
                }
            });

            return(_loginResponse);
        }