// 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; }
// 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; }
// 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); } } }
// 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; }