make it sortof work

This commit is contained in:
Chris Forbes
2011-01-04 20:52:26 +13:00
parent f44ac769bf
commit f03e6e6258
4 changed files with 26 additions and 10 deletions

View File

@@ -108,7 +108,7 @@ namespace OpenRA.Launcher
string url = args[0]; string url = args[0];
string dest = args[1]; string dest = args[1];
string pipename = UtilityProgram.GetPipeName(); string pipename = UtilityProgram.GetPipeName();
var p = UtilityProgram.Call("--download-url", pipename, url, dest); var p = UtilityProgram.Call("--download-url", pipename, null, url, dest);
Regex r = new Regex(@"(\d{1,3})% (\d+)/(\d+) bytes"); Regex r = new Regex(@"(\d{1,3})% (\d+)/(\d+) bytes");
NamedPipeClientStream pipe = new NamedPipeClientStream(".", pipename, PipeDirection.In); NamedPipeClientStream pipe = new NamedPipeClientStream(".", pipename, PipeDirection.In);

View File

@@ -169,13 +169,22 @@ namespace OpenRA.Launcher
public void httpRequest(string url, string callbackName) public void httpRequest(string url, string callbackName)
{ {
string pipename = UtilityProgram.GetPipeName(); string pipename = UtilityProgram.GetPipeName();
var p = UtilityProgram.Call("--download-url", pipename, url);
var pipe = new NamedPipeClientStream(".", pipename, PipeDirection.In); var pipe = new NamedPipeClientStream(".", pipename, PipeDirection.In);
p.Exited += (_, e) =>
var p = UtilityProgram.Call("--download-url", pipename,
(_, e) =>
{ {
using (var reader = new StreamReader(pipe)) using (var reader = new StreamReader(pipe))
document.InvokeScript(callbackName, new object[] { reader.ReadToEnd() }); {
}; var data = reader.ReadToEnd();
/* debug */
MessageBox.Show(
string.Format("Finished HTTP Request -- {0},{1} => {2}",
url, callbackName, data));
document.InvokeScript(callbackName, new object[] { data });
}
}, url);
pipe.Connect(); pipe.Connect();
} }

View File

@@ -71,13 +71,19 @@ namespace OpenRA.Launcher
return arguments.ToString(); return arguments.ToString();
} }
public static Process Call(string command, string pipename, params string[] args) public static Process Call(string command, string pipename, EventHandler onExit, params string[] args)
{ {
Process p = new Process(); Process p = new Process();
p.StartInfo.FileName = "OpenRA.Utility.exe"; p.StartInfo.FileName = "OpenRA.Utility.exe";
p.StartInfo.Arguments = BuildArgs(command, args) + " --pipe=" + pipename; p.StartInfo.Arguments = BuildArgs(command, args) + " --pipe=" + pipename;
p.StartInfo.UseShellExecute = false; p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true; p.StartInfo.CreateNoWindow = true;
if (onExit != null)
{
p.EnableRaisingEvents = true;
p.Exited += onExit;
}
p.Start(); p.Start();
@@ -87,7 +93,7 @@ namespace OpenRA.Launcher
public static string CallSimpleResponse(string command, params string[] args) public static string CallSimpleResponse(string command, params string[] args)
{ {
string pipename = GetPipeName(); string pipename = GetPipeName();
Call(command, pipename, args); Call(command, pipename, null, args);
string responseString; string responseString;
NamedPipeClientStream pipe = new NamedPipeClientStream(".", pipename, PipeDirection.In); NamedPipeClientStream pipe = new NamedPipeClientStream(".", pipename, PipeDirection.In);
pipe.Connect(); pipe.Connect();

View File

@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Security.Principal; using System.Security.Principal;
using System.IO.Pipes; using System.IO.Pipes;
using System.Security.AccessControl;
namespace OpenRA.Utility namespace OpenRA.Utility
{ {
@@ -56,11 +57,11 @@ namespace OpenRA.Utility
if (principal.IsInRole(WindowsBuiltInRole.Administrator)) if (principal.IsInRole(WindowsBuiltInRole.Administrator))
{ {
var ps = new PipeSecurity(); var ps = new PipeSecurity();
ps.AddAccessRule(new PipeAccessRule("EVERYONE", (PipeAccessRights)2032031, System.Security.AccessControl.AccessControlType.Allow)); ps.AddAccessRule(new PipeAccessRule("EVERYONE", (PipeAccessRights)2032031, AccessControlType.Allow));
pipe = new NamedPipeServerStream(pipename, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.None, 1024, 1024, ps); pipe = new NamedPipeServerStream(pipename, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.None, 1024*1024, 1024*1024, ps);
} }
else else
pipe = new NamedPipeServerStream(pipename, PipeDirection.Out); pipe = new NamedPipeServerStream(pipename, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.None, 1024*1024,1024*1024,null);
pipe.WaitForConnection(); pipe.WaitForConnection();
Console.SetOut(new StreamWriter(pipe) { AutoFlush = true }); Console.SetOut(new StreamWriter(pipe) { AutoFlush = true });