Example #1
0
 private static string ToString(CMessageSender ms)
 {
     return(string.Format("Sender attributes = (ip = {0}, port = {1}, self = {2}, service id = {3}, userid = {4})", ms.IpAddress, ms.Port, ms.SelfMessage, ms.SvsID, ms.UserId));
 }
Example #2
0
        private void Push_OnPublish(CClientSocket sender, CMessageSender messageSender, uint[] group, object msg)
        {
            //this event is fired from worker thread from socket pool thread

            string message = "", filter = "";
            List <KeyValuePair <DataColumn, object> > vKeyVal = new List <KeyValuePair <DataColumn, object> >();

            object[] vData = (object[])msg;

            //vData[0] == event type; vData[1] == host; vData[2] = user; vData[3] == db name; vData[4] == table name
            tagUpdateEvent ue = (tagUpdateEvent)(int)vData[0];

            string table_name = vData[3].ToString() + "." + vData[4].ToString();

            lock (m_cs)
            {
                DataTable dt = m_ds.Tables[table_name];
                if (dt == null)
                {
                    return;
                }
                DataColumn[] keys = dt.PrimaryKey;
                int          cols = dt.Columns.Count;
                switch (ue)
                {
                case tagUpdateEvent.ueUpdate:
                {
                    foreach (DataColumn dc in keys)
                    {
                        KeyValuePair <DataColumn, object> kv = new KeyValuePair <DataColumn, object>(dc, vData[5 + 2 * dc.Ordinal]);
                        vKeyVal.Add(kv);
                    }
                    DataRow dr = FindRowByKeys(dt, vKeyVal, ue, out filter);
                    for (int n = 0; n < cols; ++n)
                    {
                        if (dt.Columns[n].ReadOnly)
                        {
                            continue;
                        }
                        object d = vData[5 + 2 * n + 1];
                        dr[n] = d;
                    }
                    message = "Table " + table_name + " updated for row (" + filter + ")";
                }
                break;

                case tagUpdateEvent.ueDelete:
                {
                    int index = 0;
                    foreach (DataColumn dc in keys)
                    {
                        KeyValuePair <DataColumn, object> kv = new KeyValuePair <DataColumn, object>(dc, vData[5 + index]);
                        vKeyVal.Add(kv);
                        ++index;
                    }
                    dt.Rows.Remove(FindRowByKeys(dt, vKeyVal, ue, out filter));
                    message = "Table " + table_name + " deleted for row (" + filter + ")";
                }
                break;

                case tagUpdateEvent.ueInsert:
                {
                    foreach (DataColumn dc in keys)
                    {
                        KeyValuePair <DataColumn, object> kv = new KeyValuePair <DataColumn, object>(dc, vData[5 + dc.Ordinal]);
                        vKeyVal.Add(kv);
                    }
                    DataRow dr = FindRowByKeys(dt, vKeyVal, ue, out filter);         //generate filter only
                    dr = dt.NewRow();
                    for (int n = 0; n < cols; ++n)
                    {
                        dr[n] = vData[5 + n];
                    }
                    dt.Rows.Add(dr);
                    message = "Table " + table_name + " inserted for row (" + filter + ")";
                }
                break;

                default:
                    message = "Unknown DB message found";     //shouldn't come here
                    break;
                }
                BeginInvoke(m_thread_message, message, dt);
            }
        }
Example #3
0
 internal void OnPUMessageEx(IntPtr handler, CMessageSender sender, byte[] msg)
 {
     if (OnSendUserMessageEx != null)
     {
         OnSendUserMessageEx.Invoke(m_cs, sender, msg);
     }
 }
Example #4
0
 private CMessageSender ToMessageSender(CMessageSenderCe senderCe)
 {
     CMessageSender sender = new CMessageSender();
     sender.UserId = senderCe.UserId;
     unsafe
     {
         sender.IpAddress = new string((sbyte*)senderCe.IpAddress);
     }
     sender.Port = senderCe.Port;
     sender.SelfMessage = (senderCe.SelfMessage != 0);
     sender.SvsID = senderCe.SvsID;
     return sender;
 }
Example #5
0
 internal void OnPUMessage(IntPtr handler, CMessageSender sender, object vtMessage)
 {
     if (OnSendUserMessage != null)
     {
         OnSendUserMessage.Invoke(m_cs, sender, vtMessage);
     }
 }
Example #6
0
 internal void OnB(IntPtr handler, CMessageSender sender, uint[] group, uint count, object vtMessage)
 {
     if (OnPublish != null)
     {
         OnPublish.Invoke(m_cs, sender, group, vtMessage);
     }
 }
Example #7
0
 internal void OnBEx(IntPtr handler, CMessageSender sender, uint[] group, uint count, byte[] message, uint size)
 {
     if (OnPublishEx != null)
     {
         OnPublishEx.Invoke(m_cs, sender, group, message);
     }
 }
Example #8
0
 internal void OnExit(IntPtr handler, CMessageSender sender, uint[] group, uint count)
 {
     if (OnUnsubscribe != null)
     {
         OnUnsubscribe.Invoke(m_cs, sender, group);
     }
 }
Example #9
0
 private static string ToString(CMessageSender ms)
 {
     return string.Format("Sender attributes = (ip = {0}, port = {1}, self = {2}, service id = {3}, userid = {4})", ms.IpAddress, ms.Port, ms.SelfMessage, ms.SvsID, ms.UserId);
 }