Exemplo n.º 1
0
        /// <summary>
        /// Handle a column click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lvMacomberMapServers_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            ServerLinkedColumnHeader col = lvMacomberMapServers.Columns[e.Column] as ServerLinkedColumnHeader;

            if (col == null)
            {
                return;
            }
            cmsSystemInteraction.Items.Clear();
            cmsSystemInteraction.Items.Add("Server " + col.Uri.Host + ":" + col.Uri.Port).Enabled = false;
            if (col.SysInfo != null)
            {
                cmsSystemInteraction.Items.Add("Server process memory: " + col.SysInfo.SystemFreeMemory.ToString("#,##0")).Enabled = false;
                cmsSystemInteraction.Items.Add("Free memory: " + col.SysInfo.SystemFreeMemory.ToString("#,##0")).Enabled           = false;
            }
            cmsSystemInteraction.Items.Add("-");
            cmsSystemInteraction.Items.Add("Change Server Description").Tag = col;
            cmsSystemInteraction.Items.Add("-");
            cmsSystemInteraction.Items.Add("Generate server savecase").Tag = col;
            cmsSystemInteraction.Items.Add("Load server savecase").Tag     = col;
            cmsSystemInteraction.Items.Add("-");
            if (Environment.UserName.ToLower().Contains("legat"))
            {
                cmsSystemInteraction.Items.Add("Stress test clients ON").Tag  = col;
                cmsSystemInteraction.Items.Add("Stress test clients OFF").Tag = col;
                cmsSystemInteraction.Items.Add("-");
            }
            cmsSystemInteraction.Items.Add("Send a message to all users").Tag = col;
            cmsSystemInteraction.Items.Add("Force all user logoff").Tag       = col;
            cmsSystemInteraction.Show(Cursor.Position);
        }
Exemplo n.º 2
0
        /// <summary>
        /// This thread-safe object goes through all the servers, pulling in values
        /// </summary>
        /// <param name="state"></param>
        private void ServerInformationUpdater(object state)
        {
            while (true)
            {
                foreach (Uri ServerURI in MMServerConnections.Keys.ToArray())
                {
                    MM_Administrator_Types   Client    = MMServerConnections[ServerURI];
                    ServerLinkedColumnHeader TargetCol = MMServers[ServerURI];

                    if (Client.State == CommunicationState.Opening)
                    {
                        SetColor(TargetCol, Color.Yellow);
                    }
                    else if (Client.State == CommunicationState.Faulted || Client.State == CommunicationState.Closed || Client.State == CommunicationState.Closing)
                    {
                        SetColor(TargetCol, Color.Red);
                    }
                    else
                    {
                        try
                        {
                            TargetCol.SysInfo = Client.GetSystemInformation();
                            TargetCol.Users   = Client.GetUserInformation();
                        }
                        catch (Exception ex)
                        {
                            SetColor(TargetCol, Color.Red);
                        }
                    }
                }
                Thread.Sleep(1000);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Handle an input UDP message
        /// </summary>
        /// <param name="remoteEndPoint"></param>
        /// <param name="splStr"></param>
        private void HandleUDPMessage(IPEndPoint remoteEndPoint, string[] splStr)
        {
            try
            {
                if (IsDisposed || Disposing)
                {
                    return;
                }
                else if (InvokeRequired)
                {
                    Invoke(new SafeHandleUDPMessage(HandleUDPMessage), remoteEndPoint, splStr);
                }
                else
                {
                    Uri TargetUri = new Uri(splStr[3]);
                    ServerLinkedColumnHeader TargetCol;
                    if (!MMServers.TryGetValue(TargetUri, out TargetCol))
                    {
                        TargetCol = new ServerLinkedColumnHeader(splStr[2], TargetUri, null);
                        lvMacomberMapServers.Columns.Add(TargetCol);
                        MMServers.Add(TargetUri, TargetCol);
                        foreach (ListViewItem lvI in lvMacomberMapServers.Items)
                        {
                            lvI.SubItems.Add("").Tag = DateTime.Now;
                        }

                        lvMacomberMapServers.Items[0].SubItems[TargetCol.Index].Text = splStr.Length == 5 ? "(null)" : splStr[5];
                        lvMacomberMapServers.Items[1].SubItems[TargetCol.Index].Text = splStr[4] + " users";
                        lvMacomberMapServers.Items[2].SubItems[TargetCol.Index].Text = splStr[1];

                        MM_Administrator_Types AdminClient = CreateProxy(TargetUri.ToString().Replace("MacomberMapWCFService", "MacomberMapAdministratorInterface"));
                        MMServerConnections.Add(TargetUri, AdminClient);
                        AdminClient.RegisterCallback();
                        frm_Command_Information.Instance.AddCommands(AdminClient.GetEMSCommands(), AdminClient);

                        lvMacomberMapServers.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
                    }
                    else
                    {
                        MM_Administrator_Types Proxy = MMServerConnections[TargetUri];
                        if (Proxy.State == CommunicationState.Faulted || Proxy.State == CommunicationState.Closing || Proxy.State == CommunicationState.Closed)
                        {
                            MMServerConnections[TargetUri] = CreateProxy(TargetUri.ToString().Replace("MacomberMapWCFService", "MacomberMapAdministratorInterface"));
                            for (int a = 4; a < lvMacomberMapServers.Items.Count; a++)
                            {
                                lvMacomberMapServers.Items[a].SubItems[MMServers[TargetUri].Index].Tag = DateTime.Now;
                            }
                        }
                        lvMacomberMapServers.Items[0].SubItems[TargetCol.Index].Text = splStr.Length == 5 ? "(null)" : splStr[5];
                        lvMacomberMapServers.Items[1].SubItems[TargetCol.Index].Text = splStr[4] + " users";
                        lvMacomberMapServers.Items[2].SubItems[TargetCol.Index].Text = splStr[1];
                    }
                }
            }
            catch { }
        }
Exemplo n.º 4
0
 private void SetColor(ServerLinkedColumnHeader Column, Color TargetColor)
 {
     if (InvokeRequired)
     {
         lvMacomberMapServers.Invoke(new SafeSetColor(SetColor), Column, TargetColor);
     }
     else
     {
         for (int a = 3; a < lvMacomberMapServers.Items.Count; a++)
         {
             lvMacomberMapServers.Items[a].SubItems[Column.Index].ForeColor = TargetColor;
         }
     }
 }
Exemplo n.º 5
0
 /// <summary>
 /// Handle a menu item click
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void cmsSystemInteraction_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
 {
     cmsSystemInteraction.Close();
     if (e.ClickedItem.Tag is KeyValuePair <Uri, MM_User> )
     {
         KeyValuePair <Uri, MM_User> User      = (KeyValuePair <Uri, MM_User>)e.ClickedItem.Tag;
         IMM_Administrator_Types     AdminConn = MMServerConnections[User.Key];
         if (e.ClickedItem.Text == "Send a message to user")
         {
             using (MM_Input_Box InputBox = new MM_Input_Box())
                 if (InputBox.ShowDialog(this, "Please enter the message to send to " + User.Value.UserName, Application.ProductName) == DialogResult.OK)
                 {
                     AdminConn.SendMessage(User.Value, InputBox.Message, Environment.UserName + " on " + Environment.MachineName, InputBox.TargetIcon);
                 }
         }
         else if (e.ClickedItem.Text == "Force user logoff" && MessageBox.Show("Are you sure you want to log off " + User.Value.UserName + " from " + User.Key.Host + "?", Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
         {
             AdminConn.CloseClient(User.Value);
         }
     }
     else if (e.ClickedItem.Tag is ServerLinkedColumnHeader)
     {
         ServerLinkedColumnHeader Server = (ServerLinkedColumnHeader)e.ClickedItem.Tag;
         IMM_Administrator_Types  Admin  = MMServerConnections[Server.Uri];
         if (e.ClickedItem.Text == "Send a message to all users")
         {
             using (MM_Input_Box InputBox = new MM_Input_Box())
                 if (InputBox.ShowDialog(this, "Please enter the message to send to all users on server " + Server.Uri.Host, Application.ProductName) == DialogResult.OK)
                 {
                     Admin.SendMessageToAllClients(InputBox.Message, Environment.UserName + " on " + Environment.MachineName, InputBox.TargetIcon);
                 }
         }
         else if (e.ClickedItem.Text == "Force all user logoff" && MessageBox.Show("Are you sure you want to log off all users on server " + Server.Uri.Host + "?", Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
         {
             Admin.CloseAllClients();
         }
         else if (e.ClickedItem.Text == "Generate server savecase")
         {
             using (SaveFileDialog sFd = new SaveFileDialog()
             {
                 Title = "Macomber Map Server Savecase Generation", Filter = "MM Server Savecase (*.MM_Savecase)|*.MM_Savecase"
             })
                 if (sFd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                 {
                     using (FileStream fsOut = new FileStream(sFd.FileName, FileMode.Create))
                     {
                         MM_Savecase            Savecase = Admin.GenerateSavecase();
                         DataContractSerializer dcs      = new DataContractSerializer(typeof(MM_Savecase));
                         XmlDictionaryWriter    xdw      = XmlDictionaryWriter.CreateBinaryWriter(fsOut);
                         dcs.WriteObject(xdw, Savecase);
                         xdw.Flush();
                     }
                 }
         }
         else if (e.ClickedItem.Text == "Load server savecase")
         {
             using (OpenFileDialog oFd = new OpenFileDialog()
             {
                 Title = "Macomber Map Server Savecase Generation", Filter = "MM Server Savecase (*.MM_Savecase)|*.MM_Savecase"
             })
                 if (oFd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                 {
                     using (FileStream fsIn = new FileStream(oFd.FileName, FileMode.Open))
                     {
                         DataContractSerializer dcs      = new DataContractSerializer(typeof(MM_Savecase));
                         XmlDictionaryReader    xrd      = XmlDictionaryReader.CreateBinaryReader(fsIn, new XmlDictionaryReaderQuotas());
                         MM_Savecase            Savecase = (MM_Savecase)dcs.ReadObject(xrd);
                         Admin.ApplySavecase(Savecase);
                     }
                 }
         }
         else if (e.ClickedItem.Text.StartsWith("Stress test clients"))
         {
             Admin.SetServerClientStressTest(e.ClickedItem.Text.EndsWith("ON"));
         }
         else if (e.ClickedItem.Text == "Change Server Description")
         {
             using (MM_Input_Box InputBox = new MM_Input_Box()
             {
                 Message = lvMacomberMapServers.Items[0].SubItems[Server.Index].Text
             })
                 if (InputBox.ShowDialog(this, "Please enter the updated server description", Application.ProductName) == DialogResult.OK)
                 {
                     Admin.SetServerDescription(InputBox.Message);
                 }
         }
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// For all of our connected servers, determine our user information
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tmrUpdateUserInfo_Tick(object sender, EventArgs e)
        {
            //Create our total list of users
            Dictionary <Guid, bool> ToRemove = new Dictionary <Guid, bool>();

            foreach (Guid guid in MMServerUsers.Keys)
            {
                ToRemove.Add(guid, true);
            }

            foreach (Uri ServerURI in MMServerConnections.Keys.ToArray())
            {
                MM_Administrator_Types   Client    = MMServerConnections[ServerURI];
                ServerLinkedColumnHeader TargetCol = MMServers[ServerURI];
                if (Client.State == CommunicationState.Opened && TargetCol.SysInfo != null && TargetCol.Users != null)
                {
                    for (int a = 4; a < lvMacomberMapServers.Items.Count; a++)
                    {
                        ListViewItem lvI = lvMacomberMapServers.Items[a];
                        PropertyInfo pI  = (PropertyInfo)lvI.Tag;
                        UpdateProperty(lvI.SubItems[TargetCol.Index], pI.GetValue(TargetCol.SysInfo), lvI.Text);
                    }

                    //Update the users, removing any disconnected ones
                    foreach (MM_User User in TargetCol.Users)
                    {
                        ListViewItem lvUser;
                        if (!MMServerUsers.TryGetValue(User.UserId, out lvUser))
                        {
                            MMServerUsers.Add(User.UserId, lvUser = lvUsers.Items.Add(ServerURI.Host + ":" + ServerURI.Port.ToString()));
                            lvUser.Tag = new KeyValuePair <Uri, MM_User>(ServerURI, User);
                            lvUser.UseItemStyleForSubItems = false;
                            for (int a = 1; a < lvUsers.Columns.Count; a++)
                            {
                                lvUser.SubItems.Add(GetReadableString(((PropertyInfo)lvUsers.Columns[a].Tag).GetValue(User))).Tag = DateTime.Now;
                            }
                        }
                        else
                        {
                            ToRemove.Remove(User.UserId);
                            for (int a = 1; a < lvUsers.Columns.Count; a++)
                            {
                                UpdateProperty(lvUser.SubItems[a], ((PropertyInfo)lvUsers.Columns[a].Tag).GetValue(User), lvUsers.Columns[a].Text);
                            }
                        }
                    }
                }
                else if (Client.State == CommunicationState.Faulted || Client.State == CommunicationState.Closing || Client.State == CommunicationState.Closed)
                {
                    foreach (ListViewItem lvI in lvUsers.Items)
                    {
                        KeyValuePair <Uri, MM_User> kvp = (KeyValuePair <Uri, MM_User>)lvI.Tag;
                        if (kvp.Key == ServerURI)
                        {
                            lvI.ForeColor = Color.Red;
                            ToRemove.Remove(kvp.Value.UserId);
                        }
                    }
                }
            }

            //Now, remove all users not found
            ListViewItem FoundItem;

            foreach (Guid guid in ToRemove.Keys)
            {
                if (MMServerUsers.TryGetValue(guid, out FoundItem))
                {
                    lvUsers.Items.Remove(FoundItem);
                    MMServerUsers.Remove(guid);
                }
            }
        }