CentralMine.NET.ClientManager.Update C# (CSharp) Method

Update() public method

public Update ( ) : void
return void
        void Update()
        {
            while (true)
            {
                double oldHashrate = mHashrate;
                mHashrate = 0;
                if (mBlock == null || mUpstream.NewBlockReady() ||  mBlock.mHashMan.IsComplete() || mBlock.mHashMan.IsExpired() )
                {
                    // Start work on a new block
                    BeginBlock();
                }

                Client clientThatWantsInfo = null;

                if (mClientListMutex.WaitOne(1))
                {
                    int clientsOnline = mClients.Count;
                    foreach (Client c in mClients)
                    {
                        bool stillAlive = c.Update();
                        if (!stillAlive)
                        {
                            if (c.mCurrentBlock != null)
                                c.mCurrentBlock.mHashMan.FreeBlock(c.mHashBlock);
                            mClients.Remove(c);
                            break;
                        }
                        mHashrate += c.mHashrate;

                        if (c.mState == Client.State.Busy && c.mCurrentBlock != mBlock)
                            c.StopWork();

                        if (c.mState == Client.State.Ready)
                            AssignWork(c);

                        if (c.mStatusClient)
                            c.SendStatus(clientsOnline, oldHashrate);

                        if (c.mClientInfoRequested && clientThatWantsInfo == null)
                        {
                            clientThatWantsInfo = c;
                            c.mClientInfoRequested = false;
                        }
                    }

                    if (clientThatWantsInfo != null)
                    {
                        string info = "{\"clients\":[";
                        foreach (Client c in mClients)
                        {
                            info += c.ToJSON() + ",";
                        }
                        info = info.Substring(0, info.Length - 1);
                        info += "]}";
                        clientThatWantsInfo.SendClientInfo(info);
                    }

                    mClientListMutex.ReleaseMutex();
                    Thread.Sleep(50);
                }
                else
                {
                    Thread.Sleep(1);
                }

                if (mDumpClients)
                {
                    FileStream file = new FileStream("clients.txt", FileMode.Create);
                    StreamWriter sw = new StreamWriter(file);

                    mClientListMutex.WaitOne();
                    foreach (Client c in mClients)
                    {
                        string str = c.ToString();
                        sw.WriteLine(str);
                    }
                    mClientListMutex.ReleaseMutex();

                    sw.Close();
                    mDumpClients = false;
                }
            }
        }