in src/Cli/func/FunctionsLocalServer.cs [56:109]
private async Task<Uri> RecursiveDiscoverServer(int iteration, bool noInteractive)
{
var server = new Uri($"http://localhost:{Port + iteration}");
if (!await server.IsServerRunningAsync())
{
// create the server
if (_settings.DisplayLaunchingRunServerWarning && !noInteractive)
{
ColoredConsole
.WriteLine()
.WriteLine("We need to launch a server that will host and run your functions.")
.WriteLine("The server will auto load any changes you make to the function.");
string answer = null;
do
{
ColoredConsole
.Write(QuestionColor("Do you want to always display this warning before launching a new server [yes/no]? [yes] "));
answer = Console.ReadLine()?.Trim()?.ToLowerInvariant();
answer = string.IsNullOrEmpty(answer) ? "yes" : answer;
}
while (answer != "yes" && answer != "no");
_settings.DisplayLaunchingRunServerWarning = answer == "yes" ? true : false;
}
// TODO: factor out to PlatformHelper.LaunchInNewConsole and implement for Mac using AppleScript
var exeName = System.Reflection.Assembly.GetEntryAssembly().Location;
var exe = PlatformHelper.IsWindows
? new Executable(exeName, $"host start -p {Port + iteration} --pause-on-error", streamOutput: false, shareConsole: true)
: new Executable("mono", $"{exeName} host start -p {Port + iteration} --pause-on-error", streamOutput: false, shareConsole: false);
exe.RunAsync().Ignore();
await Task.Delay(500);
if (PlatformHelper.IsWindows)
{
ConsoleNativeMethods.GetFocusBack();
}
return server;
}
else
{
if (await IsRightServer(server))
{
return server;
}
else
{
return await RecursiveDiscoverServer(iteration + 1, noInteractive);
}
}
}