Esempio n. 1
0
    // Token: 0x060007B8 RID: 1976 RVA: 0x0003C9F0 File Offset: 0x0003ABF0
    public void SaveAsync(BinaryWriter writer)
    {
        writer.Write(this.m_saveData.m_myid);
        writer.Write(this.m_saveData.m_nextUid);
        ZPackage zpackage = new ZPackage();

        writer.Write(this.m_saveData.m_zdos.Count);
        foreach (ZDO zdo in this.m_saveData.m_zdos)
        {
            writer.Write(zdo.m_uid.userID);
            writer.Write(zdo.m_uid.id);
            zpackage.Clear();
            zdo.Save(zpackage);
            byte[] array = zpackage.GetArray();
            writer.Write(array.Length);
            writer.Write(array);
        }
        writer.Write(this.m_saveData.m_deadZDOs.Count);
        foreach (KeyValuePair <ZDOID, long> keyValuePair in this.m_saveData.m_deadZDOs)
        {
            writer.Write(keyValuePair.Key.userID);
            writer.Write(keyValuePair.Key.id);
            writer.Write(keyValuePair.Value);
        }
        ZLog.Log("Saved " + this.m_saveData.m_zdos.Count + " zdos");
        this.m_saveData = null;
    }
Esempio n. 2
0
 public void ReadPackage(ref ZPackage pkg)
 {
     byte[] buffer = this.m_reader.ReadBytes(this.m_reader.ReadInt32());
     pkg.Clear();
     pkg.m_stream.Write(buffer, 0, buffer.Length);
     pkg.m_stream.Position = 0L;
 }
Esempio n. 3
0
    // Token: 0x060008E9 RID: 2281 RVA: 0x00042BC4 File Offset: 0x00040DC4
    public void ReadPackage(ref ZPackage pkg)
    {
        int count = this.m_reader.ReadInt32();

        byte[] array = this.m_reader.ReadBytes(count);
        pkg.Clear();
        pkg.m_stream.Write(array, 0, array.Length);
        pkg.m_stream.Position = 0L;
    }
Esempio n. 4
0
        public static void RPC_RequestSetTime(long sender, ZPackage pkg)
        {
            if (pkg != null && pkg.Size() > 0)
            {                                                                                            // Check that our Package is not null, and if it isn't check that it isn't empty.
                ZNetPeer peer = ZNet.instance.GetPeer(sender);                                           // Get the Peer from the sender, to later check the SteamID against our Adminlist.
                if (peer != null)
                {                                                                                        // Confirm the peer exists
                    string peerSteamID = ((ZSteamSocket)peer.m_socket).GetPeerID().m_SteamID.ToString(); // Get the SteamID from peer.
                    if (
                        ZNet.instance.m_adminList != null &&
                        ZNet.instance.m_adminList.Contains(peerSteamID)
                        )
                    { // Check that the SteamID is in our Admin List.
                        // set server tod
                        String tod_str = pkg.ReadString();
                        if (tod_str == "sync")
                        {
                            pkg.Clear();
                            tod_str = EnvMan.instance.m_debugTime.ToString();
                            pkg.Write(tod_str);
                        }
                        float tod = float.Parse(tod_str);

                        if (tod < 0f)
                        {
                            EnvMan.instance.m_debugTimeOfDay = false;
                        }
                        else
                        {
                            EnvMan.instance.m_debugTimeOfDay = true;
                            EnvMan.instance.m_debugTime      = Mathf.Clamp01(tod);
                        }
                        pkg.SetPos(0);
                        string msg = pkg.ReadString();                                                 // Read the message from the user.
                        pkg.SetPos(0);                                                                 // Reset the position of our cursor so the client's can re-read the package.
                        ZRoutedRpc.instance.InvokeRoutedRPC(0L, "EventSetTime", new object[] { pkg }); // Send our Event to all Clients. 0L specifies that it will be sent to everybody
                        UnityEngine.Debug.Log("changing time of day...");
                    }
                }
                else
                {
                    ZPackage newPkg = new ZPackage();                                                      // Create a new ZPackage.
                    newPkg.Write("You aren't an Admin!");                                                  // Tell them what's going on.
                    ZRoutedRpc.instance.InvokeRoutedRPC(sender, "BadRequestMsg", new object[] { newPkg }); // Send the error message.
                }
            }
        }
Esempio n. 5
0
        public static void Postfix()
        {
            try {
                // proof of concept persistence, don't want to include or test it now
                return;

                //TODO: Only do this if we're the server.
                Plugin.Logger.LogInfo("Persisting armorstand db");

                var armorStandsZDOs = new List <ZDO>();
                ZDOMan.instance.GetAllZDOsWithPrefab("FullArmorStand", armorStandsZDOs);

                var zpkg     = new ZPackage();
                var fileName = ZNet.m_world.m_name + ".armorstands.db"; //make a variable

                using (BinaryWriter writer = new BinaryWriter(File.Open(World.GetWorldSavePath() + "/" + fileName, FileMode.OpenOrCreate))) {
                    writer.Write(Version.m_worldVersion); //int32
                    writer.Write(armorStandsZDOs.Count);  //int32

                    foreach (var zdo in armorStandsZDOs)
                    {
                        writer.Write(zdo.m_uid.userID); //long
                        writer.Write(zdo.m_uid.id);     //uint32

                        zpkg.Clear();
                        zdo.Save(zpkg);

                        byte[] array = zpkg.GetArray();
                        writer.Write(array.Length);//int32
                        writer.Write(array);
                        Plugin.Logger.LogInfo("Persisting armor stand with id " + zdo.m_uid);
                    }
                }
            }catch (Exception exc) {
                Plugin.Logger.LogError("Error saving backup data: " + exc);
            }
        }
Esempio n. 6
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);
    }