Esempio n. 1
0
    // Token: 0x060007B9 RID: 1977 RVA: 0x0003CB88 File Offset: 0x0003AD88
    public void Load(BinaryReader reader, int version)
    {
        reader.ReadInt64();
        uint num  = reader.ReadUInt32();
        int  num2 = reader.ReadInt32();

        ZDOPool.Release(this.m_objectsByID);
        this.m_objectsByID.Clear();
        this.ResetSectorArray();
        ZLog.Log(string.Concat(new object[]
        {
            "Loading ",
            num2,
            " zdos , my id ",
            this.m_myid,
            " data version:",
            version
        }));
        ZPackage zpackage = new ZPackage();

        for (int i = 0; i < num2; i++)
        {
            ZDO zdo = ZDOPool.Create(this);
            zdo.m_uid = new ZDOID(reader);
            int    count = reader.ReadInt32();
            byte[] data  = reader.ReadBytes(count);
            zpackage.Load(data);
            zdo.Load(zpackage, version);
            zdo.SetOwner(0L);
            this.m_objectsByID.Add(zdo.m_uid, zdo);
            this.AddToSector(zdo, zdo.GetSector());
            if (zdo.m_uid.userID == this.m_myid && zdo.m_uid.id >= num)
            {
                num = zdo.m_uid.id + 1U;
            }
        }
        this.m_deadZDOs.Clear();
        int num3 = reader.ReadInt32();

        for (int j = 0; j < num3; j++)
        {
            ZDOID key   = new ZDOID(reader.ReadInt64(), reader.ReadUInt32());
            long  value = reader.ReadInt64();
            this.m_deadZDOs.Add(key, value);
            if (key.userID == this.m_myid && key.id >= num)
            {
                num = key.id + 1U;
            }
        }
        this.CapDeadZDOList();
        ZLog.Log("Loaded " + this.m_deadZDOs.Count + " dead zdos");
        this.RemoveOldGeneratedZDOS();
        this.m_nextUid = num;
    }
Esempio n. 2
0
 // Token: 0x06000AC7 RID: 2759 RVA: 0x0004DA3C File Offset: 0x0004BC3C
 private IEnumerator ConnectPortals()
 {
     for (;;)
     {
         this.m_tempPortalList.Clear();
         int  index = 0;
         bool done  = false;
         do
         {
             done = ZDOMan.instance.GetAllZDOsWithPrefabIterative(this.m_portalPrefab.name, this.m_tempPortalList, ref index);
             yield return(null);
         }while (!done);
         foreach (ZDO zdo in this.m_tempPortalList)
         {
             ZDOID  zdoid   = zdo.GetZDOID("target");
             string @string = zdo.GetString("tag", "");
             if (!zdoid.IsNone())
             {
                 ZDO zdo2 = ZDOMan.instance.GetZDO(zdoid);
                 if (zdo2 == null || zdo2.GetString("tag", "") != @string)
                 {
                     zdo.SetOwner(ZDOMan.instance.GetMyID());
                     zdo.Set("target", ZDOID.None);
                     ZDOMan.instance.ForceSendZDO(zdo.m_uid);
                 }
             }
         }
         foreach (ZDO zdo3 in this.m_tempPortalList)
         {
             string string2 = zdo3.GetString("tag", "");
             if (zdo3.GetZDOID("target").IsNone())
             {
                 ZDO zdo4 = this.FindRandomUnconnectedPortal(this.m_tempPortalList, zdo3, string2);
                 if (zdo4 != null)
                 {
                     zdo3.SetOwner(ZDOMan.instance.GetMyID());
                     zdo4.SetOwner(ZDOMan.instance.GetMyID());
                     zdo3.Set("target", zdo4.m_uid);
                     zdo4.Set("target", zdo3.m_uid);
                     ZDOMan.instance.ForceSendZDO(zdo3.m_uid);
                     ZDOMan.instance.ForceSendZDO(zdo4.m_uid);
                 }
             }
         }
         yield return(new WaitForSeconds(5f));
     }
     yield break;
 }
Esempio n. 3
0
 // Token: 0x060007E2 RID: 2018 RVA: 0x0003E46C File Offset: 0x0003C66C
 private void RemoveOrphanNonPersistentZDOS()
 {
     foreach (KeyValuePair <ZDOID, ZDO> keyValuePair in this.m_objectsByID)
     {
         ZDO value = keyValuePair.Value;
         if (!value.m_persistent && (value.m_owner == 0L || !this.IsPeerConnected(value.m_owner)))
         {
             ZLog.Log(string.Concat(new object[]
             {
                 "Destroying abandoned non persistent zdo ",
                 value.m_uid,
                 " owner ",
                 value.m_owner
             }));
             value.SetOwner(this.m_myid);
             this.DestroyZDO(value);
         }
     }
 }
Esempio n. 4
0
    // Token: 0x060007D3 RID: 2003 RVA: 0x0003D98C File Offset: 0x0003BB8C
    private void RPC_ZDOData(ZRpc rpc, ZPackage pkg)
    {
        ZDOMan.ZDOPeer zdopeer = this.FindPeer(rpc);
        if (zdopeer == null)
        {
            ZLog.Log("ZDO data from unkown host, ignoring");
            return;
        }
        float    time = Time.time;
        int      num  = 0;
        ZPackage pkg2 = new ZPackage();
        int      num2 = pkg.ReadInt();

        for (int i = 0; i < num2; i++)
        {
            ZDOID id  = pkg.ReadZDOID();
            ZDO   zdo = this.GetZDO(id);
            if (zdo != null)
            {
                zdo.InvalidateSector();
            }
        }
        for (;;)
        {
            ZDOID zdoid = pkg.ReadZDOID();
            if (zdoid.IsNone())
            {
                break;
            }
            num++;
            uint    num3   = pkg.ReadUInt();
            uint    num4   = pkg.ReadUInt();
            long    owner  = pkg.ReadLong();
            Vector3 vector = pkg.ReadVector3();
            pkg.ReadPackage(ref pkg2);
            ZDO  zdo2 = this.GetZDO(zdoid);
            bool flag = false;
            if (zdo2 != null)
            {
                if (num4 <= zdo2.m_dataRevision)
                {
                    if (num3 > zdo2.m_ownerRevision)
                    {
                        zdo2.m_owner          = owner;
                        zdo2.m_ownerRevision  = num3;
                        zdopeer.m_zdos[zdoid] = new ZDOMan.ZDOPeer.PeerZDOInfo(num4, num3, time);
                        continue;
                    }
                    continue;
                }
            }
            else
            {
                zdo2 = this.CreateNewZDO(zdoid, vector);
                flag = true;
            }
            zdo2.m_ownerRevision = num3;
            zdo2.m_dataRevision  = num4;
            zdo2.m_owner         = owner;
            zdo2.InternalSetPosition(vector);
            zdopeer.m_zdos[zdoid] = new ZDOMan.ZDOPeer.PeerZDOInfo(zdo2.m_dataRevision, zdo2.m_ownerRevision, time);
            zdo2.Deserialize(pkg2);
            if (ZNet.instance.IsServer() && flag && this.m_deadZDOs.ContainsKey(zdoid))
            {
                zdo2.SetOwner(this.m_myid);
                this.DestroyZDO(zdo2);
            }
        }
        this.m_zdosRecv += num;
    }