OpenMetaverse.GUI: Fixed some problems caused by rapidly clicking Login/Logout in a LoginPanel

git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3227 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
2009-11-16 06:20:28 +00:00
parent fa00302f18
commit 4e39c6d272
2 changed files with 38 additions and 27 deletions

View File

@@ -182,10 +182,37 @@ namespace OpenMetaverse.GUI
/// </summary>
public void Login()
{
if (_Client == null) return;
if (_LoginParams.MethodName == null)
_LoginParams = Client.Network.DefaultLoginParams("", "", "", "", "");
SetText(btnLogin, "Logout");
SetText(listNames, _LoginParams.FirstName + " " + _LoginParams.LastName);
SetText(txtPass, _LoginParams.Password);
if (LoginThread != null)
{
LoginThread.Abort();
LoginThread = null;
}
LoginThread = new Thread(new ThreadStart(delegate() { _Client.Network.Login(_LoginParams); }));
LoginThread.Start();
}
private void SetText(object control, string text)
{
if (this.InvokeRequired)
this.BeginInvoke(new MethodInvoker(delegate() { SetText(control, text); }));
else
{
if (control is Button) ((Button)control).Text = text;
else if (control is ComboBox) ((ComboBox)control).Text = text;
else if (control is TextBox) ((TextBox)control).Text = text;
}
}
private void InitializeClient(GridClient client)
{
_Client = client;
@@ -204,15 +231,12 @@ namespace OpenMetaverse.GUI
return;
}
btnLogin.Text = "Logout";
_LoginParams.FirstName = FirstName;
_LoginParams.LastName = LastName;
_LoginParams.Password = Password;
_LoginParams.Start = StartURI;
LoginThread = new Thread(new ThreadStart(delegate() { _Client.Network.Login(_LoginParams); }));
LoginThread.Start();
Login();
}
else if (btnLogin.Text == "Logout")
{
@@ -225,10 +249,7 @@ namespace OpenMetaverse.GUI
}
if (_Client != null)
{
if (_Client.Network.Connected)
_Client.Network.Logout();
}
_Client.Network.Logout();
btnLogin.Text = "Login";
}
@@ -251,21 +272,15 @@ namespace OpenMetaverse.GUI
private void Network_OnDisconnected(object sender, DisconnectedEventArgs e)
{
if (!this.IsHandleCreated) return;
this.BeginInvoke((MethodInvoker)delegate
{
btnLogin.Text = "Login";
});
SetText(btnLogin, "Login");
}
private void Network_OnLogin(object sender, LoginProgressEventArgs e)
{
if (!this.IsHandleCreated) return;
if (!this.IsHandleCreated) return;
this.BeginInvoke((MethodInvoker)delegate
{
btnLogin.Text = "Logout";
});
SetText(btnLogin, "Logout");
if (e.Status == LoginStatus.Success)
{
@@ -285,18 +300,12 @@ namespace OpenMetaverse.GUI
}
else if (e.Status == LoginStatus.Failed)
{
this.BeginInvoke((MethodInvoker)delegate
{
btnLogin.Text = "Login";
});
SetText(btnLogin, "Login");
}
else
{
this.BeginInvoke((MethodInvoker)delegate
{
listNames.Text = _LoginParams.FirstName + " " + _LoginParams.LastName;
txtPass.Text = _LoginParams.Password;
});
SetText(listNames, _LoginParams.FirstName + " " + _LoginParams.LastName);
SetText(txtPass, _LoginParams.Password);
}
}

View File

@@ -203,6 +203,8 @@ namespace OpenMetaverse.GUI
void Network_OnCurrentSimChanged(object sender, SimChangedEventArgs e)
{
if (_Client.Network.Connected) return;
GridRegion region;
if (Client.Grid.GetGridRegion(Client.Network.CurrentSim.Name, GridLayerType.Objects, out region))
{