From 230917eb7570d2c1adf521ab5aa5dab07e1d767f Mon Sep 17 00:00:00 2001 From: Tucker Date: Fri, 18 Feb 2022 16:08:20 -0500 Subject: [PATCH] Add project files. --- APIServer.cs | 221 +++++++++++++++++++++++++++++++++++++ Amplitude.cs | 23 ++++ Avatar.cs | 14 +++ Config.cs | 163 +++++++++++++++++++++++++++ Config2.cs | 192 ++++++++++++++++++++++++++++++++ ConfigTableEntry.cs | 18 +++ GetCachedLogin.cs | 139 +++++++++++++++++++++++ ImageServer.cs | 67 +++++++++++ LevelProgressionEntry.cs | 18 +++ LoginCached.cs | 93 ++++++++++++++++ MatchmakingConfigParams.cs | 18 +++ NameServer.cs | 59 ++++++++++ Notification.cs | 83 ++++++++++++++ Objective.cs | 19 ++++ OpenRec_.csproj | 18 +++ OpenRec_.sln | 25 +++++ PlatformID.cs | 18 +++ PlayerReputation.cs | 58 ++++++++++ Profiles.cs | 41 +++++++ Program.cs | 87 +++++++++++++++ WebSocket.cs | 32 ++++++ photonConfig.cs | 23 ++++ 22 files changed, 1429 insertions(+) create mode 100644 APIServer.cs create mode 100644 Amplitude.cs create mode 100644 Avatar.cs create mode 100644 Config.cs create mode 100644 Config2.cs create mode 100644 ConfigTableEntry.cs create mode 100644 GetCachedLogin.cs create mode 100644 ImageServer.cs create mode 100644 LevelProgressionEntry.cs create mode 100644 LoginCached.cs create mode 100644 MatchmakingConfigParams.cs create mode 100644 NameServer.cs create mode 100644 Notification.cs create mode 100644 Objective.cs create mode 100644 OpenRec_.csproj create mode 100644 OpenRec_.sln create mode 100644 PlatformID.cs create mode 100644 PlayerReputation.cs create mode 100644 Profiles.cs create mode 100644 Program.cs create mode 100644 WebSocket.cs create mode 100644 photonConfig.cs diff --git a/APIServer.cs b/APIServer.cs new file mode 100644 index 0000000..18bd416 --- /dev/null +++ b/APIServer.cs @@ -0,0 +1,221 @@ +using System; +using System.IO; +using System.Net; +using System.Text; +using System.Threading; +using api; +using api2018; + +namespace server +{ + + internal class APIServer + { + + public APIServer() + { + try + { + Console.WriteLine("APIServer.cs has started."); + new Thread(new ThreadStart(this.StartListen)).Start(); + } + catch (Exception ex) + { + Console.WriteLine("An Exception Occurred while Listening :" + ex.ToString()); + } + } + + + private void StartListen() + { + try + { + this.listener.Prefixes.Add("http://localhost:" + start.Program.version + "/"); + if (start.Program.version == "2016") + { + for (; ; ) + { + this.listener.Start(); + Console.WriteLine("APIServer.cs is listening."); + HttpListenerContext context = this.listener.GetContext(); + HttpListenerRequest request = context.Request; + HttpListenerResponse response = context.Response; + string rawUrl = request.RawUrl; + string Url = ""; + if (rawUrl.StartsWith("/api/")) + { + Url = rawUrl.Remove(0, 5); + } + string text; + string s = ""; + using (StreamReader streamReader = new StreamReader(request.InputStream, request.ContentEncoding)) + { + text = streamReader.ReadToEnd(); + } + if (!(Url == "")) + { + Console.WriteLine("API Requested: " + Url); + } + else + { + Console.WriteLine("API Requested: " + rawUrl); + } + Console.WriteLine("API Data: " + text); + if (Url.StartsWith("versioncheck")) + { + s = VersionCheckResponse; + } + if (Url == ("config/v2")) + { + s = Config2.GetDebugConfig(); + } + Console.WriteLine("API Response: " + s); + byte[] bytes = Encoding.UTF8.GetBytes(s); + response.ContentLength64 = (long)bytes.Length; + Stream outputStream = response.OutputStream; + outputStream.Write(bytes, 0, bytes.Length); + Thread.Sleep(400); + outputStream.Close(); + this.listener.Stop(); + } + } + else if (start.Program.version == "2017") + { + for (; ; ) + { + this.listener.Start(); + Console.WriteLine("APIServer.cs is listening."); + HttpListenerContext context = this.listener.GetContext(); + HttpListenerRequest request = context.Request; + HttpListenerResponse response = context.Response; + string rawUrl = request.RawUrl; + string Url = ""; + if (rawUrl.StartsWith("/api/")) + { + Url = rawUrl.Remove(0, 5); + } + string text; + string s = ""; + using (StreamReader streamReader = new StreamReader(request.InputStream, request.ContentEncoding)) + { + text = streamReader.ReadToEnd(); + } + if (!(Url == "")) + { + Console.WriteLine("API Requested: " + Url); + } + else + { + Console.WriteLine("API Requested: " + rawUrl); + } + Console.WriteLine("API Data: " + text); + if (Url.StartsWith("versioncheck")) + { + s = VersionCheckResponse; + } + if (Url == ("config/v2")) + { + s = Config2.GetDebugConfig(); + } + Console.WriteLine("API Response: " + s); + byte[] bytes = Encoding.UTF8.GetBytes(s); + response.ContentLength64 = (long)bytes.Length; + Stream outputStream = response.OutputStream; + outputStream.Write(bytes, 0, bytes.Length); + Thread.Sleep(400); + outputStream.Close(); + this.listener.Stop(); + } + } + else if (start.Program.version == "2018") + { + for (; ; ) + { + this.listener.Start(); + Console.WriteLine("APIServer.cs is listening."); + HttpListenerContext context = this.listener.GetContext(); + HttpListenerRequest request = context.Request; + HttpListenerResponse response = context.Response; + string rawUrl = request.RawUrl; + string Url = ""; + if (rawUrl.StartsWith("/api/")) + { + Url = rawUrl.Remove(0, 5); + } + if (!(Url == "")) + { + Console.WriteLine("API Requested: " + Url); + } + else + { + Console.WriteLine("API Requested: " + rawUrl); + } + string text; + string s = ""; + using (StreamReader streamReader = new StreamReader(request.InputStream, request.ContentEncoding)) + { + text = streamReader.ReadToEnd(); + } + Console.WriteLine("API Data: " + text); + if (Url.StartsWith("versioncheck")) + { + s = VersionCheckResponse; + } + if (Url == ("config/v2")) + { + s = Config2.GetDebugConfig(); + } + if (Url == "platformlogin/v1/getcachedlogins") + { + s = getcachedlogins.GetDebugLogin(ulong.Parse(text.Remove(0, 32)), ulong.Parse(text.Remove(0, 22))); + CachedPlayerID = ulong.Parse(text.Remove(0, 32)); + CachedPlatformID = ulong.Parse(text.Remove(0, 22)); + } + if (Url == "platformlogin/v1/logincached") + { + s = logincached.loginCache(CachedPlayerID, CachedPlatformID); + } + if (Url == "relationships/v1/bulkignoreplatformusers") + { + s = BlankResponse; + } + if (Url == "config/v1/amplitude") + { + s = Amplitude.amplitude(); + } + if (Url == "images/v2/named") + { + s = BlankResponse; + } + if (Url == "PlayerReporting/v1/moderationBlockDetails") + { + s = ModerationBlockDetails; + } + Console.WriteLine("API Response: " + s); + byte[] bytes = Encoding.UTF8.GetBytes(s); + response.ContentLength64 = (long)bytes.Length; + Stream outputStream = response.OutputStream; + outputStream.Write(bytes, 0, bytes.Length); + Thread.Sleep(400); + outputStream.Close(); + this.listener.Stop(); + } + } + } + catch (Exception ex4) + { + Console.WriteLine(ex4); + File.WriteAllText("crashdump.txt", Convert.ToString(ex4)); + } + } + + public static ulong CachedPlayerID = 1; + public static ulong CachedPlatformID = 10000; + public static string VersionCheckResponse = "{\"ValidVersion\":true}"; + public static string BlankResponse = "[]"; + public static string ModerationBlockDetails = "{\"ReportCategory\":0,\"Duration\":0,\"GameSessionId\":0,\"Message\":\"\"}"; + public static string ImagesV2Named = "[{\"FriendlyImageName\":\"DormRoomBucket\",\"ImageName\":\"OpenRec\",\"StartTime\":\"2021-12-27T21:27:38.1880175-08:00\",\"EndTime\":\"2043-12-27T21:27:38.1880399-08:00\"}"; + + private HttpListener listener = new HttpListener(); + } +} diff --git a/Amplitude.cs b/Amplitude.cs new file mode 100644 index 0000000..f139aa5 --- /dev/null +++ b/Amplitude.cs @@ -0,0 +1,23 @@ +using System; +using Newtonsoft.Json; + +namespace api +{ + // Token: 0x0200005A RID: 90 + internal class Amplitude + { + // Token: 0x0600029D RID: 669 RVA: 0x0000342D File Offset: 0x0000162D + public static string amplitude() + { + return JsonConvert.SerializeObject(new Amplitude + { + AmplitudeKey = "e1693a1003671058b6abc356c8ba8d59" + }); + } + + // Token: 0x170000FF RID: 255 + // (get) Token: 0x0600029F RID: 671 RVA: 0x00003444 File Offset: 0x00001644 + // (set) Token: 0x060002A0 RID: 672 RVA: 0x0000344C File Offset: 0x0000164C + public string AmplitudeKey { get; set; } + } +} diff --git a/Avatar.cs b/Avatar.cs new file mode 100644 index 0000000..229970d --- /dev/null +++ b/Avatar.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace api +{ + class Avatar + { + public string OutfitSelections { get; set; } + public string HairColor { get; set; } + public string SkinColor { get; set; } + public string FaceFeatures { get; set; } + } +} diff --git a/Config.cs b/Config.cs new file mode 100644 index 0000000..f91e418 --- /dev/null +++ b/Config.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Net; + +namespace api +{ + class Config + { + + public static void setup() + { + Console.WriteLine("Setting up..."); + Directory.CreateDirectory("SaveData\\Profile\\"); + if (!(File.Exists("SaveData\\avatar.txt"))) + { + File.Create("SaveData\\avatar.txt"); + } + if (!(File.Exists("SaveData\\Profile\\username.txt"))) + { + File.WriteAllText("SaveData\\Profile\\username.txt", "DefaultUsername"); + } + if (!(File.Exists("SaveData\\profileimage.png"))) + { + File.WriteAllBytes("SaveData\\profileimage.png", new WebClient().DownloadData("https://github.com/OpenRecRoom/OpenRec/raw/main/profileimage.png")); + } + Console.WriteLine("Done!"); + Console.Clear(); + } + + public static Objective[][] dailyObjectives = new Objective[][] + { + new Objective[] + { + new Objective + { + type = 20, + score = 1 + }, + new Objective + { + type = 21, + score = 1 + }, + new Objective + { + type = 22, + score = 1 + } + }, + new Objective[] + { + new Objective + { + type = 20, + score = 1 + }, + new Objective + { + type = 21, + score = 1 + }, + new Objective + { + type = 22, + score = 1 + } + }, + new Objective[] + { + new Objective + { + type = 20, + score = 1 + }, + new Objective + { + type = 21, + score = 1 + }, + new Objective + { + type = 22, + score = 1 + } + }, + new Objective[] + { + new Objective + { + type = 20, + score = 1 + }, + new Objective + { + type = 21, + score = 1 + }, + new Objective + { + type = 22, + score = 1 + } + }, + new Objective[] + { + new Objective + { + type = 20, + score = 1 + }, + new Objective + { + type = 21, + score = 1 + }, + new Objective + { + type = 22, + score = 1 + } + }, + new Objective[] + { + new Objective + { + type = 20, + score = 1 + }, + new Objective + { + type = 21, + score = 1 + }, + new Objective + { + type = 22, + score = 1 + } + }, + new Objective[] + { + new Objective + { + type = 20, + score = 1 + }, + new Objective + { + type = 21, + score = 1 + }, + new Objective + { + type = 22, + score = 1 + } + } + }; + + } +} diff --git a/Config2.cs b/Config2.cs new file mode 100644 index 0000000..54b9414 --- /dev/null +++ b/Config2.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using Newtonsoft.Json; +using api; + +namespace api +{ + // Token: 0x02000013 RID: 19 + internal class Config2 + { + // Token: 0x17000011 RID: 17 + // (get) Token: 0x06000050 RID: 80 RVA: 0x00002215 File Offset: 0x00000415 + // (set) Token: 0x06000051 RID: 81 RVA: 0x0000221D File Offset: 0x0000041D + public string MessageOfTheDay { get; set; } + + // Token: 0x17000012 RID: 18 + // (get) Token: 0x06000052 RID: 82 RVA: 0x00002226 File Offset: 0x00000426 + // (set) Token: 0x06000053 RID: 83 RVA: 0x0000222E File Offset: 0x0000042E + public string CdnBaseUri { get; set; } + + // Token: 0x17000013 RID: 19 + // (get) Token: 0x06000054 RID: 84 RVA: 0x00002237 File Offset: 0x00000437 + // (set) Token: 0x06000055 RID: 85 RVA: 0x0000223F File Offset: 0x0000043F + public List LevelProgressionMaps { get; set; } + + // Token: 0x17000014 RID: 20 + // (get) Token: 0x06000056 RID: 86 RVA: 0x00002248 File Offset: 0x00000448 + // (set) Token: 0x06000057 RID: 87 RVA: 0x00002250 File Offset: 0x00000450 + public MatchmakingConfigParams MatchmakingParams { get; set; } + + // Token: 0x17000015 RID: 21 + // (get) Token: 0x06000058 RID: 88 RVA: 0x00002259 File Offset: 0x00000459 + // (set) Token: 0x06000059 RID: 89 RVA: 0x00002261 File Offset: 0x00000461 + public Objective[][] DailyObjectives { get; set; } + + // Token: 0x17000016 RID: 22 + // (get) Token: 0x0600005A RID: 90 RVA: 0x0000226A File Offset: 0x0000046A + // (set) Token: 0x0600005B RID: 91 RVA: 0x00002272 File Offset: 0x00000472 + public List ConfigTable { get; set; } + + // Token: 0x17000017 RID: 23 + // (get) Token: 0x0600005C RID: 92 RVA: 0x0000227B File Offset: 0x0000047B + // (set) Token: 0x0600005D RID: 93 RVA: 0x00002283 File Offset: 0x00000483 + public photonConfig PhotonConfig { get; set; } + + // Token: 0x0600005E RID: 94 RVA: 0x00005450 File Offset: 0x00003650 + public static string GetDebugConfig() + { + + return JsonConvert.SerializeObject(new Config2 + { + MessageOfTheDay = "Default MOTD", + CdnBaseUri = "http://img.rec.net/", + LevelProgressionMaps = new List + { + new LevelProgressionEntry + { + Level = 0, + RequiredXp = 1 + }, + new LevelProgressionEntry + { + Level = 1, + RequiredXp = 2 + }, + new LevelProgressionEntry + { + Level = 2, + RequiredXp = 3 + }, + new LevelProgressionEntry + { + Level = 3, + RequiredXp = 4 + }, + new LevelProgressionEntry + { + Level = 4, + RequiredXp = 5 + }, + new LevelProgressionEntry + { + Level = 5, + RequiredXp = 6 + }, + new LevelProgressionEntry + { + Level = 6, + RequiredXp = 7 + }, + new LevelProgressionEntry + { + Level = 7, + RequiredXp = 8 + }, + new LevelProgressionEntry + { + Level = 8, + RequiredXp = 9 + }, + new LevelProgressionEntry + { + Level = 9, + RequiredXp = 10 + }, + new LevelProgressionEntry + { + Level = 10, + RequiredXp = 11 + }, + new LevelProgressionEntry + { + Level = 11, + RequiredXp = 12 + }, + new LevelProgressionEntry + { + Level = 12, + RequiredXp = 13 + }, + new LevelProgressionEntry + { + Level = 13, + RequiredXp = 14 + }, + new LevelProgressionEntry + { + Level = 14, + RequiredXp = 15 + }, + new LevelProgressionEntry + { + Level = 15, + RequiredXp = 16 + }, + new LevelProgressionEntry + { + Level = 16, + RequiredXp = 17 + }, + new LevelProgressionEntry + { + Level = 17, + RequiredXp = 18 + }, + new LevelProgressionEntry + { + Level = 18, + RequiredXp = 19 + }, + new LevelProgressionEntry + { + Level = 19, + RequiredXp = 20 + }, + new LevelProgressionEntry + { + Level = 20, + RequiredXp = 21 + } + }, + MatchmakingParams = new MatchmakingConfigParams + { + PreferEmptyRoomsFrequency = 0f, + PreferFullRoomsFrequency = 1f + }, + DailyObjectives = Config.dailyObjectives, + ConfigTable = new List + { + new ConfigTableEntry + { + Key = "Gift.DropChance", + Value = 0.5f.ToString() + }, + new ConfigTableEntry + { + Key = "Gift.XP", + Value = 0.5f.ToString() + } + }, + PhotonConfig = new photonConfig + { + CloudRegion = "us", + CrcCheckEnabled = false, + EnableServerTracingAfterDisconnect = false + } + }); + } + } +} diff --git a/ConfigTableEntry.cs b/ConfigTableEntry.cs new file mode 100644 index 0000000..78f6f81 --- /dev/null +++ b/ConfigTableEntry.cs @@ -0,0 +1,18 @@ +using System; + +namespace api +{ + // Token: 0x02000019 RID: 25 + internal class ConfigTableEntry + { + // Token: 0x17000022 RID: 34 + // (get) Token: 0x0600007A RID: 122 RVA: 0x00002336 File Offset: 0x00000536 + // (set) Token: 0x0600007B RID: 123 RVA: 0x0000233E File Offset: 0x0000053E + public string Key { get; set; } + + // Token: 0x17000023 RID: 35 + // (get) Token: 0x0600007C RID: 124 RVA: 0x00002347 File Offset: 0x00000547 + // (set) Token: 0x0600007D RID: 125 RVA: 0x0000234F File Offset: 0x0000054F + public string Value { get; set; } + } +} \ No newline at end of file diff --git a/GetCachedLogin.cs b/GetCachedLogin.cs new file mode 100644 index 0000000..5d662d4 --- /dev/null +++ b/GetCachedLogin.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; +using api2018; +using System.IO; + +namespace api2018 +{ + // Token: 0x02000076 RID: 118 + public class getcachedlogins + { + // Token: 0x0600033C RID: 828 RVA: 0x00008F30 File Offset: 0x00007130 + public static string GetDebugLogin(ulong userid, ulong platformid) + { + string name = File.ReadAllText("SaveData\\Profile\\username.txt"); + return JsonConvert.SerializeObject(new List + { + new getcachedlogins + { + Id = userid, + Username = name, + DisplayName = name, + XP = 9999, + Level = 10, + RegistrationStatus = 2, + Developer = false, + CanReceiveInvites = false, + ProfileImageName = name, + JuniorProfile = false, + ForceJuniorImages = false, + PendingJunior = false, + HasBirthday = true, + AvoidJuniors = true, + PlayerReputation = new mPlayerReputation + { + Noteriety = 0, + CheerCredit = 20, + CheerGeneral = 10, + CheerHelpful = 10, + CheerGreatHost = 10, + CheerSportsman = 10, + CheerCreative = 10, + SubscriberCount = 0, + SubscribedCount = 0, + SelectedCheer = 0 + }, + PlatformIds = new List + { + new mPlatformID + { + Platform = 0, + PlatformId = platformid + } + } + } + }); + } + + // Token: 0x17000135 RID: 309 + // (get) Token: 0x0600033D RID: 829 RVA: 0x0000395C File Offset: 0x00001B5C + // (set) Token: 0x0600033E RID: 830 RVA: 0x00003964 File Offset: 0x00001B64 + public ulong Id { get; set; } + + // Token: 0x17000136 RID: 310 + // (get) Token: 0x0600033F RID: 831 RVA: 0x0000396D File Offset: 0x00001B6D + // (set) Token: 0x06000340 RID: 832 RVA: 0x00003975 File Offset: 0x00001B75 + public string Username { get; set; } + + // Token: 0x17000137 RID: 311 + // (get) Token: 0x06000341 RID: 833 RVA: 0x0000397E File Offset: 0x00001B7E + // (set) Token: 0x06000342 RID: 834 RVA: 0x00003986 File Offset: 0x00001B86 + public string DisplayName { get; set; } + + // Token: 0x17000138 RID: 312 + // (get) Token: 0x06000343 RID: 835 RVA: 0x0000398F File Offset: 0x00001B8F + // (set) Token: 0x06000344 RID: 836 RVA: 0x00003997 File Offset: 0x00001B97 + public int XP { get; set; } + + // Token: 0x17000139 RID: 313 + // (get) Token: 0x06000345 RID: 837 RVA: 0x000039A0 File Offset: 0x00001BA0 + // (set) Token: 0x06000346 RID: 838 RVA: 0x000039A8 File Offset: 0x00001BA8 + public int Level { get; set; } + + // Token: 0x1700013A RID: 314 + // (get) Token: 0x06000347 RID: 839 RVA: 0x000039B1 File Offset: 0x00001BB1 + // (set) Token: 0x06000348 RID: 840 RVA: 0x000039B9 File Offset: 0x00001BB9 + public int RegistrationStatus { get; set; } + + // Token: 0x1700013B RID: 315 + // (get) Token: 0x06000349 RID: 841 RVA: 0x000039C2 File Offset: 0x00001BC2 + // (set) Token: 0x0600034A RID: 842 RVA: 0x000039CA File Offset: 0x00001BCA + public bool Developer { get; set; } + + // Token: 0x1700013C RID: 316 + // (get) Token: 0x0600034B RID: 843 RVA: 0x000039D3 File Offset: 0x00001BD3 + // (set) Token: 0x0600034C RID: 844 RVA: 0x000039DB File Offset: 0x00001BDB + public bool CanReceiveInvites { get; set; } + + // Token: 0x1700013D RID: 317 + // (get) Token: 0x0600034D RID: 845 RVA: 0x000039E4 File Offset: 0x00001BE4 + // (set) Token: 0x0600034E RID: 846 RVA: 0x000039EC File Offset: 0x00001BEC + public string ProfileImageName { get; set; } + + // Token: 0x1700013E RID: 318 + // (get) Token: 0x0600034F RID: 847 RVA: 0x000039F5 File Offset: 0x00001BF5 + // (set) Token: 0x06000350 RID: 848 RVA: 0x000039FD File Offset: 0x00001BFD + public bool JuniorProfile { get; set; } + + // Token: 0x1700013F RID: 319 + // (get) Token: 0x06000351 RID: 849 RVA: 0x00003A06 File Offset: 0x00001C06 + // (set) Token: 0x06000352 RID: 850 RVA: 0x00003A0E File Offset: 0x00001C0E + public bool ForceJuniorImages { get; set; } + + // Token: 0x17000140 RID: 320 + // (get) Token: 0x06000353 RID: 851 RVA: 0x00003A17 File Offset: 0x00001C17 + // (set) Token: 0x06000354 RID: 852 RVA: 0x00003A1F File Offset: 0x00001C1F + public bool PendingJunior { get; set; } + + // Token: 0x17000141 RID: 321 + // (get) Token: 0x06000355 RID: 853 RVA: 0x00003A28 File Offset: 0x00001C28 + // (set) Token: 0x06000356 RID: 854 RVA: 0x00003A30 File Offset: 0x00001C30 + public bool HasBirthday { get; set; } + + // Token: 0x17000142 RID: 322 + // (get) Token: 0x06000357 RID: 855 RVA: 0x00003A39 File Offset: 0x00001C39 + // (set) Token: 0x06000358 RID: 856 RVA: 0x00003A41 File Offset: 0x00001C41 + public bool AvoidJuniors { get; set; } + + // Token: 0x17000143 RID: 323 + // (get) Token: 0x06000359 RID: 857 RVA: 0x00003A4A File Offset: 0x00001C4A + // (set) Token: 0x0600035A RID: 858 RVA: 0x00003A52 File Offset: 0x00001C52 + public mPlayerReputation PlayerReputation { get; set; } + + // Token: 0x17000144 RID: 324 + // (get) Token: 0x0600035B RID: 859 RVA: 0x00003A5B File Offset: 0x00001C5B + // (set) Token: 0x0600035C RID: 860 RVA: 0x00003A63 File Offset: 0x00001C63 + public List PlatformIds { get; set; } + } +} diff --git a/ImageServer.cs b/ImageServer.cs new file mode 100644 index 0000000..05edbf0 --- /dev/null +++ b/ImageServer.cs @@ -0,0 +1,67 @@ +using System; +using System.IO; +using System.Net; +using System.Text; +using System.Threading; +using api; + +namespace server +{ + // Token: 0x02000050 RID: 80 + internal class ImageServer + { + // Token: 0x06000227 RID: 551 RVA: 0x00006D1C File Offset: 0x00004F1C + public ImageServer() + { + try + { + Console.WriteLine("ImageServer.cs has started."); + new Thread(new ThreadStart(this.StartListen)).Start(); + } + catch (Exception ex) + { + Console.WriteLine("An Exception Occurred while Listening :" + ex.ToString()); + } + } + + // Token: 0x06000228 RID: 552 RVA: 0x00006D84 File Offset: 0x00004F84 + private void StartListen() + { + this.listener.Prefixes.Add("http://localhost:20182/"); + for (; ; ) + { + this.listener.Start(); + Console.WriteLine("ImageServer.cs is listening."); + HttpListenerContext context = this.listener.GetContext(); + HttpListenerRequest request = context.Request; + HttpListenerResponse response = context.Response; + string rawUrl = request.RawUrl; + string text; + byte[] i = File.ReadAllBytes("SaveData\\profileimage.png"); + using (StreamReader streamReader = new StreamReader(request.InputStream, request.ContentEncoding)) + { + text = streamReader.ReadToEnd(); + } + Console.WriteLine("Image Requested: " + rawUrl); + Console.WriteLine("Image Data: " + text); + Console.WriteLine("Image Response: "); + byte[] bytes = i; + response.ContentLength64 = (long)bytes.Length; + Stream outputStream = response.OutputStream; + outputStream.Write(bytes, 0, bytes.Length); + Thread.Sleep(400); + outputStream.Close(); + this.listener.Stop(); + } + } + + + public static string VersionCheckResponse = "{\"ValidVersion\":true}"; + + public static string BlankResponse = ""; + + + // Token: 0x04000192 RID: 402 + private HttpListener listener = new HttpListener(); + } +} diff --git a/LevelProgressionEntry.cs b/LevelProgressionEntry.cs new file mode 100644 index 0000000..0312252 --- /dev/null +++ b/LevelProgressionEntry.cs @@ -0,0 +1,18 @@ +using System; + +namespace api +{ + // Token: 0x02000017 RID: 23 + public class LevelProgressionEntry + { + // Token: 0x1700001E RID: 30 + // (get) Token: 0x06000070 RID: 112 RVA: 0x000022F2 File Offset: 0x000004F2 + // (set) Token: 0x06000071 RID: 113 RVA: 0x000022FA File Offset: 0x000004FA + public int Level { get; set; } + + // Token: 0x1700001F RID: 31 + // (get) Token: 0x06000072 RID: 114 RVA: 0x00002303 File Offset: 0x00000503 + // (set) Token: 0x06000073 RID: 115 RVA: 0x0000230B File Offset: 0x0000050B + public int RequiredXp { get; set; } + } +} diff --git a/LoginCached.cs b/LoginCached.cs new file mode 100644 index 0000000..63a988d --- /dev/null +++ b/LoginCached.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; +using System.IO; + +namespace api2018 +{ + // Token: 0x02000078 RID: 120 + public class logincached + { + // Token: 0x17000145 RID: 325 + // (get) Token: 0x0600035E RID: 862 RVA: 0x00003A6C File Offset: 0x00001C6C + // (set) Token: 0x0600035F RID: 863 RVA: 0x00003A74 File Offset: 0x00001C74 + public string Error { get; set; } + + // Token: 0x17000146 RID: 326 + // (get) Token: 0x06000360 RID: 864 RVA: 0x00003A7D File Offset: 0x00001C7D + // (set) Token: 0x06000361 RID: 865 RVA: 0x00003A85 File Offset: 0x00001C85 + public getcachedlogins Player { get; set; } + + // Token: 0x17000147 RID: 327 + // (get) Token: 0x06000362 RID: 866 RVA: 0x00003A8E File Offset: 0x00001C8E + // (set) Token: 0x06000363 RID: 867 RVA: 0x00003A96 File Offset: 0x00001C96 + public string Token { get; set; } + + // Token: 0x17000148 RID: 328 + // (get) Token: 0x06000364 RID: 868 RVA: 0x00003A9F File Offset: 0x00001C9F + // (set) Token: 0x06000365 RID: 869 RVA: 0x00003AA7 File Offset: 0x00001CA7 + public bool FirstLoginOfTheDay { get; set; } + + // Token: 0x17000149 RID: 329 + // (get) Token: 0x06000366 RID: 870 RVA: 0x00003AB0 File Offset: 0x00001CB0 + // (set) Token: 0x06000367 RID: 871 RVA: 0x00003AB8 File Offset: 0x00001CB8 + public ulong AnalyticsSessionId { get; set; } + + // Token: 0x1700014A RID: 330 + // (get) Token: 0x06000368 RID: 872 RVA: 0x00003AC1 File Offset: 0x00001CC1 + // (set) Token: 0x06000369 RID: 873 RVA: 0x00003AC9 File Offset: 0x00001CC9 + public bool CanUseScreenMode { get; set; } + + // Token: 0x0600036A RID: 874 RVA: 0x00009044 File Offset: 0x00007244 + public static string loginCache(ulong userid, ulong platformid) + { + string name = File.ReadAllText("SaveData\\Profile\\username.txt"); + return JsonConvert.SerializeObject(new logincached + { + Error = "", + Player = new getcachedlogins + { + Id = userid, + Username = name, + DisplayName = name, + XP = 9999, + Level = 10, + RegistrationStatus = 2, + Developer = false, + CanReceiveInvites = false, + ProfileImageName = name, + JuniorProfile = false, + ForceJuniorImages = false, + PendingJunior = false, + HasBirthday = true, + AvoidJuniors = true, + PlayerReputation = new mPlayerReputation + { + Noteriety = 0, + CheerCredit = 20, + CheerGeneral = 10, + CheerHelpful = 10, + CheerGreatHost = 10, + CheerSportsman = 10, + CheerCreative = 10, + SubscriberCount = 0, + SubscribedCount = 0, + SelectedCheer = 0 + }, + PlatformIds = new List + { + new mPlatformID + { + Platform = 0, + PlatformId = platformid + } + } + }, + Token = "NoKeyProvided", + FirstLoginOfTheDay = true, + AnalyticsSessionId = 392394UL, + CanUseScreenMode = true + }); + } + } +} diff --git a/MatchmakingConfigParams.cs b/MatchmakingConfigParams.cs new file mode 100644 index 0000000..0368f2e --- /dev/null +++ b/MatchmakingConfigParams.cs @@ -0,0 +1,18 @@ +using System; + +namespace api +{ + // Token: 0x02000015 RID: 21 + internal class MatchmakingConfigParams + { + // Token: 0x17000019 RID: 25 + // (get) Token: 0x06000064 RID: 100 RVA: 0x0000229D File Offset: 0x0000049D + // (set) Token: 0x06000065 RID: 101 RVA: 0x000022A5 File Offset: 0x000004A5 + public float PreferFullRoomsFrequency { get; set; } + + // Token: 0x1700001A RID: 26 + // (get) Token: 0x06000066 RID: 102 RVA: 0x000022AE File Offset: 0x000004AE + // (set) Token: 0x06000067 RID: 103 RVA: 0x000022B6 File Offset: 0x000004B6 + public float PreferEmptyRoomsFrequency { get; set; } + } +} diff --git a/NameServer.cs b/NameServer.cs new file mode 100644 index 0000000..52cfa9c --- /dev/null +++ b/NameServer.cs @@ -0,0 +1,59 @@ +using System; +using System.IO; +using System.Net; +using System.Text; +using System.Threading; + +namespace server +{ + // Token: 0x02000050 RID: 80 + internal class NameServer + { + // Token: 0x06000227 RID: 551 RVA: 0x00006D1C File Offset: 0x00004F1C + public NameServer() + { + try + { + Console.WriteLine("NameServer.cs has started."); + new Thread(new ThreadStart(this.StartListen)).Start(); + } + catch (Exception ex) + { + Console.WriteLine("An Exception Occurred while Listening :" + ex.ToString()); + } + } + + // Token: 0x06000228 RID: 552 RVA: 0x00006D84 File Offset: 0x00004F84 + private void StartListen() + { + this.listener.Prefixes.Add("http://localhost:20181/"); + for (; ; ) + { + this.listener.Start(); + Console.WriteLine("NameServer.cs is listening."); + HttpListenerContext context = this.listener.GetContext(); + HttpListenerRequest request = context.Request; + HttpListenerResponse response = context.Response; + string rawUrl = request.RawUrl; + string s = ""; + s = "{\"API\":\"http://localhost:2018\",\"Notifications\":\"http://localhost:20161\",\"Images\":\"http://localhost:20182\"}"; + Console.WriteLine("API Response: " + s); + byte[] bytes = Encoding.UTF8.GetBytes(s); + response.ContentLength64 = (long)bytes.Length; + Stream outputStream = response.OutputStream; + outputStream.Write(bytes, 0, bytes.Length); + Thread.Sleep(400); + outputStream.Close(); + this.listener.Stop(); + } + } + + public static string VersionCheckResponse = "{\"ValidVersion\":true}"; + + public static string BlankResponse = ""; + + + // Token: 0x04000192 RID: 402 + private HttpListener listener = new HttpListener(); + } +} diff --git a/Notification.cs b/Notification.cs new file mode 100644 index 0000000..e8146e5 --- /dev/null +++ b/Notification.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace ws +{ + // Token: 0x02000029 RID: 41 + public class Notification + { + // Token: 0x06000104 RID: 260 RVA: 0x00004EF4 File Offset: 0x000030F4 + public static string ProcessRequest(string jsonData) + { + string result; + { + result = jsonData; + } + return result; + } + + // Token: 0x0200002A RID: 42 + public enum ResponseResult + { + // Token: 0x04000091 RID: 145 + RelationshipChanged = 1, + // Token: 0x04000092 RID: 146 + MessageReceived, + // Token: 0x04000093 RID: 147 + MessageDeleted, + // Token: 0x04000094 RID: 148 + PresenceHeartbeatResponse, + // Token: 0x04000095 RID: 149 + SubscriptionListUpdated = 9, + // Token: 0x04000096 RID: 150 + SubscriptionUpdateProfile = 11, + // Token: 0x04000097 RID: 151 + SubscriptionUpdatePresence, + // Token: 0x04000098 RID: 152 + SubscriptionUpdateGameSession, + // Token: 0x04000099 RID: 153 + SubscriptionUpdateRoom, + // Token: 0x0400009A RID: 154 + ModerationQuitGame = 20, + // Token: 0x0400009B RID: 155 + ModerationUpdateRequired, + // Token: 0x0400009C RID: 156 + ModerationKick, + // Token: 0x0400009D RID: 157 + ModerationKickAttemptFailed, + // Token: 0x0400009E RID: 158 + GiftPackageReceived = 30, + // Token: 0x0400009F RID: 159 + ProfileJuniorStatusUpdate = 40, + // Token: 0x040000A0 RID: 160 + RelationshipsInvalid = 50, + // Token: 0x040000A1 RID: 161 + StorefrontBalanceAdd = 60 + } + + // Token: 0x0200002B RID: 43 + public class Reponse + { + // Token: 0x1700005C RID: 92 + // (get) Token: 0x06000106 RID: 262 RVA: 0x000027DA File Offset: 0x000009DA + // (set) Token: 0x06000107 RID: 263 RVA: 0x000027E2 File Offset: 0x000009E2 + public int Id { get; set; } + + // Token: 0x1700005D RID: 93 + // (get) Token: 0x06000108 RID: 264 RVA: 0x000027EB File Offset: 0x000009EB + // (set) Token: 0x06000109 RID: 265 RVA: 0x000027F3 File Offset: 0x000009F3 + public object Msg { get; set; } + + // Token: 0x0600010A RID: 266 RVA: 0x00004FC0 File Offset: 0x000031C0 + public static Notification.Reponse createResponse(int id, object msg) + { + return new Notification.Reponse + { + Id = id, + Msg = msg + }; + } + } + } +} diff --git a/Objective.cs b/Objective.cs new file mode 100644 index 0000000..6343745 --- /dev/null +++ b/Objective.cs @@ -0,0 +1,19 @@ +using System; + +namespace api + +{ + // Token: 0x02000018 RID: 24 + public class Objective + { + // Token: 0x17000020 RID: 32 + // (get) Token: 0x06000075 RID: 117 RVA: 0x00002314 File Offset: 0x00000514 + // (set) Token: 0x06000076 RID: 118 RVA: 0x0000231C File Offset: 0x0000051C + public int type { get; set; } + + // Token: 0x17000021 RID: 33 + // (get) Token: 0x06000077 RID: 119 RVA: 0x00002325 File Offset: 0x00000525 + // (set) Token: 0x06000078 RID: 120 RVA: 0x0000232D File Offset: 0x0000052D + public int score { get; set; } + } +} \ No newline at end of file diff --git a/OpenRec_.csproj b/OpenRec_.csproj new file mode 100644 index 0000000..8446c6a --- /dev/null +++ b/OpenRec_.csproj @@ -0,0 +1,18 @@ + + + + Exe + netcoreapp3.1 + + + + + + + + + ..\..\..\r16server\making new server\websocket-sharp.dll + + + + diff --git a/OpenRec_.sln b/OpenRec_.sln new file mode 100644 index 0000000..3034407 --- /dev/null +++ b/OpenRec_.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31321.278 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenRec_", "OpenRec_.csproj", "{C3C433FC-52FB-4472-81F7-B271A2CDABFE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C3C433FC-52FB-4472-81F7-B271A2CDABFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3C433FC-52FB-4472-81F7-B271A2CDABFE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3C433FC-52FB-4472-81F7-B271A2CDABFE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3C433FC-52FB-4472-81F7-B271A2CDABFE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3C2E49E2-E5D3-47A6-8F3A-5A1DF6A19A06} + EndGlobalSection +EndGlobal diff --git a/PlatformID.cs b/PlatformID.cs new file mode 100644 index 0000000..1fbe1a4 --- /dev/null +++ b/PlatformID.cs @@ -0,0 +1,18 @@ +using System; + +namespace api2018 +{ + // Token: 0x02000037 RID: 55 + public class mPlatformID + { + // Token: 0x17000097 RID: 151 + // (get) Token: 0x0600018E RID: 398 RVA: 0x00002B9F File Offset: 0x00000D9F + // (set) Token: 0x0600018F RID: 399 RVA: 0x00002BA7 File Offset: 0x00000DA7 + public int Platform { get; set; } + + // Token: 0x17000098 RID: 152 + // (get) Token: 0x06000190 RID: 400 RVA: 0x00002BB0 File Offset: 0x00000DB0 + // (set) Token: 0x06000191 RID: 401 RVA: 0x00002BB8 File Offset: 0x00000DB8 + public ulong PlatformId { get; set; } + } +} diff --git a/PlayerReputation.cs b/PlayerReputation.cs new file mode 100644 index 0000000..805d3a4 --- /dev/null +++ b/PlayerReputation.cs @@ -0,0 +1,58 @@ +using System; + +namespace api2018 +{ + // Token: 0x02000036 RID: 54 + public class mPlayerReputation + { + // Token: 0x1700008D RID: 141 + // (get) Token: 0x06000179 RID: 377 RVA: 0x00002AF5 File Offset: 0x00000CF5 + // (set) Token: 0x0600017A RID: 378 RVA: 0x00002AFD File Offset: 0x00000CFD + public int Noteriety { get; set; } + + // Token: 0x1700008E RID: 142 + // (get) Token: 0x0600017B RID: 379 RVA: 0x00002B06 File Offset: 0x00000D06 + // (set) Token: 0x0600017C RID: 380 RVA: 0x00002B0E File Offset: 0x00000D0E + public int CheerGeneral { get; set; } + + // Token: 0x1700008F RID: 143 + // (get) Token: 0x0600017D RID: 381 RVA: 0x00002B17 File Offset: 0x00000D17 + // (set) Token: 0x0600017E RID: 382 RVA: 0x00002B1F File Offset: 0x00000D1F + public int CheerHelpful { get; set; } + + // Token: 0x17000090 RID: 144 + // (get) Token: 0x0600017F RID: 383 RVA: 0x00002B28 File Offset: 0x00000D28 + // (set) Token: 0x06000180 RID: 384 RVA: 0x00002B30 File Offset: 0x00000D30 + public int CheerGreatHost { get; set; } + + // Token: 0x17000091 RID: 145 + // (get) Token: 0x06000181 RID: 385 RVA: 0x00002B39 File Offset: 0x00000D39 + // (set) Token: 0x06000182 RID: 386 RVA: 0x00002B41 File Offset: 0x00000D41 + public int CheerSportsman { get; set; } + + // Token: 0x17000092 RID: 146 + // (get) Token: 0x06000183 RID: 387 RVA: 0x00002B4A File Offset: 0x00000D4A + // (set) Token: 0x06000184 RID: 388 RVA: 0x00002B52 File Offset: 0x00000D52 + public int CheerCreative { get; set; } + + // Token: 0x17000093 RID: 147 + // (get) Token: 0x06000185 RID: 389 RVA: 0x00002B5B File Offset: 0x00000D5B + // (set) Token: 0x06000186 RID: 390 RVA: 0x00002B63 File Offset: 0x00000D63 + public int CheerCredit { get; set; } + + // Token: 0x17000094 RID: 148 + // (get) Token: 0x06000187 RID: 391 RVA: 0x00002B6C File Offset: 0x00000D6C + // (set) Token: 0x06000188 RID: 392 RVA: 0x00002B74 File Offset: 0x00000D74 + public int SubscriberCount { get; set; } + + // Token: 0x17000095 RID: 149 + // (get) Token: 0x06000189 RID: 393 RVA: 0x00002B7D File Offset: 0x00000D7D + // (set) Token: 0x0600018A RID: 394 RVA: 0x00002B85 File Offset: 0x00000D85 + public int SubscribedCount { get; set; } + + // Token: 0x17000096 RID: 150 + // (get) Token: 0x0600018B RID: 395 RVA: 0x00002B8E File Offset: 0x00000D8E + // (set) Token: 0x0600018C RID: 396 RVA: 0x00002B96 File Offset: 0x00000D96 + public int SelectedCheer { get; set; } + } +} diff --git a/Profiles.cs b/Profiles.cs new file mode 100644 index 0000000..c7784d8 --- /dev/null +++ b/Profiles.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace api2016 + +{ + class Profiles + { + + public ulong Id { get; set; } + public string Username { get; set; } + public string DisplayName { get; set; } + public int XP { get; set; } + public int Level { get; set; } + public int Reputation { get; set; } + public bool Verified { get; set; } + + public bool Developer { get; set; } + + + public bool HasEmail { get; set; } + + + public bool CanReceiveInvites { get; set; } + + + public string ProfileImageName { get; set; } + + + public bool JuniorProfile { get; set; } + + + public bool ForceJuniorImages { get; set; } + + + public bool PendingJunior { get; set; } + + public bool HasBirthday { get; set; } + } +} diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..d58b51a --- /dev/null +++ b/Program.cs @@ -0,0 +1,87 @@ +using System; +using server; +using System.IO; +using ws; +using api; + +namespace start +{ + class Program + { + static void Main(string[] args) + { + Config.setup(); + goto Start; + + Start: + Console.WriteLine("OpenRec - Open source RecNet server software."); + Console.WriteLine("1) Modify Settings" + Environment.NewLine + "2) Modify Profile" + Environment.NewLine + "3) Start Server"); + string readline = Console.ReadLine(); + + if (readline == "1") + { + Console.WriteLine("Not yet added in..."); + goto Start; + } + if (readline == "2") + { + goto Start; + Console.Clear(); + Console.WriteLine("1) Change Username" + Environment.NewLine + "2) Go Back"); + string readline3 = Console.ReadLine(); + if (readline3 == "1") + { + Console.Clear(); + Console.WriteLine("Current Username: " + File.ReadAllText("SaveData\\Profile\\username.txt)")); + Console.WriteLine("New Username: "); + string newusername = Console.ReadLine(); + File.WriteAllText("SaveData\\Profile\\username.txt)", newusername); + Console.Clear(); + goto Start; + + } + if (readline3 == "2") + { + Console.Clear(); + goto Start; + + } + } + if (readline == "3") + { + + Console.WriteLine("Please select the version of RecRoom the server should host: (2016, 2017, 2018)"); + string readline2 = Console.ReadLine(); + if (readline2 == "2016") + { + version = "2016"; + Console.Clear(); + Console.WriteLine("Version Selected: " + start.Program.version); + new APIServer(); + new WebSocket(); + } + if (readline2 == "2017") + { + version = "2017"; + Console.Clear(); + Console.WriteLine("Version Selected: " + start.Program.version); + new APIServer(); + new WebSocket(); + } + if (readline2 == "2018") + { + version = "2018"; + Console.Clear(); + Console.WriteLine("Version Selected: " + start.Program.version); + new NameServer(); + new ImageServer(); + new APIServer(); + new WebSocket(); + } + } + } + + public static string version = ""; + } + +} diff --git a/WebSocket.cs b/WebSocket.cs new file mode 100644 index 0000000..6d79805 --- /dev/null +++ b/WebSocket.cs @@ -0,0 +1,32 @@ +using System; +using WebSocketSharp; +using WebSocketSharp.Server; + +namespace ws +{ + // Token: 0x02000008 RID: 8 + internal class WebSocket + { + // Token: 0x06000012 RID: 18 RVA: 0x0000418C File Offset: 0x0000238C + public WebSocket() + { + WebSocketServer webSocketServer = new WebSocketServer(string.Format("ws://localhost:20161")); + webSocketServer.AddWebSocketService("/api/notification/v2"); + webSocketServer.AddWebSocketService("/hub/v1"); + webSocketServer.Start(); + Console.WriteLine("WebSocket.cs has started."); + Console.WriteLine("WebSocket.cs is listening."); + } + + // Token: 0x02000009 RID: 9 + public class NotificationV2 : WebSocketBehavior + { + // Token: 0x06000013 RID: 19 RVA: 0x0000209D File Offset: 0x0000029D + protected override void OnMessage(MessageEventArgs e) + { + Console.WriteLine("WebSocket.cs called for. Not yet implemented."); + base.Send(Notification.ProcessRequest(e.Data)); + } + } + } +} \ No newline at end of file diff --git a/photonConfig.cs b/photonConfig.cs new file mode 100644 index 0000000..47f36d6 --- /dev/null +++ b/photonConfig.cs @@ -0,0 +1,23 @@ +using System; + +namespace api +{ + // Token: 0x02000016 RID: 22 + public class photonConfig + { + // Token: 0x1700001B RID: 27 + // (get) Token: 0x06000069 RID: 105 RVA: 0x000022BF File Offset: 0x000004BF + // (set) Token: 0x0600006A RID: 106 RVA: 0x000022C7 File Offset: 0x000004C7 + public string CloudRegion { get; set; } + + // Token: 0x1700001C RID: 28 + // (get) Token: 0x0600006B RID: 107 RVA: 0x000022D0 File Offset: 0x000004D0 + // (set) Token: 0x0600006C RID: 108 RVA: 0x000022D8 File Offset: 0x000004D8 + public bool CrcCheckEnabled { get; set; } + + // Token: 0x1700001D RID: 29 + // (get) Token: 0x0600006D RID: 109 RVA: 0x000022E1 File Offset: 0x000004E1 + // (set) Token: 0x0600006E RID: 110 RVA: 0x000022E9 File Offset: 0x000004E9 + public bool EnableServerTracingAfterDisconnect { get; set; } + } +} \ No newline at end of file