Exemple #1
0
        public int Call(AbstractDBQuery query, DBCallback callback = null)
        {
            int dbIndex = GetDBIndex();

            DBMngLst[dbIndex].Call(query, callback);
            return(dbIndex);
        }
Exemple #2
0
 public void AddDBQuery(AbstractDBQuery query)
 {
     query.Init(Conn);
     lock (_saveQueue)
     {
         _saveQueue.Enqueue(query);
     }
 }
Exemple #3
0
        public void Call(AbstractDBQuery query, int index, string tableName = DBProxyDefault.DefaultTableName, DBOperateType type = DBProxyDefault.DefaultOperateType, DBCallback callback = null)
        {
            DBManagerPool dbPool = GetDbByTable(tableName, type);

            if (dbPool == null)
            {
                LOG.Warn("db call {0} failed:can not find table{1} type {2} db", query.GetCmd(), tableName, type.ToString());
                return;
            }
            dbPool.Call(query, index, callback);
        }
Exemple #4
0
        public int Call(AbstractDBQuery query, int forceIndex, DBCallback callback = null)
        {
            int dbIndex = 0;

            if (forceIndex > 0 && forceIndex < DBMngLst.Count)
            {
                DBMngLst[forceIndex].Call(query, callback);
                m_dbCallCountList[forceIndex]++;
            }
            else
            {
                DBMngLst[0].Call(query, callback);
                m_dbCallCountList[0]++;
            }
            if (!m_dbCallNameList.ContainsKey(query.ToString()))
            {
                m_dbCallNameList.Add(query.ToString(), 1);
            }
            else
            {
                m_dbCallNameList[query.ToString()]++;
            }
            return(dbIndex);
        }
Exemple #5
0
 public void Call(AbstractDBQuery query, DBCallback callback = null)
 {
     query.OnCall(callback);
     AddDBQuery(query);
 }
Exemple #6
0
        public void Run()
        {
            var tempPostUpdateQueue = new Queue <AbstractDBQuery>();
            var time = new SystemTime();

            time.Init();
            while (true)
            {
                var dt = time.Update();
                _lasttime = dt.TotalMilliseconds;
                if (_lasttime > 1)
                {
                    Thread.Sleep(0);
                }
                else
                {
                    Thread.Sleep(1);
                }
                if (_totaltime > 10000)
                {
                    _totaltime = 0;
                }
                else
                {
                    _totaltime += _lasttime;
                }
                lock (m_cReconnectInfo)
                {
                    if (IsDisconnected() || m_cReconnectInfo.NeedReconnect)
                    {
                        m_bOpened = false;
                        string log = string.Format("disconnect from db{0},eslplased {1} ms", _strDatabase, m_cReconnectInfo.TryConnectTime);
                        AddExceptionLog(log);
                        string strConn = string.Format("data source={0}; database={1}; user id={2}; password={3}; port={4}", _strIp, _strDatabase, _strUsername, _strPassword, _strPort);
                        try
                        {
                            _conn = new MySqlConnection(strConn);
                            _conn.Open();
                            m_bOpened = true;
                            m_cReconnectInfo.Reset();
                        }
                        catch (MySqlException e)
                        {
                            LOG.Error(e.ToString());
                            AddExceptionLog(e.ToString());
                        }
                    }
                    else
                    {
                        try
                        {
                            lock (_saveQueue)
                            {
                                if (_saveQueue.Count == 0)
                                {
                                    continue;
                                }
                                while (_saveQueue.Count > 0)
                                {
                                    AbstractDBQuery query = _saveQueue.Dequeue();
                                    _executionQueue.Enqueue(query);
                                }
                            }
                            while (_exceptionLogQueue.Count != 0)
                            {
                                var  query   = _executionQueue.Dequeue();
                                bool success = query.Execute();
                                if (success == false)
                                {
                                    if (query.m_strErrorText != null)
                                    {
                                        AddExceptionLog(query.m_strErrorText);
                                    }
                                }
                                else
                                {
                                }
                                tempPostUpdateQueue.Enqueue(query);
                            }
                            lock (_postUpdateQueue)
                            {
                                while (tempPostUpdateQueue.Count > 0)
                                {
                                    _postUpdateQueue.Enqueue(tempPostUpdateQueue.Dequeue());
                                }
                            }
                            tempPostUpdateQueue.Clear();
                        }
                        catch (Exception e)
                        {
                            LOG.Error(e.ToString());
                        }
                    }
                }
            }
        }