Exemple #1
0
 private ITableManager GetUpdatedTable(Lightstreamer.DotNet.Client.ServerUpdateEvent values)
 {
     lock (this.tables.SyncRoot)
     {
         return((ITableManager)this.tables[values.WinCode]);
     }
 }
        public virtual void DoUpdate(Lightstreamer.DotNet.Client.ServerUpdateEvent values)
        {
            int itemCode  = values.ItemCode;
            int itemIndex = itemCode - 1;

            this.ProcessUpdate(values, itemCode, itemIndex);
        }
        public virtual void DoUpdate(Lightstreamer.DotNet.Client.ServerUpdateEvent values)
        {
            int itemCode = values.ItemCode;

            if ((itemCode <= 0) || (itemCode > this.table.items.Length))
            {
                throw new PushServerException(2);
            }
            ProcessUpdate(values, itemCode - 1, this.table, this.listener);
        }
        internal static void ProcessUpdate(Lightstreamer.DotNet.Client.ServerUpdateEvent values, int itemIndex, ExtendedTableInfo table, IExtendedTableListener listener)
        {
            string item = table.items[itemIndex];

            if (values.EOS)
            {
                try
                {
                    listener.OnSnapshotEnd(item);
                }
                catch (Exception)
                {
                }
            }
            else if (values.Overflow > 0)
            {
                if (!table.hasUnfilteredData())
                {
                    throw new PushServerException(7);
                }
                actionsLogger.Warn("Got notification of updates lost for item " + item);
                try
                {
                    listener.OnRawUpdatesLost(item, values.Overflow);
                }
                catch (Exception)
                {
                }
            }
            else
            {
                if (values.Size != table.fields.Length)
                {
                    throw new PushServerException(3);
                }
                IDictionary map = values.GetMap(table.fields);
                if (actionsLogger.IsDebugEnabled)
                {
                    actionsLogger.Debug("Got event for item " + item + " with values " + CollectionsSupport.ToString(map));
                }
                try
                {
                    listener.OnUpdate(item, map);
                }
                catch (Exception)
                {
                }
            }
        }
Exemple #5
0
 private static void ProcessFastUpdate(Lightstreamer.DotNet.Client.ServerUpdateEvent values, int itemIndex, ExtendedTableInfo table, IFastItemsListener listener)
 {
     if (values.EOS)
     {
         try
         {
             listener.OnSnapshotEnd(itemIndex + 1);
         }
         catch (Exception)
         {
         }
     }
     else if (values.Overflow > 0)
     {
         if (!table.hasUnfilteredData())
         {
             throw new PushServerException(7);
         }
         try
         {
             listener.OnRawUpdatesLost(itemIndex + 1, values.Overflow);
         }
         catch (Exception)
         {
         }
     }
     else
     {
         if (values.Size != table.fields.Length)
         {
             throw new PushServerException(3);
         }
         string[] array = values.Array;
         if (actionsLogger.IsDebugEnabled)
         {
             actionsLogger.Debug("Got event for item " + table.items[itemIndex] + " with values " + CollectionsSupport.ToString(array) + " for fields " + CollectionsSupport.ToString(table.fields));
         }
         try
         {
             listener.OnUpdate(itemIndex + 1, array);
         }
         catch (Exception)
         {
         }
     }
 }
        public virtual void DoUpdate(Lightstreamer.DotNet.Client.ServerUpdateEvent values)
        {
            int itemCode = values.ItemCode;

            if (values.EOS)
            {
                try
                {
                    this.listener.OnSnapshotEnd(itemCode);
                }
                catch (Exception)
                {
                }
            }
            else if (values.Overflow > 0)
            {
                if (!this.table.hasUnfilteredData())
                {
                    throw new PushServerException(7);
                }
                try
                {
                    this.listener.OnRawUpdatesLost(itemCode, values.Overflow);
                }
                catch (Exception)
                {
                }
            }
            else
            {
                string[] array = values.Array;
                if (actionsLogger.IsDebugEnabled)
                {
                    actionsLogger.Debug(string.Concat(new object[] { "Got event for item n\x00b0", itemCode, " in group ", this.table.group, " with values ", CollectionsSupport.ToString(array) }));
                }
                try
                {
                    this.listener.OnUpdate(itemCode, array);
                }
                catch (Exception)
                {
                }
            }
        }
Exemple #7
0
 public virtual void DoUpdate(Lightstreamer.DotNet.Client.ServerUpdateEvent values)
 {
     if (values.ItemCode != 1)
     {
         throw new PushServerException(2);
     }
     if (this.enclosingInstance.managerWithListener != null)
     {
         this.enclosingInstance.managerWithListener.ProcessUpdate(values, this.itemIndex + 1, this.itemIndex);
     }
     else if (this.enclosingInstance.extListener != null)
     {
         ExtendedTableManager.ProcessUpdate(values, this.itemIndex, this.enclosingInstance.table, this.enclosingInstance.extListener);
     }
     else
     {
         VirtualTableManager.ProcessFastUpdate(values, this.itemIndex, this.enclosingInstance.table, this.enclosingInstance.fastListener);
     }
 }
            public virtual void OnUpdate(ITableManager table, Lightstreamer.DotNet.Client.ServerUpdateEvent values)
            {
                IConnectionListener activeListener = this.enclosingInstance.GetActiveListener(this.currPhase);

                if (activeListener != null)
                {
                    try
                    {
                        table.DoUpdate(values);
                    }
                    catch (PushServerException exception)
                    {
                        LSClient.actionsLogger.Debug("Error in received values", exception);
                        try
                        {
                            activeListener.OnDataError(exception);
                        }
                        catch (Exception)
                        {
                        }
                    }
                }
            }
Exemple #9
0
 public virtual void DoUpdate(Lightstreamer.DotNet.Client.ServerUpdateEvent values)
 {
     throw new PushServerException(12);
 }
 internal virtual Lightstreamer.DotNet.Client.ServerUpdateEvent ParsePushData(string pushData)
 {
     string str;
     int index = pushData.IndexOf('|');
     string str2 = null;
     if (index == -1)
     {
         int num2 = pushData.LastIndexOf(',');
         if (num2 == -1)
         {
             throw new PushServerException(5, pushData);
         }
         str = pushData.Substring(0, num2);
         str2 = pushData.Substring(num2 + 1);
     }
     else
     {
         str = pushData.Substring(0, index);
     }
     int length = str.IndexOf(',');
     if (length == -1)
     {
         throw new PushServerException(5, pushData);
     }
     string winCode = str.Substring(0, length);
     str = str.Substring(length + 1);
     length = str.IndexOf(',');
     if (length == -1)
     {
         throw new PushServerException(5, pushData);
     }
     if (!str.Substring(0, length).Equals("1"))
     {
         throw new PushServerException(5, pushData);
     }
     str = str.Substring(length + 1);
     if (str2 == null)
     {
         Lightstreamer.DotNet.Client.ServerUpdateEvent event2 = new Lightstreamer.DotNet.Client.ServerUpdateEvent(winCode, str);
         while (index < pushData.Length)
         {
             int num5 = pushData.IndexOf('|', index + 1);
             if (num5 == -1)
             {
                 num5 = pushData.Length;
             }
             if (num5 == (index + 1))
             {
                 event2.AddValue(Lightstreamer.DotNet.Client.ServerUpdateEvent.UNCHANGED);
             }
             else
             {
                 string src = pushData.Substring(index + 1, num5 - (index + 1));
                 if ((src.Length == 1) && (src[0] == '$'))
                 {
                     event2.AddValue("");
                 }
                 else if ((src.Length == 1) && (src[0] == '#'))
                 {
                     event2.AddValue(null);
                 }
                 else if ((src[0] == '$') || (src[0] == '#'))
                 {
                     event2.AddValue(DeUNIcode(src.Substring(1)));
                 }
                 else
                 {
                     event2.AddValue(DeUNIcode(src));
                 }
             }
             index = num5;
         }
         if (protLogger.IsDebugEnabled)
         {
             protLogger.Debug("Read " + event2);
         }
         return event2;
     }
     if (str2.Equals("EOS"))
     {
         return new Lightstreamer.DotNet.Client.ServerUpdateEvent(winCode, str, true);
     }
     if (str2.StartsWith("OV"))
     {
         try
         {
             return new Lightstreamer.DotNet.Client.ServerUpdateEvent(winCode, str, int.Parse(str2.Substring("OV".Length)));
         }
         catch (Exception)
         {
             throw new PushServerException(5, pushData);
         }
     }
     throw new PushServerException(5, pushData);
 }
 internal virtual Lightstreamer.DotNet.Client.ServerUpdateEvent ParsePushData(string pushData)
 {
     Lightstreamer.DotNet.Client.ServerUpdateEvent evnt = null;
     int pos;
     if (!pushData.StartsWith("MSG"))
     {
         string itemCode;
         int start = pushData.IndexOf('|');
         string infoCode = null;
         if (start == -1)
         {
             int infoSep = pushData.LastIndexOf(',');
             if (infoSep == -1)
             {
                 throw new PushServerException(5, pushData);
             }
             itemCode = pushData.Substring(0, infoSep);
             infoCode = pushData.Substring(infoSep + 1);
         }
         else
         {
             itemCode = pushData.Substring(0, start);
         }
         int sep = itemCode.IndexOf(',');
         if (sep == -1)
         {
             throw new PushServerException(5, pushData);
         }
         string tableCode = itemCode.Substring(0, sep);
         itemCode = itemCode.Substring(sep + 1);
         if (infoCode != null)
         {
             if (infoCode.Equals("EOS"))
             {
                 return new Lightstreamer.DotNet.Client.ServerUpdateEvent(tableCode, itemCode, true);
             }
             if (infoCode.StartsWith("OV"))
             {
                 try
                 {
                     return new Lightstreamer.DotNet.Client.ServerUpdateEvent(tableCode, itemCode, int.Parse(infoCode.Substring("OV".Length)));
                 }
                 catch (Exception)
                 {
                     throw new PushServerException(5, pushData);
                 }
             }
             throw new PushServerException(5, pushData);
         }
         evnt = new Lightstreamer.DotNet.Client.ServerUpdateEvent(tableCode, itemCode);
         while (start < pushData.Length)
         {
             pos = pushData.IndexOf('|', start + 1);
             if (pos == -1)
             {
                 pos = pushData.Length;
             }
             if (pos == (start + 1))
             {
                 evnt.AddValue(Lightstreamer.DotNet.Client.ServerUpdateEvent.UNCHANGED);
             }
             else
             {
                 string val = pushData.Substring(start + 1, pos - (start + 1));
                 if ((val.Length == 1) && (val[0] == '$'))
                 {
                     evnt.AddValue("");
                 }
                 else if ((val.Length == 1) && (val[0] == '#'))
                 {
                     evnt.AddValue(null);
                 }
                 else if ((val[0] == '$') || (val[0] == '#'))
                 {
                     evnt.AddValue(DeUNIcode(val.Substring(1)));
                 }
                 else
                 {
                     evnt.AddValue(DeUNIcode(val));
                 }
             }
             start = pos;
         }
     }
     else
     {
         int offset = 0;
         string[] splitted = new string[5];
         int pieces = 0;
         if ((pushData.Length > 3) && (pushData[3] == ','))
         {
             pos = 4;
             pieces = 0;
             while (pieces < 5)
             {
                 if (pieces == 4)
                 {
                     splitted[pieces] = pushData.Substring(pos);
                 }
                 else
                 {
                     int next = pushData.IndexOf(comma, pos);
                     if (next > -1)
                     {
                         splitted[pieces] = pushData.Substring(pos, next - pos);
                         pos = next + 1;
                     }
                     else
                     {
                         splitted[pieces] = pushData.Substring(pos);
                         pieces++;
                         break;
                     }
                 }
                 pieces++;
             }
         }
         bool ok = false;
         try
         {
             if (((splitted != null) && (pieces == 3)) && splitted[offset + 2].Equals("DONE"))
             {
                 evnt = new Lightstreamer.DotNet.Client.ServerUpdateEvent(splitted[offset], Convert.ToInt32(splitted[offset + 1]));
                 ok = true;
             }
             else if (((splitted != null) && (pieces == 5)) && splitted[offset + 2].Equals("ERR"))
             {
                 evnt = new Lightstreamer.DotNet.Client.ServerUpdateEvent(splitted[offset], Convert.ToInt32(splitted[offset + 1]), Convert.ToInt32(splitted[offset + 3]), splitted[offset + 4]);
                 ok = true;
             }
         }
         catch (FormatException)
         {
         }
         catch (OverflowException)
         {
         }
         finally
         {
             if (!ok)
             {
                 throw new PushServerException(5, pushData);
             }
         }
     }
     if (protLogger.IsDebugEnabled)
     {
         protLogger.Debug("Read " + evnt);
     }
     return evnt;
 }
        internal void ProcessUpdate(Lightstreamer.DotNet.Client.ServerUpdateEvent values, int itemPos, int itemIndex)
        {
            string   name = null;
            ItemInfo info;

            if (this.extInfo != null)
            {
                if ((itemIndex < 0) || (itemIndex >= this.extInfo.items.Length))
                {
                    throw new PushServerException(2);
                }
                name = this.extInfo.items[itemIndex];
            }
            lock (this.itemInfos)
            {
                if (this.unsubscrDone)
                {
                    return;
                }
                while (this.itemInfos.Count <= itemIndex)
                {
                    this.itemInfos.Add(null);
                }
                info = (ItemInfo)this.itemInfos[itemIndex];
                if (info == null)
                {
                    if (this.isCommandLogic)
                    {
                        info = new CommandLogicItemInfo(this, itemPos, name);
                    }
                    else
                    {
                        info = new ItemInfo(this, itemPos, name);
                    }
                    this.itemInfos[itemIndex] = info;
                }
            }
            if (values.EOS)
            {
                info.snapshotPending = false;
                try
                {
                    this.listener.OnSnapshotEnd(itemPos, name);
                }
                catch (Exception)
                {
                }
            }
            else if (values.Overflow > 0)
            {
                if (!this.baseInfo.hasUnfilteredData())
                {
                    throw new PushServerException(7);
                }
                actionsLogger.Warn("Got notification of updates lost for item " + info);
                try
                {
                    this.listener.OnRawUpdatesLost(itemPos, name, values.Overflow);
                }
                catch (Exception)
                {
                }
            }
            else
            {
                if ((this.extInfo != null) && (values.Size != this.extInfo.fields.Length))
                {
                    throw new PushServerException(3);
                }
                string[] array = values.Array;
                if (actionsLogger.IsDebugEnabled)
                {
                    actionsLogger.Debug(string.Concat(new object[] { "Got event for item ", info, " with values ", CollectionsSupport.ToString(array) }));
                }
                bool     snapshotPending = info.snapshotPending;
                string[] prevState       = info.Update(array);
                if (prevState != null)
                {
                    UpdateInfo update = new UpdateInfo(info, prevState, array, snapshotPending);
                    if (actionsLogger.IsDebugEnabled)
                    {
                        actionsLogger.Debug(string.Concat(new object[] { "Notifying event for item ", info, " with values ", update }));
                    }
                    try
                    {
                        this.listener.OnUpdate(itemPos, name, update);
                    }
                    catch (Exception)
                    {
                    }
                }
            }
        }
        internal virtual Lightstreamer.DotNet.Client.ServerUpdateEvent ParsePushData(string pushData)
        {
            string str;
            int    index = pushData.IndexOf('|');
            string str2  = null;

            if (index == -1)
            {
                int num2 = pushData.LastIndexOf(',');
                if (num2 == -1)
                {
                    throw new PushServerException(5, pushData);
                }
                str  = pushData.Substring(0, num2);
                str2 = pushData.Substring(num2 + 1);
            }
            else
            {
                str = pushData.Substring(0, index);
            }
            int length = str.IndexOf(',');

            if (length == -1)
            {
                throw new PushServerException(5, pushData);
            }
            string winCode = str.Substring(0, length);

            str    = str.Substring(length + 1);
            length = str.IndexOf(',');
            if (length == -1)
            {
                throw new PushServerException(5, pushData);
            }
            if (!str.Substring(0, length).Equals("1"))
            {
                throw new PushServerException(5, pushData);
            }
            str = str.Substring(length + 1);
            if (str2 == null)
            {
                Lightstreamer.DotNet.Client.ServerUpdateEvent event2 = new Lightstreamer.DotNet.Client.ServerUpdateEvent(winCode, str);
                while (index < pushData.Length)
                {
                    int num5 = pushData.IndexOf('|', index + 1);
                    if (num5 == -1)
                    {
                        num5 = pushData.Length;
                    }
                    if (num5 == (index + 1))
                    {
                        event2.AddValue(Lightstreamer.DotNet.Client.ServerUpdateEvent.UNCHANGED);
                    }
                    else
                    {
                        string src = pushData.Substring(index + 1, num5 - (index + 1));
                        if ((src.Length == 1) && (src[0] == '$'))
                        {
                            event2.AddValue("");
                        }
                        else if ((src.Length == 1) && (src[0] == '#'))
                        {
                            event2.AddValue(null);
                        }
                        else if ((src[0] == '$') || (src[0] == '#'))
                        {
                            event2.AddValue(DeUNIcode(src.Substring(1)));
                        }
                        else
                        {
                            event2.AddValue(DeUNIcode(src));
                        }
                    }
                    index = num5;
                }
                if (protLogger.IsDebugEnabled)
                {
                    protLogger.Debug("Read " + event2);
                }
                return(event2);
            }
            if (str2.Equals("EOS"))
            {
                return(new Lightstreamer.DotNet.Client.ServerUpdateEvent(winCode, str, true));
            }
            if (str2.StartsWith("OV"))
            {
                try
                {
                    return(new Lightstreamer.DotNet.Client.ServerUpdateEvent(winCode, str, int.Parse(str2.Substring("OV".Length))));
                }
                catch (Exception)
                {
                    throw new PushServerException(5, pushData);
                }
            }
            throw new PushServerException(5, pushData);
        }