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; }
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); } }