Пример #1
0
        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;
            }
        }
Пример #2
0
 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);
 }