private void clearUp()
 {
     this.serverBrowserView.Items.Clear();
     this.serverList.Clear();
     qhandler = null;
     GC.Collect();
 }
        private void populateListWithServers(MasterQueryResult mqr)
        {
            if (taskProgress.InvokeRequired)
            {
                populateCallback p = new populateCallback(populateListWithServers);
                this.Invoke(p, new object[] { mqr });
                return;
            }
            if (mqr.Code == MasterQueryResult.StatusCodes.CriticalStop)
            {
                taskInProgress = false;
                MessageBox.Show(mqr.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                foreach (Server serv in mqr.ServerList)
                {
                    addToServerList(serv);
                }
                setProgressDesc("Querying " + serverList.Count + " servers...");

                // Create the serverqueryhandler directly as we're already in a task - doQuery is there to create the task, not to continue it.
                qhandler = new ServerQueryHandler(serverList, new QueryProgress(onProgressUpdate), new Action(onServerQueryBatchCompleted));
            }
        }
        private void doNewQuery(List<Server> servers)
        {
            if (taskInProgress)
                return;

            friendMngr.updateServers();

            taskInProgress = true;
            refreshListButton.Enabled = false;
            filterButton.Enabled = false;
            queryIPAddr.Enabled = false;
            stopButton.Enabled = true;
            qhandler = new ServerQueryHandler(servers, 
                new QueryProgress(onProgressUpdate),
                new Action(onServerQueryBatchCompleted));
        }
        private void doNewQuery(List <Server> servers)
        {
            if (taskInProgress)
            {
                return;
            }

            friendMngr.updateServers();

            taskInProgress            = true;
            refreshListButton.Enabled = false;
            filterButton.Enabled      = false;
            queryIPAddr.Enabled       = false;
            stopButton.Enabled        = true;
            qhandler = new ServerQueryHandler(servers,
                                              new QueryProgress(onProgressUpdate),
                                              new Action(onServerQueryBatchCompleted));
        }
        private void populateListWithServers(MasterQueryResult mqr)
        {
            if (taskProgress.InvokeRequired)
            {
                populateCallback p = new populateCallback(populateListWithServers);
                this.Invoke(p, new object[] { mqr });
                return;
            }
            if (mqr.Code == MasterQueryResult.StatusCodes.CriticalStop)
            {
                taskInProgress = false;
                MessageBox.Show(mqr.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                foreach (Server serv in mqr.ServerList)
                    addToServerList(serv);
                setProgressDesc("Querying " + serverList.Count + " servers...");

                // Create the serverqueryhandler directly as we're already in a task - doQuery is there to create the task, not to continue it.
                qhandler = new ServerQueryHandler(serverList, new QueryProgress(onProgressUpdate), new Action(onServerQueryBatchCompleted));
            }
        }
 private void clearUp()
 {
     this.serverBrowserView.Items.Clear();
     this.serverList.Clear();
     qhandler = null;
     GC.Collect();
 }
Esempio n. 7
0
        public void update(Object threadContext)
        {
            if (threadContext != null)
            {
                sqh = (ServerQueryHandler)threadContext;
            }
            try
            {
                if (threadContext != null)
                {
                    if (sqh.QueryCancelled)
                    {
                        return;
                    }
                }
                _udp = new UdpClient();
                _udp.Client.ReceiveTimeout = 2000;
                _udp.Client.SendTimeout    = 2000;

                _udp.Connect(serverAddr);

                int now = Environment.TickCount;
                _udp.Send(status_packet, status_packet.Length);

                IPEndPoint serverIn = new IPEndPoint(IPAddress.Any, 0);
                byte[]     data     = _udp.Receive(ref serverIn);
                this.serverPing = Environment.TickCount - now; // grab the ping ASAP

                if (threadContext != null)
                {
                    if (sqh.QueryCancelled)
                    {
                        this.queryStatus = ServerQueryStatus.Failed;
                        _udp.Close();

                        ServerUpdated(this);
                        return;
                    }
                }

                if (queryStatus != ServerQueryStatus.Failed)
                {
                    if (!serverIn.Address.Equals(serverAddr.Address))
                    {
                        this.queryStatus = ServerQueryStatus.Failed;
                        throw new Exception("Got data from wrong host " +
                                            serverIn.Address.ToString() + " expected from " +
                                            serverAddr.Address.ToString());
                    }

                    this.parseAndPopulate(data);
                    this.queryStatus = ServerQueryStatus.Successful;
                }
                _udp.Close();
            }
            catch (SocketException)
            {
                this.queryStatus = ServerQueryStatus.TimedOut;
            }
            catch (Exception)
            {
                this.queryStatus = ServerQueryStatus.Failed;
            }
            finally
            {
                try
                {
                    if (threadContext != null)
                    {
                        sqh.queryFinished(); // tell the handler that we've finished our query
                    }
                    ServerUpdated(this);
                }
                catch { /* o noes! */ }
            }
        }
        public void update(Object threadContext)
        {
            if (threadContext != null)
                sqh = (ServerQueryHandler)threadContext;
            try
            {
                if (threadContext != null)
                    if (sqh.QueryCancelled)
                        return;
                _udp = new UdpClient();
                _udp.Client.ReceiveTimeout = 2000;
                _udp.Client.SendTimeout = 2000;

                _udp.Connect(serverAddr);

                int now = Environment.TickCount;
                _udp.Send(status_packet, status_packet.Length);

                IPEndPoint serverIn = new IPEndPoint(IPAddress.Any, 0);
                byte[] data = _udp.Receive(ref serverIn);
                this.serverPing = Environment.TickCount - now; // grab the ping ASAP

                if (threadContext != null)
                {
                    if (sqh.QueryCancelled)
                    {
                        this.queryStatus = ServerQueryStatus.Failed;
                        _udp.Close();

                        ServerUpdated(this);
                        return;
                    }
                }

                if (queryStatus != ServerQueryStatus.Failed)
                {
                    if (!serverIn.Address.Equals(serverAddr.Address))
                    {
                        this.queryStatus = ServerQueryStatus.Failed;
                        throw new Exception("Got data from wrong host " +
                            serverIn.Address.ToString() + " expected from " +
                            serverAddr.Address.ToString());
                    }
                    
                    this.parseAndPopulate(data);
                    this.queryStatus = ServerQueryStatus.Successful;
                }
                _udp.Close();
            }
            catch (SocketException)
            {
                this.queryStatus = ServerQueryStatus.TimedOut;
            }
            catch (Exception)
            {
                this.queryStatus = ServerQueryStatus.Failed;
            }
            finally
            {
                try
                {
                    if (threadContext != null)
                        sqh.queryFinished(); // tell the handler that we've finished our query
                    ServerUpdated(this);
                }
                catch { /* o noes! */ }
            }
        }