Esempio n. 1
0
        private void ExportViewer_Load(object sender, EventArgs e)
        {
            StyleManager.RegisterControls(this);


            Stream s = File.OpenRead(file);


            FLProgram p     = FLSerializer.LoadProgram(s, FLContainer.InstructionSet).Initialize(FLContainer);
            FLBuffer  input = FLContainer.CreateBuffer(512, 512, 1, "Input");

            p.Run(input, true);

            Bitmap bmp = p.GetActiveBitmap();

            pbExportView.Image = bmp;
        }
Esempio n. 2
0
        public void ComputePreview(Action <string, Color> logMessage)
        {
            if (previewPicture != null && (previewTask == null || previewTask.IsCompleted))
            {
                previewTask = new Task(
                    () =>
                {
                    if (FLContainer.SerializedProgram == null)
                    {
                        throw new InvalidOperationException();
                    }

                    FLProgram pro = null;
                    try
                    {
                        pro = FLContainer.SerializedProgram.Initialize(
                            FLContainer
                            );

                        pro.Run(
                            FLContainer.CreateBuffer(
                                Settings().ResX,
                                Settings().ResY,
                                Settings().ResZ,
                                "Preview Buffer"
                                ),
                            true
                            );
                        if (previewPicture != null)
                        {
                            previewPicture.Image = pro.GetActiveBitmap();
                        }

                        pro.FreeResources();
                    }
                    catch (Exception ex)
                    {
                        pro?.FreeResources();
                        if (previewPicture != null)
                        {
                            previewPicture.Image = SystemIcons.Error.ToBitmap();
                        }

                        throw ex;
                    }
                }
                    );
                Task t = new Task(
                    () =>
                {
                    while (!previewTask.IsCompleted)
                    {
                        Thread.Sleep(100);
                    }

                    if (previewTask.IsFaulted)
                    {
                        string s = $"Errors: {previewTask.Exception.InnerExceptions.Count}\n";

                        foreach (Exception exceptionInnerException in previewTask
                                 .Exception.InnerExceptions)
                        {
                            Exception ex = TaskUtils.GetInnerIfAggregate(exceptionInnerException);
                            s           +=
                                $"PROGRAM ERROR:\n\t{ex.Message}\n";
                            if (Settings().LogProgramStacktrace)
                            {
                                s += $"\t\t{ex.StackTrace.Split('\n').Unpack("\n\t\t")}\n";
                            }
                        }

                        logMessage(s, ErrorColor());
                    }
                }
                    );
                previewTask.Start();
                t.Start();
            }
        }
Esempio n. 3
0
        public override void Process(FLRunEndpointWorkItem item)
        {
            if (NextRateClear < DateTime.Now)
            {
                NextRateClear = DateTime.Now + TimeSpan.FromSeconds(Settings.RateLimitIntervalSeconds);
                RateLimits.Clear();
            }

            if (!RateLimits.ContainsKey(item.Request.RemoteEndPoint.ToString()))
            {
                RateLimits[item.Request.RemoteEndPoint.ToString()] = Settings.RateLimit;
            }

            if (RateLimits[item.Request.RemoteEndPoint.ToString()] > 0)
            {
                RateLimits[item.Request.RemoteEndPoint.ToString()]--;
                try
                {
                    SerializableFLProgram prog =
                        Container.Parser.Process(
                            new FLParserInput(
                                "./memfile.fl",
                                item.Source.Split('\n')
                                .Select(x => x.Trim()).ToArray(),
                                true
                                )
                            );

                    FLBuffer inBuffer = Container.CreateBuffer(
                        int.Parse(item.Width),
                        int.Parse(item.Height),
                        1,
                        "input_buffer"
                        );
                    FLProgram program = prog.Initialize(Container);
                    program.Run(inBuffer, true);

                    Bitmap       bmp = program.GetActiveBitmap();
                    MemoryStream ms  = new MemoryStream();
                    bmp.Save(ms, ImageFormat.Png);
                    bmp.Dispose();

                    byte[] result = ms.GetBuffer();

                    StatisticCollector.OnProgramBuilt(item.Source, out string outFilePath);
                    File.WriteAllBytes(outFilePath, result);
                    RunResponseObject rr = new RunResponseObject {
                        OutputData64 = Convert.ToBase64String(result)
                    };
                    item.Serve(rr);
                }
                catch (Exception e)
                {
                    StatisticCollector.OnProgramFailed(item.Source, e);
                    item.Serve(new ExceptionResponseObject(e));
                }
            }
            else
            {
                item.Serve(
                    new ErrorResponseObject(
                        429,
                        $"Rate limit exceeded. Try again in: {Math.Round((NextRateClear - DateTime.Now).TotalSeconds)} seconds"
                        )
                    );
            }
        }