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; }
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(); } }
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" ) ); } }