Beispiel #1
0
    // Token: 0x060007D2 RID: 2002 RVA: 0x0003D744 File Offset: 0x0003B944
    private bool SendZDOs(ZDOMan.ZDOPeer peer, bool flush)
    {
        int sendQueueSize = peer.m_peer.m_socket.GetSendQueueSize();

        if (!flush && sendQueueSize > 10240)
        {
            return(false);
        }
        int num = 10240 - sendQueueSize;

        if (num < 2048)
        {
            return(false);
        }
        this.m_tempToSync.Clear();
        this.CreateSyncList(peer, this.m_tempToSync);
        if (this.m_tempToSync.Count == 0 && peer.m_invalidSector.Count == 0)
        {
            return(false);
        }
        ZPackage zpackage = new ZPackage();
        bool     flag     = false;

        if (peer.m_invalidSector.Count > 0)
        {
            flag = true;
            zpackage.Write(peer.m_invalidSector.Count);
            foreach (ZDOID id in peer.m_invalidSector)
            {
                zpackage.Write(id);
            }
            peer.m_invalidSector.Clear();
        }
        else
        {
            zpackage.Write(0);
        }
        float    time      = Time.time;
        ZPackage zpackage2 = new ZPackage();
        bool     flag2     = false;
        int      num2      = 0;

        while (num2 < this.m_tempToSync.Count && zpackage.Size() <= num)
        {
            ZDO zdo = this.m_tempToSync[num2];
            peer.m_forceSend.Remove(zdo.m_uid);
            if (!ZNet.instance.IsServer())
            {
                this.m_clientChangeQueue.Remove(zdo.m_uid);
            }
            if (peer.ShouldSend(zdo))
            {
                zpackage.Write(zdo.m_uid);
                zpackage.Write(zdo.m_ownerRevision);
                zpackage.Write(zdo.m_dataRevision);
                zpackage.Write(zdo.m_owner);
                zpackage.Write(zdo.GetPosition());
                zpackage2.Clear();
                zdo.Serialize(zpackage2);
                zpackage.Write(zpackage2);
                peer.m_zdos[zdo.m_uid] = new ZDOMan.ZDOPeer.PeerZDOInfo(zdo.m_dataRevision, zdo.m_ownerRevision, time);
                flag2 = true;
                this.m_zdosSent++;
            }
            num2++;
        }
        zpackage.Write(ZDOID.None);
        if (flag2 || flag)
        {
            peer.m_peer.m_rpc.Invoke("ZDOData", new object[]
            {
                zpackage
            });
        }
        return(flag2 || flag);
    }