CentralMine.NET.EventLog.Update C# (CSharp) Метод

Update() приватный Метод

private Update ( ) : void
Результат void
        void Update()
        {
            while (true)
            {
                DateTime start = DateTime.Now;

                // Copy the events list locally
                mEventQueueLock.WaitOne();
                List<EventInfo> events = mEventQueue;
                mEventQueue = new List<EventInfo>();
                mEventQueueLock.ReleaseMutex();

                // Send data to database
                string sql = "";
                try
                {
                    foreach (EventInfo e in events)
                    {
                        sql = string.Format("INSERT INTO events (timestamp, type, event) VALUES ('{0}', '{1}', '{2}')", e.mTime.ToString("yyyy-MM-dd HH:mm:ss"), (int)e.mType, e.mEventData);
                        MySqlCommand cmd = new MySqlCommand(sql, mSql);
                        cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                {
                    Email.SendErrorEmail(sql + "\n\n" + ex.ToString());
                }

                // Copy the client work list
                mClientWorkQueueLock.WaitOne();
                List<ClientWork> cw = mClientWorkQueue;
                mClientWorkQueue = new List<ClientWork>();
                TimeSpan interval = DateTime.Now - mIntervalStart;
                mIntervalStart = DateTime.Now;
                mClientWorkQueueLock.ReleaseMutex();

                try
                {
                    // Collect information into products
                    Dictionary<string, Product> products = new Dictionary<string, Product>();
                    foreach (ClientWork w in cw)
                    {
                        if (!products.ContainsKey(w.mProductName))
                        {
                            // Add this product
                            Product p = new Product();
                            p.mMember = GetMemberId(w.mMemberName);
                            p.mProduct = GetProductId(w.mProductName, p.mMember);
                            p.mHashes = 0;
                            products[w.mProductName] = p;
                        }

                        Product prod = products[w.mProductName];
                        prod.mHashes += w.mHashes;
                        products[w.mProductName] = prod;
                    }

                    // Write entries into the database for each prodcut
                    string timeString = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                    foreach (KeyValuePair<string, Product> kv in products)
                    {
                        ulong hashrate = (ulong)(kv.Value.mHashes / interval.TotalSeconds);
                        sql = string.Format("INSERT INTO workdata (member_id, product_id, hashrate, timestamp) VALUES ('{0}', '{1}', '{2}', '{3}')", kv.Value.mMember, kv.Value.mProduct, hashrate, timeString);
                        MySqlCommand cmd = new MySqlCommand(sql, mSql);
                        cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                {
                    Email.SendErrorEmail(sql + "\n\n" + ex.ToString());
                }

                TimeSpan duration = DateTime.Now - start;
                double secondsRemaining = 60 - duration.TotalSeconds;

                if (secondsRemaining < 0)
                {
                    Console.WriteLine("Log thread took {0} seconds, yeilding and going again", (int)duration.TotalSeconds);
                    Thread.Sleep(10);
                }
                else
                {
                    Console.WriteLine("Log Thread sleeping for {0} seconds", (int)secondsRemaining);
                    Thread.Sleep((int)secondsRemaining * 1000);
                }
            }
        }