Exemplo n.º 1
0
        protected void Application_Start(object sender, System.EventArgs e)
        {
            //suppose sp_config.json inside C:\Program Files\IIS Express
            //CSpConfig config = SpManager.SetConfig(false,
            //@"D:\cyetest\socketpro\samples\web_two\web_two\sp_config.json");
            Master = SpManager.GetPool("masterdb") as CSqlMasterPool <CMysql, CDataSet>;
            CMysql handler = Master.Seek();

            if (handler != null)   //create a test database
            {
                string sql = @"CREATE DATABASE IF NOT EXISTS mysample character set
                utf8 collate utf8_general_ci;USE mysample;CREATE TABLE IF NOT EXISTS
                COMPANY(ID BIGINT PRIMARY KEY NOT NULL,Name CHAR(64)NOT NULL);CREATE TABLE
                IF NOT EXISTS EMPLOYEE(EMPLOYEEID BIGINT PRIMARY KEY AUTO_INCREMENT,
                CompanyId BIGINT NOT NULL,Name NCHAR(64)NOT NULL,JoinDate DATETIME(6)
                DEFAULT NULL,FOREIGN KEY(CompanyId)REFERENCES COMPANY(id));USE sakila;
                INSERT INTO mysample.COMPANY(ID,Name)VALUES(1,'Google Inc.'),
                (2,'Microsoft Inc.'),(3,'Amazon Inc.')";
                handler.Execute(sql);
            }
            Cache = Master.Cache;
            Slave = SpManager.GetPool("slavedb0") as
                    CSqlMasterPool <CMysql, CDataSet> .CSlavePool;
            Master_No_Backup = SpManager.GetPool("db_no_backup") as
                               CSqlMasterPool <CMysql, CDataSet> .CSlavePool;
        }
Exemplo n.º 2
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);
            }
        }