Skip to content

Commit

Permalink
starting swagger
Browse files Browse the repository at this point in the history
  • Loading branch information
ignatandrei committed May 9, 2020
1 parent 5c3d9ab commit 1f64385
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.FileProviders.Physical;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipelines;
using System.Linq;
Expand Down Expand Up @@ -33,9 +34,18 @@ public static IServiceCollection AddBlockly(this IServiceCollection serviceColle
{
serviceCollection.AddSingleton<GenerateBlocklyFilesHostedService>();
serviceCollection.AddHostedService(p => p.GetService<GenerateBlocklyFilesHostedService>());

return serviceCollection;
}

public static IApplicationBuilder UseBlocklySwagger(this IApplicationBuilder app, string name, string endPoint)
{
var blocklyFilesHostedService =app.
ApplicationServices
.GetService<GenerateBlocklyFilesHostedService>();
blocklyFilesHostedService.AddSwagger(name, endPoint);
return app;
}
/// <summary>
/// use blockly
/// </summary>
Expand All @@ -45,16 +55,18 @@ public static IApplicationBuilder UseBlockly(this IApplicationBuilder app)
{

MapJS(app, "/blocklyDefinitions", b => b.BlocklyTypesDefinition);
MapJS(app, "/BlocklyToolBoxValueDefinitions", b => b.BlocklyToolBoxValueDefinition);
MapJS(app, "/BlocklyToolBoxValueDefinitions", b => b.BlocklyToolBoxValueDefinition);
MapJS(app, "/blocklyAPIFunctions", b => b.BlocklyAPIFunctions);
MapJS(app, "/BlocklyToolBoxFunctionDefinitions", b => b.BlocklyToolBoxFunctionDefinition);
MapJS(app, "/BlocklyToolBoxFunctionDefinitions", b => b.BlocklyToolBoxFunctionDefinition);
MapJS(app, "/BlocklySwaggers", b => b.SwaggersDictionaryJS);
return app;
}
private static void MapJS(IApplicationBuilder app, string url,Func<GenerateBlocklyFilesHostedService,string> content)

private static void MapJS(IApplicationBuilder app, string url, Func<GenerateBlocklyFilesHostedService, string> content)
{
app.Map(url, app =>
{
var blocklyFilesHostedService =
var blocklyFilesHostedService =
app.
ApplicationServices
.GetService<GenerateBlocklyFilesHostedService>();
Expand All @@ -80,7 +92,7 @@ private static void mapFile(string dirName, IFileProvider provider, IApplication
{
if (item.IsDirectory)
{
mapFile(dirName +"/" + item.Name,provider, appBuilder);
mapFile(dirName + "/" + item.Name, provider, appBuilder);
continue;
}
string map = (dirName + "/" + item.Name).Substring("blocklyFiles".Length);
Expand Down Expand Up @@ -117,7 +129,7 @@ public static void UseBlocklyUI(this IApplicationBuilder appBuilder)
{
var manifestEmbeddedProvider =
new ManifestEmbeddedFileProvider(Assembly.GetExecutingAssembly());

mapFile("blocklyFiles", manifestEmbeddedProvider, appBuilder);
}
/// <summary>
Expand All @@ -130,38 +142,38 @@ public static void UseBlocklyLocalStorage(this IApplicationBuilder appBuilder)
}
private static void mapStorage(IApplicationBuilder appBuilder)
{

var manifestEmbeddedProvider =
new ManifestEmbeddedFileProvider(Assembly.GetExecutingAssembly());

appBuilder.Map("/blocklyStorage", app =>
{
app.Run(async cnt=>
{
string nameFile = "extensions/SaveToLocalStorage.js";
IFileInfo f = new PhysicalFileInfo(new FileInfo("wwwroot/"+nameFile));
if (!f.Exists)
{
app.Run(async cnt =>
{
string nameFile = "extensions/SaveToLocalStorage.js";
IFileInfo f = new PhysicalFileInfo(new FileInfo("wwwroot/" + nameFile));
if (!f.Exists)
{
f = manifestEmbeddedProvider.GetFileInfo("blocklyFiles/"+nameFile);
}
f = manifestEmbeddedProvider.GetFileInfo("blocklyFiles/" + nameFile);
}
//TODO: add corect mime type for js files
using var stream = new MemoryStream();
using var cs = f.CreateReadStream();
byte[] buffer = new byte[2048]; // read in chunks of 2KB
using var cs = f.CreateReadStream();
byte[] buffer = new byte[2048]; // read in chunks of 2KB
int bytesRead;
while ((bytesRead = cs.Read(buffer, 0, buffer.Length)) > 0)
{
stream.Write(buffer, 0, bytesRead);
}
byte[] result = stream.ToArray();
while ((bytesRead = cs.Read(buffer, 0, buffer.Length)) > 0)
{
stream.Write(buffer, 0, bytesRead);
}
byte[] result = stream.ToArray();
// TODO: do something with the result
var m = new Memory<byte>(result);
await cnt.Response.BodyWriter.WriteAsync(m);
});
});
await cnt.Response.BodyWriter.WriteAsync(m);
});
});

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

Expand All @@ -14,6 +16,25 @@ namespace NetCore2Blockly
public class GenerateBlocklyFilesHostedService : IHostedService
{

#region swaggers
private Dictionary<string, string> swaggers;

public string SwaggersDictionaryJS
{
get
{
var s = string.Join(Environment.NewLine,
swaggers.Select(it => $@"dictSwagger.push({{key:'{it.Key}',value:'{it.Value}'}});"));

return $@"var dictSwagger=[]; {s}";
}
}
public void AddSwagger(string name, string endpoint)
{
swaggers.Add(name, endpoint);
}

#endregion
/// <summary>
/// The blockly tool box function definition
/// </summary>
Expand Down Expand Up @@ -47,6 +68,7 @@ public class GenerateBlocklyFilesHostedService : IHostedService
public GenerateBlocklyFilesHostedService(IApiDescriptionGroupCollectionProvider api)
{
this.api = api;
this.swaggers = new Dictionary<string, string>();
}
/// <summary>
/// starts
Expand All @@ -71,7 +93,7 @@ private void DoWork(object state)
BlocklyToolBoxFunctionDefinition = blocklyFileGenerator.GenerateBlocklyToolBoxFunctionDefinitionFile();

}

/// <summary>
/// Triggered when the application host is performing a graceful shutdown.
/// </summary>
Expand Down
1 change: 1 addition & 0 deletions src/NetCore2Blockly/TestBlocklyHtml/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
// or copy the blockly.html files and others from wwwroot
app.UseBlocklyUI();
app.UseBlocklyLocalStorage();//this is not necessary , if you use app.UseBlocklyUI();
app.UseBlocklySwagger("heroku", "https://netcoreblockly.herokuapp.com/swagger/v1/swagger.json");
//app.UseBlocklySqliteStorage();
//this is not necessary to be added
app.UseSwagger();
Expand Down
17 changes: 15 additions & 2 deletions src/NetCore2Blockly/TestBlocklyHtml/wwwroot/blockly.html
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ <h1>
<script src="/BlocklyToolBoxValueDefinitions"></script>
<script src="/blocklyAPIFunctions"></script>
<script src="/BlocklyToolBoxFunctionDefinitions"></script>

<script src="/BlocklySwaggers"></script>
<p>
<button onclick="runCode()" id="runButton" style="width:300px">E X E C U T E !</button>

Expand Down Expand Up @@ -183,7 +183,8 @@ <h1>

</category>
<sep></sep>
<category custom="savedBlocks" name="Saved Blocks">
<category name="OtherSwagggers"></category>
<category custom="savedBlocks" name="Saved Blocks" >

</category>

Expand Down Expand Up @@ -968,6 +969,18 @@ <h1>
// TODO: Change ORDER_NONE to the correct strength.
return [code, Blockly.JavaScript.ORDER_NONE];
};
//swagger

window.alert(JSON.stringify(dictSwagger));
var toolbox = document.getElementById('toolbox');
var xmlString = '';
for (var i = 0; i < dictSwagger.length; i++) {
xmlString = `<category name="${dictSwagger[i].key}"></category>`;
}

var html = toolbox.innerHTML.replace('<category name="OtherSwagggers"></category>', xmlString);
toolbox.innerHTML = html;
//end swagger


demoWorkspace = Blockly.inject('blocklyDiv',
Expand Down

0 comments on commit 1f64385

Please sign in to comment.