void Push_OnPublish(ClientSide.CClientSocket sender, ClientSide.CMessageSender messageSender, uint[] group, object msg) { if (group[0] == UDB.DB_CONSTS.CACHE_UPDATE_CHAT_GROUP_ID) { #if WINCE #else if (m_bMidTier) { ServerSide.CSocketProServer.PushManager.Publish(msg, UDB.DB_CONSTS.CACHE_UPDATE_CHAT_GROUP_ID); } #endif SetInitialCache(); return; } #if WINCE #else if (m_bMidTier) { //push message onto front clients which may be interested in the message ServerSide.CSocketProServer.PushManager.Publish(msg, UDB.DB_CONSTS.STREAMING_SQL_CHAT_GROUP_ID); } #endif //vData[0] == event type; vData[1] == host; vData[2] = database user; vData[3] == db name; vData[4] == table name object[] vData = (object[])msg; UDB.tagUpdateEvent eventType = (UDB.tagUpdateEvent)((int)vData[0]); if (m_MasterCache.DBServerName == null || m_MasterCache.DBServerName.Length == 0) { if (vData[1] is sbyte[]) { m_MasterCache.DBServerName = CUQueue.ToString((sbyte[])vData[1]); } else if (vData[1] is string) { m_MasterCache.DBServerName = (string)vData[1]; } } if (vData[2] is sbyte[]) { m_MasterCache.Updater = CUQueue.ToString((sbyte[])vData[2]); } else if (vData[2] is string) { m_MasterCache.Updater = (string)vData[2]; } else { m_MasterCache.Updater = ""; } string dbName = ""; if (vData[3] is sbyte[]) { dbName = CUQueue.ToString((sbyte[])vData[3]); } else if (vData[3] is string) { dbName = (string)vData[3]; } string tblName = ""; if (vData[4] is sbyte[]) { tblName = CUQueue.ToString((sbyte[])vData[4]); } else if (vData[4] is string) { tblName = (string)vData[4]; } uint ret = 0; switch (eventType) { case UDB.tagUpdateEvent.ueDelete: { List <Object> v = new List <object>(); for (int n = 5; n < vData.Length; ++n) { v.Add(vData[n]); } ret = m_MasterCache.DeleteARow(dbName, tblName, v.ToArray()); } break; case UDB.tagUpdateEvent.ueInsert: { List <Object> v = new List <object>(); for (int n = 5; n < vData.Length; ++n) { v.Add(vData[n]); } ret = m_MasterCache.AddRows(dbName, tblName, v); } break; case UDB.tagUpdateEvent.ueUpdate: { List <Object> v = new List <object>(); for (int n = 5; n < vData.Length; ++n) { v.Add(vData[n]); } ret = m_MasterCache.UpdateARow(dbName, tblName, v.ToArray()); } break; default: break; } }
private static DataRow FindRowByKeys(DataTable dt, List <KeyValuePair <DataColumn, object> > vKey, UDB.tagUpdateEvent ue, out string filter) { DataRow[] rows = null; filter = ""; foreach (var kv in vKey) { if (filter.Length > 0) { filter += " AND "; } filter += ("`" + kv.Key.ColumnName + "`="); if (kv.Value is long || kv.Value is decimal || kv.Value is double) { filter += kv.Value.ToString(); } else if (kv.Value is string) { filter += ("'" + kv.Value.ToString() + "'"); } else { throw new Exception("Other key column not supported"); } } if (ue != UDB.tagUpdateEvent.ueInsert) { rows = dt.Select(filter); } if (rows != null && rows.Length == 1) { return(rows[0]); } else if (rows != null && rows.Length > 1) { throw new Exception("Multiple rows found beyond our expectation"); } return(null); }