Exemple #1
0
 public void TestZero()
 {
     Assert.Equal(new DateTime(2000, 1, 1), Epoch.ToDateTime(0));
     Assert.Equal(0u, Epoch.FromDateTime(new DateTime(2000, 1, 1)));
     Assert.Equal(new DateTimeOffset(2000, 1, 1, 0, 0, 0, TimeSpan.Zero), Epoch.ToDateTimeOffset(0));
     Assert.Equal(0u, Epoch.FromDateTimeOffset(new DateTimeOffset(2000, 1, 1, 0, 0, 0, TimeSpan.Zero)));
 }
Exemple #2
0
        public void TestPreEphoch()
        {
            ArgumentOutOfRangeException exc;

            var dateTime = new DateTime(1999, 12, 30);

            exc = Assert.Throws <ArgumentOutOfRangeException>(() => Epoch.FromDateTime(dateTime));
            Assert.Equal("dateTime", exc.ParamName);
            Assert.Equal(dateTime, exc.ActualValue);
            Assert.Equal($"dateTime is before the ripple epoch of 2000-01-01 (Parameter 'dateTime'){Environment.NewLine}Actual value was {dateTime}.", exc.Message);

            var dateTimeOffset = new DateTimeOffset(1999, 12, 30, 0, 0, 0, TimeSpan.Zero);

            exc = Assert.Throws <ArgumentOutOfRangeException>(() => Epoch.FromDateTimeOffset(dateTimeOffset));
            Assert.Equal("dateTimeOffset", exc.ParamName);
            Assert.Equal(dateTimeOffset, exc.ActualValue);
            Assert.Equal($"dateTimeOffset is before the ripple epoch of 2000-01-01 (Parameter 'dateTimeOffset'){Environment.NewLine}Actual value was {dateTimeOffset}.", exc.Message);
        }
Exemple #3
0
        public override void Execute()
        {
            AppInfo appInfo = Facepunch.Pool.Get <AppInfo>();

            appInfo.name          = ConVar.Server.hostname;
            appInfo.headerImage   = ConVar.Server.headerimage;
            appInfo.logoImage     = ConVar.Server.logoimage;
            appInfo.url           = ConVar.Server.url;
            appInfo.map           = World.Name;
            appInfo.mapSize       = World.Size;
            appInfo.wipeTime      = (uint)Epoch.FromDateTime(SaveRestore.SaveCreatedTime.ToUniversalTime());
            appInfo.players       = (uint)BasePlayer.activePlayerList.Count;
            appInfo.maxPlayers    = (uint)ConVar.Server.maxplayers;
            appInfo.queuedPlayers = (uint)SingletonComponent <ServerMgr> .Instance.connectionQueue.Queued;
            appInfo.seed          = World.Seed;
            appInfo.salt          = World.Salt;
            AppResponse appResponse = Facepunch.Pool.Get <AppResponse>();

            appResponse.info = appInfo;
            Send(appResponse);
        }
Exemple #4
0
 public void TestDateTimeRoundTrip(uint timestamp)
 {
     Assert.Equal(timestamp, Epoch.FromDateTime(Epoch.ToDateTime(timestamp)));
 }
Exemple #5
0
 static bool Prefix(ServerMgr serverMgr)
 {
     if (!SteamServer.IsValid)
     {
         return(false);
     }
     using (TimeWarning.New("UpdateServerInformation", 0))
     {
         SteamServer.ServerName = ConVar.Server.hostname;
         SteamServer.MaxPlayers = ConVar.Server.maxplayers;
         SteamServer.Passworded = false;
         SteamServer.MapName    = global::World.Name;
         string text = "stok";
         if (serverMgr.Restarting)
         {
             text = "strst";
         }
         string text2 = string.Format("born{0}", Epoch.FromDateTime(global::SaveRestore.SaveCreatedTime));
         string text3 = string.Format("gm{0}", global::ServerMgr.GamemodeName());
         SteamServer.GameTags = string.Format("mp{0},cp{1},qp{5},v{2}{3},h{4},{6},{7},{8}", new object[]
         {
             ConVar.Server.maxplayers,
             global::BasePlayer.activePlayerList.Count,
             typeof(Protocol).GetFields().Single(x => x.Name == "network").GetRawConstantValue(),
             ConVar.Server.pve ? ",pve" : string.Empty,
             AssemblyHash,
             SingletonComponent <global::ServerMgr> .Instance.connectionQueue.Queued,
             text,
             text2,
             text3
         });
         Interface.CallHook("IOnUpdateServerInformation");
         if (ConVar.Server.description != null && ConVar.Server.description.Length > 100)
         {
             string[] array = ConVar.Server.description.SplitToChunks(100).ToArray <string>();
             Interface.CallHook("IOnUpdateServerDescription");
             for (int i = 0; i < 16; i++)
             {
                 if (i < array.Length)
                 {
                     SteamServer.SetKey(string.Format("description_{0:00}", i), array[i]);
                 }
                 else
                 {
                     SteamServer.SetKey(string.Format("description_{0:00}", i), string.Empty);
                 }
             }
         }
         else
         {
             SteamServer.SetKey("description_0", ConVar.Server.description);
             for (int j = 1; j < 16; j++)
             {
                 SteamServer.SetKey(string.Format("description_{0:00}", j), string.Empty);
             }
         }
         SteamServer.SetKey("hash", AssemblyHash);
         SteamServer.SetKey("world.seed", global::World.Seed.ToString());
         SteamServer.SetKey("world.size", global::World.Size.ToString());
         SteamServer.SetKey("pve", ConVar.Server.pve.ToString());
         SteamServer.SetKey("headerimage", ConVar.Server.headerimage);
         SteamServer.SetKey("url", ConVar.Server.url);
         SteamServer.SetKey("gmn", global::ServerMgr.GamemodeName());
         SteamServer.SetKey("gmt", global::ServerMgr.GamemodeTitle());
         SteamServer.SetKey("gmd", global::ServerMgr.GamemodeDesc());
         SteamServer.SetKey("gmu", global::ServerMgr.GamemodeUrl());
         SteamServer.SetKey("uptime", ((int)UnityEngine.Time.realtimeSinceStartup).ToString());
         SteamServer.SetKey("gc_mb", global::Performance.report.memoryAllocations.ToString());
         SteamServer.SetKey("gc_cl", global::Performance.report.memoryCollections.ToString());
         SteamServer.SetKey("fps", global::Performance.report.frameRate.ToString());
         SteamServer.SetKey("fps_avg", global::Performance.report.frameRateAverage.ToString("0.00"));
         SteamServer.SetKey("ent_cnt", global::BaseNetworkable.serverEntities.Count.ToString());
         SteamServer.SetKey("build", BuildInfo.Current.Scm.ChangeId);
     }
     return(false);
 }
 private void UpdateServerInformation()
 {
     if (Global.get_SteamServer() == null)
     {
         return;
     }
     using (TimeWarning.New(nameof(UpdateServerInformation), 0.1f))
     {
         Global.get_SteamServer().set_ServerName(ConVar.Server.hostname);
         Global.get_SteamServer().set_MaxPlayers(ConVar.Server.maxplayers);
         Global.get_SteamServer().set_Passworded(false);
         Global.get_SteamServer().set_MapName(World.Name);
         string str1 = "stok";
         if (this.Restarting)
         {
             str1 = "strst";
         }
         string str2 = string.Format("born{0}", (object)Epoch.FromDateTime(SaveRestore.SaveCreatedTime));
         string str3 = string.Format("mp{0},cp{1},qp{5},v{2}{3},h{4},{6},{7}", (object)ConVar.Server.maxplayers, (object)BasePlayer.activePlayerList.Count, (object)2161, ConVar.Server.pve ? (object)",pve" : (object)string.Empty, (object)this.AssemblyHash, (object)((ServerMgr)SingletonComponent <ServerMgr> .Instance).connectionQueue.Queued, (object)str1, (object)str2) + ",oxide";
         if (Interface.get_Oxide().get_Config().get_Options().Modded != null)
         {
             str3 += ",modded";
         }
         Global.get_SteamServer().set_GameTags(str3);
         if (ConVar.Server.description != null && ConVar.Server.description.Length > 100)
         {
             string[] array = StringEx.SplitToChunks(ConVar.Server.description, 100).ToArray <string>();
             for (int index = 0; index < 16; ++index)
             {
                 if (index < array.Length)
                 {
                     Global.get_SteamServer().SetKey(string.Format("description_{0:00}", (object)index), array[index]);
                 }
                 else
                 {
                     Global.get_SteamServer().SetKey(string.Format("description_{0:00}", (object)index), string.Empty);
                 }
             }
         }
         else
         {
             Global.get_SteamServer().SetKey("description_0", ConVar.Server.description);
             for (int index = 1; index < 16; ++index)
             {
                 Global.get_SteamServer().SetKey(string.Format("description_{0:00}", (object)index), string.Empty);
             }
         }
         Global.get_SteamServer().SetKey("hash", this.AssemblyHash);
         Facepunch.Steamworks.Server steamServer1 = Global.get_SteamServer();
         uint   num  = World.Seed;
         string str4 = num.ToString();
         steamServer1.SetKey("world.seed", str4);
         Facepunch.Steamworks.Server steamServer2 = Global.get_SteamServer();
         num = World.Size;
         string str5 = num.ToString();
         steamServer2.SetKey("world.size", str5);
         Global.get_SteamServer().SetKey("pve", ConVar.Server.pve.ToString());
         Global.get_SteamServer().SetKey("headerimage", ConVar.Server.headerimage);
         Global.get_SteamServer().SetKey("url", ConVar.Server.url);
         Global.get_SteamServer().SetKey("uptime", ((int)Time.get_realtimeSinceStartup()).ToString());
         Global.get_SteamServer().SetKey("gc_mb", Performance.report.memoryAllocations.ToString());
         Global.get_SteamServer().SetKey("gc_cl", Performance.report.memoryCollections.ToString());
         Global.get_SteamServer().SetKey("fps", Performance.report.frameRate.ToString());
         Global.get_SteamServer().SetKey("fps_avg", Performance.report.frameRateAverage.ToString("0.00"));
         Global.get_SteamServer().SetKey("ent_cnt", BaseNetworkable.serverEntities.Count.ToString());
         Global.get_SteamServer().SetKey("build", BuildInfo.get_Current().get_Scm().get_ChangeId());
     }
 }
Exemple #7
0
 public static IEnumerator Save(string strFilename, bool AndWait = false)
 {
     if (Application.isQuitting == null)
     {
         Stopwatch timerCache = new Stopwatch();
         Stopwatch timerWrite = new Stopwatch();
         Stopwatch timerDisk  = new Stopwatch();
         int       iEnts      = 0;
         timerCache.Start();
         TimeWarning timeWarning = TimeWarning.New("SaveCache", 100L);
         try
         {
             Stopwatch    sw = Stopwatch.StartNew();
             BaseEntity[] baseEntityArray = BaseEntity.saveList.ToArray <BaseEntity>();
             for (int index = 0; index < baseEntityArray.Length; ++index)
             {
                 BaseEntity ent = baseEntityArray[index];
                 if (!Object.op_Equality((Object)ent, (Object)null))
                 {
                     if (ent.IsValid())
                     {
                         try
                         {
                             ent.GetSaveCache();
                         }
                         catch (Exception ex)
                         {
                             Debug.LogException(ex);
                         }
                         if (sw.Elapsed.TotalMilliseconds > 5.0)
                         {
                             if (!AndWait)
                             {
                                 yield return((object)CoroutineEx.waitForEndOfFrame);
                             }
                             sw.Reset();
                             sw.Start();
                         }
                     }
                 }
             }
             baseEntityArray = (BaseEntity[])null;
             sw = (Stopwatch)null;
         }
         finally
         {
             ((IDisposable)timeWarning)?.Dispose();
         }
         timeWarning = (TimeWarning)null;
         timerCache.Stop();
         SaveRestore.SaveBuffer.Position = 0L;
         SaveRestore.SaveBuffer.SetLength(0L);
         timerWrite.Start();
         timeWarning = TimeWarning.New("SaveWrite", 100L);
         try
         {
             BinaryWriter writer = new BinaryWriter((Stream)SaveRestore.SaveBuffer);
             writer.Write((sbyte)83);
             writer.Write((sbyte)65);
             writer.Write((sbyte)86);
             writer.Write((sbyte)82);
             writer.Write((sbyte)68);
             writer.Write(Epoch.FromDateTime(SaveRestore.SaveCreatedTime));
             writer.Write(177U);
             new BaseNetworkable.SaveInfo().forDisk = true;
             if (!AndWait)
             {
                 yield return((object)CoroutineEx.waitForEndOfFrame);
             }
             foreach (BaseEntity save in BaseEntity.saveList)
             {
                 if (Object.op_Equality((Object)save, (Object)null) || save.IsDestroyed)
                 {
                     Debug.LogWarning((object)("Entity is NULL but is still in saveList - not destroyed properly? " + (object)save), (Object)save);
                 }
                 else
                 {
                     MemoryStream memoryStream = (MemoryStream)null;
                     try
                     {
                         memoryStream = save.GetSaveCache();
                     }
                     catch (Exception ex)
                     {
                         Debug.LogException(ex);
                     }
                     if (memoryStream == null || memoryStream.Length <= 0L)
                     {
                         Debug.LogWarningFormat("Skipping saving entity {0} - because {1}", new object[2]
                         {
                             (object)save,
                             memoryStream == null ? (object)"savecache is null" : (object)"savecache is 0"
                         });
                     }
                     else
                     {
                         writer.Write((uint)memoryStream.Length);
                         writer.Write(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
                         ++iEnts;
                     }
                 }
             }
             writer = (BinaryWriter)null;
         }
         finally
         {
             ((IDisposable)timeWarning)?.Dispose();
         }
         timeWarning = (TimeWarning)null;
         timerWrite.Stop();
         if (!AndWait)
         {
             yield return((object)CoroutineEx.waitForEndOfFrame);
         }
         timerDisk.Start();
         using (TimeWarning.New("SaveDisk", 100L))
         {
             try
             {
                 if (File.Exists(strFilename + ".new"))
                 {
                     File.Delete(strFilename + ".new");
                 }
                 try
                 {
                     File.WriteAllBytes(strFilename + ".new", SaveRestore.SaveBuffer.ToArray());
                 }
                 catch (Exception ex)
                 {
                     Debug.LogWarning((object)("Couldn't write save file! We got an exception: " + (object)ex));
                     if (File.Exists(strFilename + ".new"))
                     {
                         File.Delete(strFilename + ".new");
                     }
                 }
                 if (File.Exists(strFilename))
                 {
                     File.Delete(strFilename);
                 }
                 File.Move(strFilename + ".new", strFilename);
             }
             catch (Exception ex)
             {
                 Debug.LogWarning((object)("Error when saving to disk: " + (object)ex));
             }
         }
         timerDisk.Stop();
         Debug.LogFormat("Saved {0} ents, cache({1}), write({2}), disk({3}).", new object[4]
         {
             (object)iEnts.ToString("N0"),
             (object)timerCache.Elapsed.TotalSeconds.ToString("0.00"),
             (object)timerWrite.Elapsed.TotalSeconds.ToString("0.00"),
             (object)timerDisk.Elapsed.TotalSeconds.ToString("0.00")
         });
     }
 }