using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using OpenMetaverse; using OpenMetaverse.Packets; namespace groupmanager { public partial class frmGroupManager : Form { GridClient Client; Dictionary Groups; public frmGroupManager() { Client = new GridClient(); Client.Settings.MULTIPLE_SIMS = false; // Throttle unnecessary things down Client.Throttle.Land = 0; Client.Throttle.Wind = 0; Client.Throttle.Cloud = 0; Client.Network.LoginProgress += Network_OnLogin; Client.Network.EventQueueRunning += Network_OnEventQueueRunning; Client.Groups.CurrentGroups += Groups_CurrentGroups; InitializeComponent(); } void Groups_CurrentGroups(object sender, CurrentGroupsEventArgs e) { Groups = e.Groups; Invoke(new MethodInvoker(UpdateGroups)); } private void UpdateGroups() { lock (lstGroups) { Invoke((MethodInvoker)delegate() { lstGroups.Items.Clear(); }); foreach (Group group in Groups.Values) { Logger.Log(String.Format("Adding group {0} ({1})", group.Name, group.ID), Helpers.LogLevel.Info, Client); Invoke((MethodInvoker)delegate() { lstGroups.Items.Add(group); }); } } } /// /// The main entry point for the application. /// [STAThread] static void Main() { frmGroupManager frm = new frmGroupManager(); frm.ShowDialog(); } #region GUI Callbacks private void cmdConnect_Click(object sender, EventArgs e) { if (cmdConnect.Text == "Connect") { cmdConnect.Text = "Disconnect"; txtFirstName.Enabled = txtLastName.Enabled = txtPassword.Enabled = false; LoginParams loginParams = Client.Network.DefaultLoginParams(txtFirstName.Text, txtLastName.Text, txtPassword.Text, "GroupManager", "1.0.0"); Client.Network.BeginLogin(loginParams); } else { Client.Network.Logout(); cmdConnect.Text = "Connect"; txtFirstName.Enabled = txtLastName.Enabled = txtPassword.Enabled = true; groupBox.Enabled = false; lstGroups.Items.Clear(); } } private void lstGroups_SelectedIndexChanged(object sender, EventArgs e) { if (lstGroups.SelectedIndex >= 0) { cmdActivate.Enabled = cmdInfo.Enabled = cmdLeave.Enabled = true; } else { cmdActivate.Enabled = cmdInfo.Enabled = cmdLeave.Enabled = false; } } private void cmdInfo_Click(object sender, EventArgs e) { if (lstGroups.SelectedIndex >= 0 && lstGroups.Items[lstGroups.SelectedIndex].ToString() != "none") { Group group = (Group)lstGroups.Items[lstGroups.SelectedIndex]; frmGroupInfo frm = new frmGroupInfo(group, Client); frm.ShowDialog(); } } #endregion GUI Callbacks #region Network Callbacks private void Network_OnLogin(object sender, LoginProgressEventArgs e) { if (e.Status == LoginStatus.Success) { BeginInvoke( (MethodInvoker)delegate() { groupBox.Enabled = true; }); } else if (e.Status == LoginStatus.Failed) { BeginInvoke( (MethodInvoker)delegate() { MessageBox.Show(this, "Error logging in: " + Client.Network.LoginMessage); cmdConnect.Text = "Connect"; txtFirstName.Enabled = txtLastName.Enabled = txtPassword.Enabled = true; groupBox.Enabled = false; lstGroups.Items.Clear(); }); } } private void Network_OnEventQueueRunning(object sender, EventQueueRunningEventArgs e) { if (e.Simulator == Client.Network.CurrentSim) { Console.WriteLine("Event queue connected for the primary simulator, requesting group info"); Client.Groups.RequestCurrentGroups(); } } #endregion } }