aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Server
diff options
context:
space:
mode:
authorMichael VanOverbeek <[email protected]>2017-04-07 17:07:39 +0000
committerMichael VanOverbeek <[email protected]>2017-04-07 17:07:39 +0000
commit624fc98fa2c695a90704cd768b156342f8403d09 (patch)
tree8e74659544d860568e8e4d535855c0555b8b6ac6 /ShiftOS.Server
parent3d48f3101aa25050e6b219fc1111293273a59fa4 (diff)
downloadshiftos_thereturn-624fc98fa2c695a90704cd768b156342f8403d09.tar.gz
shiftos_thereturn-624fc98fa2c695a90704cd768b156342f8403d09.tar.bz2
shiftos_thereturn-624fc98fa2c695a90704cd768b156342f8403d09.zip
Missing Core.cs
Diffstat (limited to 'ShiftOS.Server')
-rw-r--r--ShiftOS.Server/Core.cs227
1 files changed, 227 insertions, 0 deletions
diff --git a/ShiftOS.Server/Core.cs b/ShiftOS.Server/Core.cs
new file mode 100644
index 0000000..e14ca27
--- /dev/null
+++ b/ShiftOS.Server/Core.cs
@@ -0,0 +1,227 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ShiftOS.Objects;
+using NetSockets;
+using Newtonsoft.Json;
+using System.IO;
+using static ShiftOS.Server.Program;
+
+
+namespace ShiftOS.Server
+{
+ public static class Core
+ {
+ [MudRequest("getguid_reply", typeof(string))]
+ public static void GuidBounce(string guid, object contents)
+ {
+ //The message's GUID was manipulated by the client to send to another client.
+ //So we can just bounce back the message to the other client.
+ server.DispatchTo(new Guid(guid), new NetObject("bounce", new ServerMessage
+ {
+ Name = "getguid_reply",
+ GUID = guid,
+ Contents = contents as string
+ }));
+
+ }
+
+ [MudRequest("getguid_send", typeof(string))]
+ public static void GuidReceiver(string guid, object contents)
+ {
+ string usrname = contents as string;
+ server.DispatchAll(new NetObject("are_you_this_guy", new ServerMessage
+ {
+ Name = "getguid_fromserver",
+ GUID = guid,
+ Contents = usrname,
+ }));
+
+ }
+
+ [MudRequest("script", typeof(Dictionary<string, object>))]
+ public static void RunScript(string guid, object contents)
+ {
+ try
+ {
+ var args = contents as Dictionary<string, object>;
+
+ string user = "";
+ string script = "";
+ string sArgs = "";
+
+ if (!args.ContainsKey("user"))
+ throw new MudException("No 'user' arg specified in message to server");
+
+ if (!args.ContainsKey("script"))
+ throw new MudException("No 'script' arg specified in message to server");
+
+ if (!args.ContainsKey("args"))
+ throw new MudException("No 'args' arg specified in message to server");
+
+ user = args["user"] as string;
+ script = args["script"] as string;
+ sArgs = args["args"] as string;
+
+ if (File.Exists($"scripts/{user}/{script}.lua"))
+ {
+ var script_arguments = JsonConvert.DeserializeObject<Dictionary<string, object>>(sArgs);
+ server.DispatchTo(new Guid(guid), new NetObject("runme", new ServerMessage
+ {
+ Name = "run",
+ GUID = "Server",
+ Contents = JsonConvert.SerializeObject(new
+ {
+ script = File.ReadAllText($"scripts/{user}/{script}.lua"),
+ args = sArgs
+ })
+ }));
+ }
+ else
+ {
+ throw new MudException($"{user}.{script}: Script not found.");
+ }
+ }
+ catch
+ {
+ try
+ {
+ Program.server.DispatchTo(new Guid(guid), new NetObject("error", new ServerMessage
+ {
+ Name = "Error",
+ GUID = "Server",
+ Contents = JsonConvert.SerializeObject(new MudException("<script_runner> Script not found or script error detected."))
+ }));
+ }
+ catch
+ {
+ //fuck.
+ }
+ }
+
+ }
+
+ [MudRequest("diag_log", typeof(string))]
+ public static void Diagnostic(string guid, string line)
+ {
+ List<string> lines = new List<string>();
+ if (File.Exists("diagnostics.log"))
+ lines = new List<string>(File.ReadAllLines("diagnostics.log"));
+
+ lines.Add(line);
+ File.WriteAllLines("diagnostics.log", lines.ToArray());
+ }
+
+ [MudRequest("getusers", typeof(string))]
+ public static void GetAllUsers(string guid, string contents)
+ {
+ List<string> accs = new List<string>();
+ if(contents == "dead")
+ {
+ foreach(var sve in Directory.GetFiles("deadsaves"))
+ {
+ if (sve.EndsWith(".save"))
+ {
+ var save = JsonConvert.DeserializeObject<Save>(File.ReadAllText(sve));
+ accs.Add($"{save.Username}@{save.SystemName}");
+ }
+
+ }
+ }
+ server.DispatchTo(new Guid(guid), new NetObject("h4xx0r", new ServerMessage
+ {
+ Name = "allusers",
+ GUID = "server",
+ Contents = JsonConvert.SerializeObject(accs)
+ }));
+ }
+
+ [MudRequest("mud_save_allow_dead", typeof(Save))]
+ public static void SaveDead(string guid, Save sve)
+ {
+ if(File.Exists("saves/" + sve.Username + ".save"))
+ {
+ WriteEncFile("saves/" + sve.Username + ".save", JsonConvert.SerializeObject(sve));
+ }
+ else if(File.Exists("deadsaves/" + sve.Username + ".save"))
+ {
+ File.WriteAllText("deadsaves/" + sve.Username + ".save", JsonConvert.SerializeObject(sve));
+ }
+ }
+
+ [MudRequest("get_user_data", typeof(Dictionary<string, string>))]
+ public static void GetUserData(string guid, Dictionary<string, string> contents)
+ {
+ string usr = contents["user"];
+ string sys = contents["sysname"];
+
+ foreach(var sve in Directory.GetFiles("deadsaves"))
+ {
+ if (sve.EndsWith(".save"))
+ {
+ var saveFile = JsonConvert.DeserializeObject<Save>(File.ReadAllText(sve));
+ if(saveFile.Username == usr && saveFile.SystemName == sys)
+ {
+ server.DispatchTo(new Guid(guid), new NetObject("1337", new ServerMessage
+ {
+ Name = "user_data",
+ GUID = "server",
+ Contents = JsonConvert.SerializeObject(saveFile)
+ }));
+ return;
+ }
+ }
+ }
+ foreach (var sve in Directory.GetFiles("saves"))
+ {
+ if (sve.EndsWith(".save"))
+ {
+ var saveFile = JsonConvert.DeserializeObject<Save>(ReadEncFile(sve));
+ if (saveFile.Username == usr && saveFile.SystemName == sys)
+ {
+ server.DispatchTo(new Guid(guid), new NetObject("1337", new ServerMessage
+ {
+ Name = "user_data",
+ GUID = "server",
+ Contents = JsonConvert.SerializeObject(saveFile)
+ }));
+ return;
+ }
+ }
+ }
+
+ server.DispatchTo(new Guid(guid), new NetObject("n07_50_1337", new ServerMessage
+ {
+ Name = "user_data_not_found",
+ GUID = "server"
+ }));
+
+ }
+ }
+}