0 votes

Hello everyone,
CODE STARTS BELOW (i could not get the first part inside the code tags):

public class HTTPServer : Node
{
[Signal]
public delegate void TransferProgressDelegate(string pParams);

Node parent;

public override void _Ready()
{

    parent = GetParent();
    GD.Print(parent); // WORKS, PRINTS [PanelContainer:1189]

    var server = new RestServer();
    server.LogToConsole().Start();
    //server.Start();
}

public string lastProgress;


public void UploadProgress(string pProgress, IHttpContext context)
{
    database s = new database();
    if (lastProgress != pProgress)
    {
        // var headers = s.GetHeaderList(context.Request.Headers);
        // string[] pParams = new string[2] { pProgress, headers["client_id"] };
        // EmitSignal(nameof(TransferProgressDelegate), "test"); // DOES NOT WORK. NO ERRORS AT ALL BUT SIGNAL IS NEVER TRANSMITED TO GDSCRIPT
        // Console.WriteLine(headers["client_id"]); // OUTPUT IS CORRECT
        GD.Print(parent); // DOES NOT WORK IF CALLED FROM "SaveFile". GIVES "object not set to an instance of an object" ERROR

        lastProgress = pProgress; // To slow it down or it crashes
    }

}

public override void _Process(float delta)
{
    UploadProgress("test", null); // WORKS, PRINTS [PanelContainer:1189]
}

private const int ChunkSize = 1024;
public void SaveFile(IHttpContext context, string folder, string file, long totalSize)
{
    try
    {
        long totalCopied = 0;
        using (var input = ((HttpRequest)context.Request).Advanced.InputStream)
        {
            using (var reader = new BinaryReader(input, context.Request.ContentEncoding))
            {
                System.IO.Directory.CreateDirectory(folder);
                using (var output = new BinaryWriter(System.IO.File.Open(file, FileMode.Create)))
                {
                    var lastChunk = 0;
                    var chunk = reader.ReadBytes(ChunkSize);
                    string progress;

                    while (chunk.Length > 0)
                    {

                        totalCopied += ChunkSize;
                        progress = (totalCopied * 100 / totalSize).ToString();
                        UploadProgress(progress, context); // CALLING UPDATEPROGRESS FROM HERE GIVES THE ERROR
                        output.Write(chunk);
                        chunk = reader.ReadBytes(ChunkSize);



                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        GD.Print(ex);
    }

}

If you examine the code above you will see where the error is generated in the comments. I have spent a few hours trying to figure this out but I'm all out of energy at this point. This is probably something related to C# (I'm a total noob in C#) and how it works.
Thank you.

asked Dec 9, 2019 in Engine by zaksnet (14 points)

Please log in or register to answer this question.

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.