public void HandleRequest(Request request, Response response) { // check if file exist at folder (need to assume a base local root) var fullPath = "res://public" + Uri.UnescapeDataString(request.uri.LocalPath); // get file extension to add to header var fileExt = System.IO.Path.GetExtension(fullPath); //Debug.Log($"fullPath:{fullPath} fileExt:{fileExt}"); var f = new Godot.File(); // not found if (!f.FileExists(fullPath)) { response.statusCode = 404; response.message = "Not Found"; return; } // serve the file response.statusCode = 200; response.message = "OK"; response.headers.Add("Content-Type", MimeTypeMap.GetMimeType(fileExt)); var ret = f.Open(fullPath, Godot.File.ModeFlags.Read); // read file and set bytes if (ret == Error.Ok) { var length = (int)f.GetLen(); // add content length response.headers.Add("Content-Length", length.ToString()); response.SetBytes(f.GetBuffer(length)); } f.Close(); }
public static byte[] LoadData(string path) { var f = new Godot.File(); f.Open($"res://public/{path}", Godot.File.ModeFlags.Read); var buffer = f.GetBuffer((int)f.GetLen()); f.Close(); return(buffer); }
private static void WriteDataToSaveFile(string target, string justInfo, string serialized, string tempScreenshot) { using (var file = new File()) { file.Open(target, File.ModeFlags.Write); using (Stream gzoStream = new GZipOutputStream(new GodotFileStream(file))) { using (var tar = new TarOutputStream(gzoStream)) { OutputEntry(tar, SAVE_INFO_JSON, Encoding.UTF8.GetBytes(justInfo)); if (tempScreenshot != null) { byte[] data = null; using (var reader = new File()) { reader.Open(tempScreenshot, File.ModeFlags.Read); if (!reader.IsOpen()) { GD.PrintErr("Failed to open temp screenshot for writing to save"); } else { data = reader.GetBuffer((int)reader.GetLen()); } } if (data != null && data.Length > 0) { OutputEntry(tar, SAVE_SCREENSHOT, data); } } OutputEntry(tar, SAVE_SAVE_JSON, Encoding.UTF8.GetBytes(serialized)); } } } }
public override int Read(byte[] buffer, int offset, int count) { var data = file.GetBuffer(count); Array.Copy(data, 0, buffer, offset, data.Length); return data.Length; }
public static void Load(string folder, XElement xml) { Clear(); XML = xml; if (XML.Element("VSwap") != null) { VSwap = VSwap.Load(folder, XML); } if (XML.Element("Maps") != null) { Maps = GameMap.Load(folder, XML); } if (XML.Element("Audio") != null) { AudioT = AudioT.Load(folder, XML); } if (XML.Element("VgaGraph") != null) { VgaGraph = VgaGraph.Load(folder, XML); } Walls = XML.Element("VSwap")?.Element("Walls")?.Elements("Wall").Select(e => ushort.Parse(e.Attribute("Number").Value)).ToArray(); Doors = XML.Element("VSwap")?.Element("Walls")?.Elements("Door")?.Select(e => ushort.Parse(e.Attribute("Number").Value))?.ToArray(); Elevators = XML.Element("VSwap")?.Element("Walls")?.Elements("Elevator")?.Select(e => ushort.Parse(e.Attribute("Number").Value))?.ToArray(); PushWalls = PushWall?.Select(e => ushort.Parse(e.Attribute("Number").Value))?.ToArray(); States.Clear(); foreach (XElement xState in XML?.Element("VSwap")?.Element("Objects")?.Elements("State") ?? Enumerable.Empty <XElement>()) { States.Add(xState.Attribute("Name").Value, new State(xState)); } foreach (State state in States.Values) { if (state.XML.Attribute("Next")?.Value is string next) { state.Next = States[next]; } } Turns.Clear(); foreach (XElement xTurn in XML?.Element("VSwap")?.Element("Objects")?.Elements("Turn") ?? Enumerable.Empty <XElement>()) { Turns.Add((ushort)(int)xTurn.Attribute("Number"), Direction8.From(xTurn.Attribute("Direction"))); } EndStrings = XML?.Element("VgaGraph")?.Element("Menus")?.Elements("EndString")?.Select(a => a.Value)?.ToArray() ?? new string[] { "Sure you want to quit? Y/N" }; if (ushort.TryParse(XML?.Element("VSwap")?.Element("Walls")?.Attribute("FloorCodeFirst")?.Value, out ushort floorCodeFirst)) { FloorCodeFirst = floorCodeFirst; } if (ushort.TryParse(XML?.Element("VSwap")?.Element("Walls")?.Attribute("FloorCodeLast")?.Value, out ushort floorCodeLast)) { FloorCodes = (ushort)(1 + floorCodeLast - FloorCodeFirst); } // Load "extra" IMF/WLF files not included in AudioT Godot.File file = new Godot.File(); foreach (XElement songXML in XML.Element("Audio").Elements("Imf")?.Where(e => e.Attribute("File") is XAttribute)) { if (file.Open(songXML.Attribute("File").Value, Godot.File.ModeFlags.Read) == Godot.Error.Ok && file.IsOpen()) { byte[] bytes = file.GetBuffer((int)file.GetLen()); file.Close(); AudioT.Songs.Add(songXML?.Attribute("Name")?.Value, new Song() { Name = songXML?.Attribute("Name")?.Value, Bytes = bytes, Imf = Imf.ReadImf(new MemoryStream(bytes)), }); } } }