コード例 #1
0
 public void ScheduleUpdate(ObjectUpdateInfo info)
 {
     foreach (Circuit circ in m_Circuits.Values)
     {
         var acirc = circ as AgentCircuit;
         acirc?.ScheduleUpdate(info);
     }
 }
コード例 #2
0
ファイル: ViewerAgent.cs プロジェクト: ft-/silversim-testing
        public override void ScheduleUpdate(ObjectUpdateInfo info, UUID fromSceneID)
        {
            AgentCircuit circuit;

            if (Circuits.TryGetValue(fromSceneID, out circuit))
            {
                circuit.ScheduleUpdate(info);
            }
        }
コード例 #3
0
 public void ScheduleUpdate(ObjectUpdateInfo objinfo, bool isPhysicsOrigin = false)
 {
     foreach (IAgent a in Agents)
     {
         a.ScheduleUpdate(objinfo, ID);
     }
     foreach (ISceneListener l in SceneListeners)
     {
         if (isPhysicsOrigin && l.IgnorePhysicsLocationUpdates)
         {
             continue;
         }
         l.ScheduleUpdate(objinfo, ID);
     }
 }
 protected override void OnUpdate(ObjectUpdateInfo info)
 {
     if (info.IsKilled)
     {
         m_Primitives.Remove(info.ID);
         m_Objects.Remove(info.ID);
     }
     else
     {
         m_Objects.Remove(info.ID);
         m_Primitives[info.ID] = GenerateUpdateObjectPart(info.Part);
         m_Objects[info.ID]    = GenerateUpdateObjectGroup(info.Part.ObjectGroup);
         foreach (ObjectPartInventoryItem item in info.Part.Inventory.Values)
         {
             OnUpdate(item.UpdateInfo);
         }
     }
 }
コード例 #5
0
 protected override void OnUpdate(ObjectUpdateInfo info)
 {
     if (info.IsKilled)
     {
         if (info.Part.ObjectGroup.RootPart == info.Part)
         {
             m_GroupUpdates.Remove(info.ID);
             m_GroupDeletions[info.ID] = true;
         }
         m_PrimUpdates.Remove(info.ID);
         m_PrimDeletions[info.ID] = true;
     }
     else
     {
         bool havePrimSerial = m_PrimSerials.Contains(info.ID);
         if (havePrimSerial && m_PrimSerials[info.ID] == info.Part.SerialNumber)
         {
             /* ignore update */
         }
         else
         {
             if (!havePrimSerial)
             {
                 foreach (ObjectPartInventoryItem item in info.Part.Inventory.Values)
                 {
                     ObjectInventoryUpdateInfo invinfo = item.UpdateInfo;
                     m_PrimItemUpdates[new PrimKey(invinfo)] = invinfo;
                 }
             }
             if (info.Part.ObjectGroup.RootPart != info.Part)
             {
                 m_GroupDeletions[info.ID] = true;
             }
             Dictionary <string, object> data = GenerateUpdateObjectPart(info.Part);
             data["RegionID"] = m_RegionID;
             m_PrimDeletions.Remove(info.ID);
             m_PrimUpdates[info.ID] = data;
             ObjectGroup grp = info.Part.ObjectGroup;
             m_GroupDeletions.Remove(grp.ID);
             m_GroupUpdates[grp.ID] = GenerateUpdateObjectGroup(grp);
         }
     }
 }
コード例 #6
0
 public abstract void ScheduleUpdate(ObjectUpdateInfo info, UUID fromSceneID);
コード例 #7
0
 public override void ScheduleUpdate(ObjectUpdateInfo info, UUID fromSceneID)
 {
     /* ignored */
 }
コード例 #8
0
 public ForceObjectUpdateInfo(ObjectUpdateInfo updateInfo)
     : base(updateInfo.Part)
 {
 }
コード例 #9
0
 public void ScheduleUpdate(ObjectUpdateInfo info, UUID fromSceneID)
 {
     m_StorageMainRequestQueue.Enqueue(info);
 }
コード例 #10
0
            private void StorageMainThread()
            {
                Thread.CurrentThread.Name = "Storage Main Thread: " + m_RegionID.ToString();
                OnStart();
                int nummessagespending = 0;

                m_Log.InfoFormat("Object storage thread for region {0} started", m_RegionID);

                while (!m_StopStorageThread || m_StorageMainRequestQueue.Count != 0 || HasPendingData)
                {
                    IUpdateInfo req;
                    try
                    {
                        req = m_StorageMainRequestQueue.Dequeue(1000);
                    }
                    catch
                    {
                        try
                        {
                            OnIdle();
                            nummessagespending = 0;
                        }
                        catch (Exception e)
                        {
                            m_Log.Error("Exception encountered at OnIdle", e);
                        }
                        continue;
                    }

                    if (nummessagespending > 2000)
                    {
                        try
                        {
                            OnIdle();
                            nummessagespending = 0;
                        }
                        catch (Exception e)
                        {
                            m_Log.Error("Exception encountered at OnIdle", e);
                        }
                    }

                    ObjectUpdateInfo oInfo = req as ObjectUpdateInfo;
                    if (oInfo != null)
                    {
                        try
                        {
                            OnUpdate(oInfo);
                            ++nummessagespending;
                        }
                        catch (Exception e)
                        {
                            m_Log.Error("Inventory item storage encountered exception at " + m_RegionID.ToString(), e);
                        }
                        continue;
                    }

                    ObjectInventoryUpdateInfo iInfo = req as ObjectInventoryUpdateInfo;
                    if (iInfo != null)
                    {
                        try
                        {
                            OnUpdate(iInfo);
                            ++nummessagespending;
                        }
                        catch (Exception e)
                        {
                            m_Log.Error("Inventory storage encountered exception at " + m_RegionID.ToString(), e);
                        }
                    }
                }

                try
                {
                    OnIdle();
                }
                catch (Exception e)
                {
                    m_Log.Error("OnIdle threw an exception after leaving loop", e);
                }

                OnStop();
            }
コード例 #11
0
 protected abstract void OnUpdate(ObjectUpdateInfo info);