示例#1
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 { }
        }