126 lines
3.8 KiB
C#
126 lines
3.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using System.Windows.Forms;
|
|
using KGdev.BI3D.Revit.Common;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace KGdev.BI3D.Revit.Addin.MainWindow.External.BrowserConnector
|
|
{
|
|
public class ExternalMainWindow : IMainWindow
|
|
{
|
|
public bool IsVisible
|
|
{
|
|
get
|
|
{
|
|
bool flag = this.browserProcess == null;
|
|
bool flag2;
|
|
if (flag)
|
|
{
|
|
flag2 = false;
|
|
}
|
|
else
|
|
{
|
|
bool hasExited = this.browserProcess.HasExited;
|
|
if (hasExited)
|
|
{
|
|
flag2 = false;
|
|
}
|
|
else
|
|
{
|
|
bool flag3 = this.messageHandler.BrowserHandle == IntPtr.Zero;
|
|
flag2 = !flag3;
|
|
}
|
|
}
|
|
return flag2;
|
|
}
|
|
}
|
|
|
|
public ExternalMainWindow(IReduxReducer reducer)
|
|
{
|
|
this.reducer = reducer;
|
|
reducer.OnStateChanged += this.Reducer_OnStateChanged;
|
|
this.messageHandler.MessageReceivedEvent += this.MessageHandler_MessageReceivedEvent;
|
|
}
|
|
|
|
private void Reducer_OnStateChanged(object sender, Dictionary<string, object> e)
|
|
{
|
|
string text = JsonConvert.SerializeObject(e);
|
|
this.messageHandler.Send(text);
|
|
}
|
|
|
|
private void MessageHandler_MessageReceivedEvent(object sender, MessageReceivedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
string message = e.Message;
|
|
Dictionary<string, object> dictionary = JsonConvert.DeserializeObject<
|
|
Dictionary<string, object>
|
|
>(message);
|
|
this.reducer.Reduce(dictionary);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(
|
|
"Something went wrong when processing the request. Please contact info@kg-dev.be."
|
|
);
|
|
}
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
bool flag = this.browserProcess == null;
|
|
if (!flag)
|
|
{
|
|
bool hasExited = this.browserProcess.HasExited;
|
|
if (!hasExited)
|
|
{
|
|
this.browserProcess.Kill();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Show()
|
|
{
|
|
bool flag = !this.IsVisible;
|
|
if (flag)
|
|
{
|
|
this.CreateNew();
|
|
}
|
|
IntPtr browserHandle = this.messageHandler.BrowserHandle;
|
|
User32.SetForegroundWindow(browserHandle);
|
|
}
|
|
|
|
private void CreateNew()
|
|
{
|
|
Process process = new Process();
|
|
process.StartInfo.FileName = Path.Combine(
|
|
this.assemblyDirectory,
|
|
"KGdev.BI3D.Revit.Addin.MainWindow.External.Browser.exe"
|
|
);
|
|
process.StartInfo.Arguments = string.Format(
|
|
"{0} {1}",
|
|
this.messageHandler.Handle,
|
|
Process.GetCurrentProcess().Id
|
|
);
|
|
process.Start();
|
|
this.browserProcess = process;
|
|
}
|
|
|
|
private const string BROWSER_EXECUTABLE_RELATIVE_PATH =
|
|
"KGdev.BI3D.Revit.Addin.MainWindow.External.Browser.exe";
|
|
|
|
private readonly MessageHandler messageHandler = new MessageHandler();
|
|
|
|
private readonly string assemblyDirectory = Path.GetDirectoryName(
|
|
new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath
|
|
);
|
|
|
|
private Process browserProcess;
|
|
|
|
private IReduxReducer reducer;
|
|
}
|
|
}
|