Skip to content
This repository was archived by the owner on Apr 8, 2020. It is now read-only.

Added OnBeforeStartExternalProcess callback #177

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public NodeServicesOptions()
HostingModel = DefaultNodeHostingModel;
WatchFileExtensions = (string[])DefaultWatchFileExtensions.Clone();
}

public Action<System.Diagnostics.ProcessStartInfo> OnBeforeStartExternalProcess { get; set; }
public NodeHostingModel HostingModel { get; set; }
public Func<INodeInstance> NodeInstanceFactory { get; set; }
public string ProjectPath { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,22 @@ internal class HttpNodeInstance : OutOfProcessNodeInstance
ContractResolver = new CamelCasePropertyNamesContractResolver()
};

private readonly HttpClient _client;
private readonly HttpClient _client;
private bool _disposed;
private int _portNumber;

public HttpNodeInstance(string projectPath, string[] watchFileExtensions, int port = 0)
public HttpNodeInstance(string projectPath, string[] watchFileExtensions, int port = 0, Action<System.Diagnostics.ProcessStartInfo> onBeforeStartExternalProcess = null)
: base(
EmbeddedResourceReader.Read(
typeof(HttpNodeInstance),
"/Content/Node/entrypoint-http.js"),
projectPath,
watchFileExtensions,
MakeCommandLineOptions(port))
MakeCommandLineOptions(port),
onBeforeStartExternalProcess)
{
_client = new HttpClient();
}
}

private static string MakeCommandLineOptions(int port)
{
Expand Down Expand Up @@ -112,18 +113,19 @@ protected override void OnOutputDataReceived(string outputData)
}
}

protected override void Dispose(bool disposing) {
base.Dispose(disposing);
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);

if (!_disposed)
if (!_disposed)
{
if (disposing)
if (disposing)
{
_client.Dispose();
}
_client.Dispose();
}

_disposed = true;
}
}
}
_disposed = true;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,11 @@ public OutOfProcessNodeInstance(
string entryPointScript,
string projectPath,
string[] watchFileExtensions,
string commandLineArguments)
string commandLineArguments,
Action<System.Diagnostics.ProcessStartInfo> onBeforeStartExternalProcess = null)
{
_entryPointScript = new StringAsTempFile(entryPointScript);
_nodeProcess = LaunchNodeProcess(_entryPointScript.FileName, projectPath, commandLineArguments);
_nodeProcess = LaunchNodeProcess(_entryPointScript.FileName, projectPath, commandLineArguments, onBeforeStartExternalProcess);
_watchFileExtensions = watchFileExtensions;
_fileSystemWatcher = BeginFileWatcher(projectPath);
ConnectToInputOutputStreams();
Expand Down Expand Up @@ -111,7 +112,7 @@ private void EnsureFileSystemWatcherIsDisposed()
}
}

private static Process LaunchNodeProcess(string entryPointFilename, string projectPath, string commandLineArguments)
private static Process LaunchNodeProcess(string entryPointFilename, string projectPath, string commandLineArguments, Action<System.Diagnostics.ProcessStartInfo> onBeforeStartExternalProcess)
{
var startInfo = new ProcessStartInfo("node")
{
Expand All @@ -136,6 +137,10 @@ private static Process LaunchNodeProcess(string entryPointFilename, string proje
#else
startInfo.Environment["NODE_PATH"] = nodePathValue;
#endif
if (onBeforeStartExternalProcess != null)
{
onBeforeStartExternalProcess(startInfo);
}

var process = Process.Start(startInfo);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
/// <seealso cref="Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance" />
internal class SocketNodeInstance : OutOfProcessNodeInstance
{
private readonly static JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings
private readonly static JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
Expand All @@ -36,16 +36,17 @@ internal class SocketNodeInstance : OutOfProcessNodeInstance
private string _socketAddress;
private VirtualConnectionClient _virtualConnectionClient;

public SocketNodeInstance(string projectPath, string[] watchFileExtensions, string socketAddress): base(
public SocketNodeInstance(string projectPath, string[] watchFileExtensions, string socketAddress, Action<System.Diagnostics.ProcessStartInfo> onBeforeStartExternalProcess = null) : base(
EmbeddedResourceReader.Read(
typeof(SocketNodeInstance),
"/Content/Node/entrypoint-socket.js"),
projectPath,
watchFileExtensions,
MakeNewCommandLineOptions(socketAddress))
MakeNewCommandLineOptions(socketAddress),
onBeforeStartExternalProcess)
{
_socketAddress = socketAddress;
}
}

protected override async Task<T> InvokeExportAsync<T>(NodeInvocationInfo invocationInfo)
{
Expand Down Expand Up @@ -170,7 +171,7 @@ private static async Task<T> ReadJsonAsync<T>(Stream stream)

private static async Task<byte[]> ReadAllBytesAsync(Stream input)
{
byte[] buffer = new byte[16*1024];
byte[] buffer = new byte[16 * 1024];

using (var ms = new MemoryStream())
{
Expand Down