Example #1
0
        public static dynamic GetPool(string poolKey)
        {
            if (poolKey == null || poolKey.Length == 0)
            {
                throw new Exception("Pool key cannot be empty");
            }
            CSpConfig sc = SetConfig();

            lock (m_cs) {
                if (sc.m_vPK.IndexOf(poolKey) == -1)
                {
                    throw new Exception("Pool key " + poolKey + " cannot be found from configuaration");
                }
                CPoolConfig pc = null;
                if (sc.m_Pools.ContainsKey(poolKey))
                {
                    pc = sc.m_Pools[poolKey];
                }
                else
                {
                    foreach (var key in sc.m_Pools.Keys)
                    {
                        CPoolConfig p = sc.m_Pools[key];
                        if (p.m_Slaves == null)
                        {
                            continue;
                        }
                        if (p.m_Slaves.ContainsKey(poolKey))
                        {
                            pc = p.m_Slaves[poolKey];
                            break;
                        }
                    }
                }
                if (pc.Pool != null)
                {
                    return(pc.Pool);
                }
                dynamic pool;
                switch (pc.SvsId)
                {
                case CMysql.sidMysql: {
                    CSocketPool <CMysql> mysql;
                    switch (pc.PoolType)
                    {
                    case tagPoolType.Slave:
                        mysql = new CSqlMasterPool <CMysql, CDataSet> .CSlavePool(pc.DefaultDb, pc.RecvTimeout, pc.AutoConn, pc.ConnTimeout);

                        break;

                    case tagPoolType.Master:
                        mysql = new CSqlMasterPool <CMysql, CDataSet>(pc.DefaultDb, m_Middle, pc.RecvTimeout, pc.AutoConn, pc.ConnTimeout);
                        break;

                    default:
                        mysql = new CSocketPool <CMysql>(pc.AutoConn, pc.RecvTimeout, pc.ConnTimeout);
                        break;
                    }
                    mysql.DoSslServerAuthentication += (sender, cs) => { return(m_sc.Verify(cs)); };
                    pool = mysql;
                }
                break;

                case BaseServiceID.sidODBC: {
                    CSocketPool <COdbc> odbc;
                    switch (pc.PoolType)
                    {
                    case tagPoolType.Slave:
                        odbc = new CSqlMasterPool <COdbc, CDataSet> .CSlavePool(pc.DefaultDb, pc.RecvTimeout, pc.AutoConn, pc.ConnTimeout);

                        break;

                    case tagPoolType.Master:
                        odbc = new CSqlMasterPool <COdbc, CDataSet>(pc.DefaultDb, m_Middle, pc.RecvTimeout, pc.AutoConn, pc.ConnTimeout);
                        break;

                    default:
                        odbc = new CSocketPool <COdbc>(pc.AutoConn, pc.RecvTimeout, pc.ConnTimeout);
                        break;
                    }
                    odbc.DoSslServerAuthentication += (sender, cs) => { return(m_sc.Verify(cs)); };
                    pool = odbc;
                }
                break;

                case CSqlite.sidSqlite: {
                    CSocketPool <CSqlite> sqlite;
                    switch (pc.PoolType)
                    {
                    case tagPoolType.Slave:
                        sqlite = new CSqlMasterPool <CSqlite, CDataSet> .CSlavePool(pc.DefaultDb, pc.RecvTimeout, pc.AutoConn, pc.ConnTimeout);

                        break;

                    case tagPoolType.Master:
                        sqlite = new CSqlMasterPool <CSqlite, CDataSet>(pc.DefaultDb, m_Middle, pc.RecvTimeout, pc.AutoConn, pc.ConnTimeout);
                        break;

                    default:
                        sqlite = new CSocketPool <CSqlite>(pc.AutoConn, pc.RecvTimeout, pc.ConnTimeout);
                        break;
                    }
                    sqlite.DoSslServerAuthentication += (sender, cs) => { return(m_sc.Verify(cs)); };
                    pool = sqlite;
                }
                break;

                case BaseServiceID.sidFile: {
                    CSocketPool <CStreamingFile> sf = new CSocketPool <CStreamingFile>(pc.AutoConn, pc.RecvTimeout, pc.ConnTimeout);
                    sf.DoSslServerAuthentication += (sender, cs) => { return(m_sc.Verify(cs)); };
                    pool = sf;
                }
                break;

                case BaseServiceID.sidQueue: {
                    var aq = new CSocketPool <CAsyncQueue>(pc.AutoConn, pc.RecvTimeout, pc.ConnTimeout);
                    aq.DoSslServerAuthentication += (sender, cs) => { return(m_sc.Verify(cs)); };
                    pool = aq;
                }
                break;

                default: {
                    CSocketPool <CCachedBaseHandler> cbh;
                    switch (pc.PoolType)
                    {
                    case tagPoolType.Slave:
                        cbh = new CMasterPool <CCachedBaseHandler, CDataSet> .CSlavePool(pc.DefaultDb, pc.RecvTimeout, pc.AutoConn, pc.ConnTimeout, pc.SvsId);

                        break;

                    case tagPoolType.Master:
                        cbh = new CMasterPool <CCachedBaseHandler, CDataSet>(pc.DefaultDb, m_Middle, pc.RecvTimeout, pc.AutoConn, pc.ConnTimeout, pc.SvsId);
                        break;

                    default:
                        cbh = new CSocketPool <CCachedBaseHandler>(pc.AutoConn, pc.RecvTimeout, pc.ConnTimeout, pc.SvsId);
                        break;
                    }
                    cbh.DoSslServerAuthentication += (sender, cs) => { return(m_sc.Verify(cs)); };
                    pool = cbh;
                }
                break;
                }
                pool.QueueName             = pc.Queue;
                pc.Pool                    = pool;
                CConnectionContext[,] ppCC = new CConnectionContext[pc.Threads, pc.Hosts.Count];
                for (uint i = 0; i < pc.Threads; ++i)
                {
                    for (int j = 0; j < pc.Hosts.Count; ++j)
                    {
                        ppCC[i, j] = sc.m_Hosts[pc.m_Hosts[j]];
                    }
                }
                pool.StartSocketPool(ppCC);
                pool.QueueAutoMerge = pc.AutoMerge;
                return(pool);
            }
        }
Example #2
0
 private void NormalizeSlaves(uint svsId, string defalutDb, string mkey)
 {
     foreach (var key in m_Slaves.Keys)
     {
         if (key == null || key.Length == 0)
         {
             throw new Exception("Slave pool key cannot be empty");
         }
         CPoolConfig pool = m_Slaves[key];
         pool.Master = mkey;
         pool.SvsId  = svsId;
         if (pool.Queue != null)
         {
             pool.Queue = pool.Queue.Trim();
             if (Defines.OperationSystem == tagOperationSystem.osWin || Defines.OperationSystem == tagOperationSystem.osWinCE)
             {
                 pool.Queue = pool.Queue.ToLower();
             }
             if (pool.Queue.Length == 0)
             {
                 pool.AutoMerge = false;
             }
         }
         else
         {
             pool.AutoMerge = false;
         }
         if (pool.Threads == 0)
         {
             pool.Threads = 1;
         }
         if (pool.ConnTimeout == 0)
         {
             pool.ConnTimeout = CClientSocket.DEFAULT_CONN_TIMEOUT;
         }
         if (pool.RecvTimeout == 0)
         {
             pool.RecvTimeout = CClientSocket.DEFAULT_RECV_TIMEOUT;
         }
         if (pool.DefaultDb != null)
         {
             pool.DefaultDb = pool.DefaultDb.Trim();
             if (pool.DefaultDb.Length == 0)
             {
                 pool.DefaultDb = defalutDb;
             }
         }
         else
         {
             pool.DefaultDb = defalutDb;
         }
         pool.PoolType = tagPoolType.Slave;
         if (pool.m_Slaves != null)
         {
             throw new Exception("A slave pool cannot contain any new slave pool");
         }
         if (pool.m_Hosts.Count == 0)
         {
             throw new Exception("Slave pool host array is empty");
         }
     }
 }