Beispiel #1
0
 public bool Dequeue(UnityEngine.MonoBehaviour script, ulong playhead, out InterpTimedEvent node, ref Iterator iter_)
 {
     if (this.count <= 0)
     {
         node = null;
         return(false);
     }
     for (InterpTimedEvent.Dir dir = !iter_.started ? this.first : iter_.d; dir.has; dir = dir.node.next)
     {
         if (playhead < dir.node.info.timestamp)
         {
             break;
         }
         if (dir.node.component == script)
         {
             node          = dir.node;
             iter_.d       = node.next;
             iter_.started = true;
             this.Remove(node);
             return(true);
         }
     }
     iter_.d       = new InterpTimedEvent.Dir();
     iter_.started = true;
     node          = null;
     return(false);
 }
Beispiel #2
0
 public bool Dequeue(UnityEngine.MonoBehaviour script, ulong playhead, out InterpTimedEvent node, ref InterpTimedEvent.LList.Iterator iter_)
 {
     if (this.count <= 0)
     {
         node = null;
         return(false);
     }
     InterpTimedEvent.Dir dir = (!iter_.started ? this.first : iter_.d);
     while (dir.has)
     {
         if ((double)((float)playhead) >= dir.node.info.timestamp)
         {
             if (dir.node.component == script)
             {
                 node          = dir.node;
                 iter_.d       = node.next;
                 iter_.started = true;
                 this.Remove(node);
                 return(true);
             }
             dir = dir.node.next;
         }
         else
         {
             break;
         }
     }
     iter_.d       = new InterpTimedEvent.Dir();
     iter_.started = true;
     node          = null;
     return(false);
 }
Beispiel #3
0
 public bool Dequeue(ulong playhead, out InterpTimedEvent node, ref Iterator iter_)
 {
     if (this.count <= 0)
     {
         node = null;
         return(false);
     }
     InterpTimedEvent.Dir dir = !iter_.started ? this.first : iter_.d;
     while (dir.has)
     {
         if (playhead < dir.node.info.timestamp)
         {
             break;
         }
         node          = dir.node;
         iter_.d       = node.next;
         iter_.started = true;
         this.Remove(node);
         return(true);
     }
     iter_.d       = new InterpTimedEvent.Dir();
     iter_.started = true;
     node          = null;
     return(false);
 }
Beispiel #4
0
 public bool Insert(InterpTimedEvent node)
 {
     InterpTimedEvent.Dir dir = new InterpTimedEvent.Dir();
     dir.node = node;
     dir.has  = true;
     return(this.Insert(ref dir));
 }
Beispiel #5
0
 public static void EMERGENCY_DUMP(bool TRY_TO_EXECUTE)
 {
     Debug.LogWarning(string.Concat("RUNNING EMERGENCY DUMP: TRY TO EXECUTE=", TRY_TO_EXECUTE));
     try
     {
         try
         {
             if (!TRY_TO_EXECUTE)
             {
                 InterpTimedEvent.queue.EmergencyDump(false);
             }
             else
             {
                 try
                 {
                     foreach (InterpTimedEvent interpTimedEvent in InterpTimedEvent.queue.EmergencyDump(true))
                     {
                         try
                         {
                             try
                             {
                                 InterpTimedEvent.InvokeDirect(interpTimedEvent);
                             }
                             catch (Exception exception)
                             {
                                 Debug.LogException(exception);
                             }
                         }
                         finally
                         {
                             try
                             {
                                 interpTimedEvent.Dispose();
                             }
                             catch (Exception exception1)
                             {
                                 Debug.LogException(exception1);
                             }
                         }
                     }
                 }
                 catch (Exception exception2)
                 {
                     Debug.LogException(exception2);
                 }
             }
         }
         catch (Exception exception3)
         {
             Debug.LogException(exception3);
         }
     }
     finally
     {
         InterpTimedEvent.queue     = new InterpTimedEvent.LList();
         InterpTimedEvent.dump      = new InterpTimedEvent.Dir();
         InterpTimedEvent.dumpCount = 0;
     }
     Debug.LogWarning(string.Concat("END OF EMERGENCY DUMP: TRY TO EXECUTE=", TRY_TO_EXECUTE));
 }
        public List <InterpTimedEvent> EmergencyDump(bool botherSorting)
        {
            bool flag;
            HashSet <InterpTimedEvent> collection = new HashSet <InterpTimedEvent>();
            Iterator iterator = new Iterator();

            do
            {
                InterpTimedEvent event2;
                try
                {
                    flag = this.Dequeue(ulong.MaxValue, out event2, ref iterator);
                }
                catch (Exception exception)
                {
                    Debug.LogException(exception);
                    break;
                }
                if (flag)
                {
                    collection.Add(event2);
                }
            }while (flag);
            this.first = this.last = new InterpTimedEvent.Dir();
            this.count = 0;
            HashSet <InterpTimedEvent> other = this.FAIL_SAFE_SET;

            this.FAIL_SAFE_SET = null;
            if (other != null)
            {
                collection.UnionWith(other);
            }
            List <InterpTimedEvent> list = new List <InterpTimedEvent>(collection);

            if (botherSorting)
            {
                try
                {
                    if (< > f__am$cache4 == null)
                    {
                        < > f__am$cache4 = delegate(InterpTimedEvent x, InterpTimedEvent y) {
                            if (x == null)
                            {
                                if (y == null)
                                {
                                    return(0);
                                }
                                int num = 0;
                                return(num.CompareTo(1));
                            }
                            if (y == null)
                            {
                                int num2 = 1;
                                return(num2.CompareTo(0));
                            }
                            return(x.info.timestampInMillis.CompareTo(y.info.timestampInMillis));
                        };
                    }
                    list.Sort(< > f__am$cache4);
                }
Beispiel #7
0
 private bool RemoveUnsafe(InterpTimedEvent node)
 {
     if (((this.count > 0) && (node != null)) && node.inlist)
     {
         if (node.prev.has)
         {
             if (node.next.has)
             {
                 node.next.node.prev = node.prev;
                 node.prev.node.next = node.next;
                 this.count--;
                 node.prev   = node.next = new InterpTimedEvent.Dir();
                 node.inlist = false;
                 return(true);
             }
             this.last           = node.prev;
             this.last.node.next = new InterpTimedEvent.Dir();
             this.count--;
             node.prev   = node.next = new InterpTimedEvent.Dir();
             node.inlist = false;
             return(true);
         }
         if (node.next.has)
         {
             this.first           = node.next;
             this.first.node.prev = new InterpTimedEvent.Dir();
             this.count--;
             node.prev   = node.next = new InterpTimedEvent.Dir();
             node.inlist = false;
             return(true);
         }
         if (this.first.node == node)
         {
             this.first  = this.last = new InterpTimedEvent.Dir();
             this.count  = 0;
             node.prev   = node.next = new InterpTimedEvent.Dir();
             node.inlist = false;
             return(true);
         }
     }
     return(false);
 }
Beispiel #8
0
 public void Dispose()
 {
     if (this.inlist)
     {
         InterpTimedEvent.queue.Remove(this);
     }
     if (!this.disposed)
     {
         this.prev = new InterpTimedEvent.Dir();
         this.next = InterpTimedEvent.dump;
         InterpTimedEvent.dump.has  = true;
         InterpTimedEvent.dump.node = this;
         this.component             = null;
         this.args.Dispose();
         this.args = null;
         this.info = null;
         this.tag  = null;
         InterpTimedEvent.dumpCount = InterpTimedEvent.dumpCount + 1;
         this.disposed = true;
     }
 }
Beispiel #9
0
    internal static InterpTimedEvent New(UnityEngine.MonoBehaviour receiver, string tag, ref uLink.NetworkMessageInfo info, object[] args, bool immediate)
    {
        InterpTimedEvent interpTimedEvent;

        if (!receiver)
        {
            Debug.LogError("receiver is null or has been destroyed", receiver);
            return(null);
        }
        if (!(receiver is IInterpTimedEventReceiver))
        {
            Debug.LogError(string.Concat("receiver of type ", receiver.GetType(), " does not implement IInterpTimedEventReceiver"), receiver);
            return(null);
        }
        if (!InterpTimedEvent.dump.has)
        {
            interpTimedEvent = new InterpTimedEvent();
        }
        else
        {
            InterpTimedEvent.dumpCount = InterpTimedEvent.dumpCount - 1;
            interpTimedEvent           = InterpTimedEvent.dump.node;
            InterpTimedEvent.dump      = interpTimedEvent.next;
            interpTimedEvent.next      = new InterpTimedEvent.Dir();
            interpTimedEvent.prev      = new InterpTimedEvent.Dir();
            interpTimedEvent.disposed  = false;
        }
        interpTimedEvent.args      = InterpTimedEvent.ArgList.New(args);
        interpTimedEvent.tag       = tag;
        interpTimedEvent.component = receiver;
        interpTimedEvent.info      = info;
        if (!immediate)
        {
            InterpTimedEvent.queue.Insert(interpTimedEvent);
        }
        return(interpTimedEvent);
    }
Beispiel #10
0
 public bool Dequeue(ulong playhead, out InterpTimedEvent node, ref InterpTimedEvent.LList.Iterator iter_)
 {
     if (this.count <= 0)
     {
         node = null;
         return(false);
     }
     InterpTimedEvent.Dir dir = (!iter_.started ? this.first : iter_.d);
     if (dir.has)
     {
         if ((double)((float)playhead) >= dir.node.info.timestamp)
         {
             node          = dir.node;
             iter_.d       = node.next;
             iter_.started = true;
             this.Remove(node);
             return(true);
         }
     }
     iter_.d       = new InterpTimedEvent.Dir();
     iter_.started = true;
     node          = null;
     return(false);
 }
Beispiel #11
0
 private bool Insert(ref InterpTimedEvent.Dir ent)
 {
     if (ent.node == null)
     {
         return(false);
     }
     if (ent.node.inlist)
     {
         return(false);
     }
     if (this.count == 0)
     {
         this.first = this.last = ent;
     }
     else if (this.last.node.info.timestampInMillis <= ent.node.info.timestampInMillis)
     {
         if (this.count == 1)
         {
             this.first           = this.last;
             this.last            = ent;
             ent.node.prev        = this.first;
             this.first.node.next = this.last;
         }
         else
         {
             ent.node.prev       = this.last;
             this.last.node.next = ent;
             this.last           = ent;
         }
     }
     else if (this.count == 1)
     {
         this.first           = ent;
         this.first.node.next = this.last;
         this.last.node.prev  = this.first;
     }
     else if (this.first.node.info.timestampInMillis > ent.node.info.timestampInMillis)
     {
         ent.node.next        = this.first;
         this.first.node.prev = ent;
         this.first           = ent;
     }
     else
     {
         InterpTimedEvent.Dir last;
         if (this.first.node.info.timestampInMillis == ent.node.info.timestampInMillis)
         {
             for (last = this.first; last.node.next.has; last = last.node.next)
             {
                 if (last.node.next.node.info.timestampInMillis > ent.node.info.timestampInMillis)
                 {
                     break;
                 }
             }
         }
         else
         {
             last = this.last;
             while (last.node.prev.has)
             {
                 last = last.node.prev;
                 if (last.node.info.timestampInMillis <= ent.node.info.timestampInMillis)
                 {
                     break;
                 }
             }
         }
         ent.node.next = last.node.next;
         ent.node.prev = last;
     }
     this.count++;
     ent.node.inlist = true;
     if (this.FAIL_SAFE_SET == null)
     {
         this.FAIL_SAFE_SET = new HashSet <InterpTimedEvent>();
     }
     this.FAIL_SAFE_SET.Add(ent.node);
     return(true);
 }
Beispiel #12
0
 private bool RemoveUnsafe(InterpTimedEvent node)
 {
     InterpTimedEvent.Dir dir;
     InterpTimedEvent.Dir dir1;
     InterpTimedEvent.Dir dir2;
     if (this.count > 0 && node != null && node.inlist)
     {
         if (node.prev.has)
         {
             if (!node.next.has)
             {
                 this.last = node.prev;
                 InterpTimedEvent interpTimedEvent = this.last.node;
                 dir = new InterpTimedEvent.Dir();
                 interpTimedEvent.next = dir;
                 InterpTimedEvent.LList lList = this;
                 lList.count = lList.count - 1;
                 InterpTimedEvent.Dir dir3 = new InterpTimedEvent.Dir();
                 dir1        = dir3;
                 node.next   = dir3;
                 node.prev   = dir1;
                 node.inlist = false;
                 return(true);
             }
             node.next.node.prev = node.prev;
             node.prev.node.next = node.next;
             InterpTimedEvent.LList lList1 = this;
             lList1.count = lList1.count - 1;
             InterpTimedEvent.Dir dir4 = new InterpTimedEvent.Dir();
             dir         = dir4;
             node.next   = dir4;
             node.prev   = dir;
             node.inlist = false;
             return(true);
         }
         if (node.next.has)
         {
             this.first = node.next;
             InterpTimedEvent interpTimedEvent1 = this.first.node;
             dir1 = new InterpTimedEvent.Dir();
             interpTimedEvent1.prev = dir1;
             InterpTimedEvent.LList lList2 = this;
             lList2.count = lList2.count - 1;
             InterpTimedEvent.Dir dir5 = new InterpTimedEvent.Dir();
             dir2        = dir5;
             node.next   = dir5;
             node.prev   = dir2;
             node.inlist = false;
             return(true);
         }
         if (this.first.node == node)
         {
             dir2 = new InterpTimedEvent.Dir();
             InterpTimedEvent.Dir dir6 = dir2;
             InterpTimedEvent.Dir dir7 = dir6;
             this.last  = dir6;
             this.first = dir7;
             this.count = 0;
             dir7       = new InterpTimedEvent.Dir();
             InterpTimedEvent.Dir dir8 = dir7;
             InterpTimedEvent.Dir dir9 = dir8;
             node.next   = dir8;
             node.prev   = dir9;
             node.inlist = false;
             return(true);
         }
     }
     return(false);
 }
Beispiel #13
0
        private bool Insert(ref InterpTimedEvent.Dir ent)
        {
            InterpTimedEvent.Dir dir;
            if (ent.node == null)
            {
                return(false);
            }
            if (ent.node.inlist)
            {
                return(false);
            }
            if (this.count == 0)
            {
                InterpTimedEvent.Dir dir1 = ent;
                InterpTimedEvent.Dir dir2 = dir1;
                this.last  = dir1;
                this.first = dir2;
            }
            else if (this.last.node.info.timestampInMillis <= ent.node.info.timestampInMillis)
            {
                if (this.count != 1)
                {
                    ent.node.prev       = this.last;
                    this.last.node.next = ent;
                    this.last           = ent;
                }
                else
                {
                    this.first           = this.last;
                    this.last            = ent;
                    ent.node.prev        = this.first;
                    this.first.node.next = this.last;
                }
            }
            else if (this.count == 1)
            {
                this.first           = ent;
                this.first.node.next = this.last;
                this.last.node.prev  = this.first;
            }
            else if (this.first.node.info.timestampInMillis <= ent.node.info.timestampInMillis)
            {
                if (this.first.node.info.timestampInMillis != ent.node.info.timestampInMillis)
                {
                    dir = this.last;
                    do
                    {
                        if (!dir.node.prev.has)
                        {
                            goto Label0;
                        }
                        dir = dir.node.prev;
                    }while (dir.node.info.timestampInMillis > ent.node.info.timestampInMillis);
                }
                else
                {
                    dir = this.first;
                    while (dir.node.next.has)
                    {
                        if (dir.node.next.node.info.timestampInMillis <= ent.node.info.timestampInMillis)
                        {
                            dir = dir.node.next;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
Label0:
                ent.node.next = dir.node.next;
                ent.node.prev = dir;
            }
            else
            {
                ent.node.next        = this.first;
                this.first.node.prev = ent;
                this.first           = ent;
            }
            InterpTimedEvent.LList lList = this;
            lList.count     = lList.count + 1;
            ent.node.inlist = true;
            if (this.FAIL_SAFE_SET == null)
            {
                this.FAIL_SAFE_SET = new HashSet <InterpTimedEvent>();
            }
            this.FAIL_SAFE_SET.Add(ent.node);
            return(true);
        }
Beispiel #14
0
        public List <InterpTimedEvent> EmergencyDump(bool botherSorting)
        {
            InterpTimedEvent           interpTimedEvent;
            bool                       flag;
            HashSet <InterpTimedEvent> interpTimedEvents = new HashSet <InterpTimedEvent>();

            InterpTimedEvent.LList.Iterator iterator = new InterpTimedEvent.LList.Iterator();
            do
            {
                try
                {
                    flag = this.Dequeue((ulong)-1, out interpTimedEvent, ref iterator);
                }
                catch (Exception exception)
                {
                    Debug.LogException(exception);
                    break;
                }
                if (!flag)
                {
                    continue;
                }
                interpTimedEvents.Add(interpTimedEvent);
            }while (flag);
            InterpTimedEvent.Dir dir  = new InterpTimedEvent.Dir();
            InterpTimedEvent.Dir dir1 = dir;
            this.last  = dir;
            this.first = dir1;
            this.count = 0;
            HashSet <InterpTimedEvent> fAILSAFESET = this.FAIL_SAFE_SET;

            this.FAIL_SAFE_SET = null;
            if (fAILSAFESET != null)
            {
                interpTimedEvents.UnionWith(fAILSAFESET);
            }
            List <InterpTimedEvent> interpTimedEvents1 = new List <InterpTimedEvent>(interpTimedEvents);

            if (botherSorting)
            {
                try
                {
                    interpTimedEvents1.Sort((InterpTimedEvent x, InterpTimedEvent y) => {
                        if (x == null)
                        {
                            if (y == null)
                            {
                                return(0);
                            }
                            return(0.CompareTo(1));
                        }
                        if (y == null)
                        {
                            return(1.CompareTo(0));
                        }
                        return(x.info.timestampInMillis.CompareTo(y.info.timestampInMillis));
                    });
                }
                catch (Exception exception1)
                {
                    Debug.LogException(exception1);
                }
            }
            return(interpTimedEvents1);
        }