|
#region Copyright
// Diagnostic Explorer, a .Net diagnostic toolset
// Copyright (C) 2010 Cameron Elliot
//
// This file is part of Diagnostic Explorer.
//
// Diagnostic Explorer is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Diagnostic Explorer is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Diagnostic Explorer. If not, see <http://www.gnu.org/licenses/>.
//
// http://diagexplorer.sourceforge.net/
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ServiceModel;
using System.Text.RegularExpressions;
using DiagnosticExplorer.Silverlight;
using DiagnosticExplorer.Silverlight.WebServices;
namespace DiagnosticExplorer.Silverlight
{
public partial class App : Application
{
public App()
{
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
internal static DiagnosticWebProxyClient CreateDiagClient()
{
DiagnosticWebProxyClient client = new DiagnosticWebProxyClient();
client.Endpoint.Address = GetEndpointAddress();
return client;
}
public static EndpointAddress GetEndpointAddress()
{
Uri uri = Application.Current.Host.Source;
if (uri == null)
return null;
string addr = Regex.Replace(uri.ToString(), "ClientBin/.*", "Diagnostics.svc");
return new EndpointAddress(addr);
}
private static readonly TimeSpan DefaultRefreshInterval = TimeSpan.FromSeconds(1.5);
public static TimeSpan GetRefreshInterval()
{
IDictionary<string, string> initParams = Application.Current.Host.InitParams;
if (!initParams.ContainsKey("PollTime"))
return DefaultRefreshInterval;
int millis;
if (int.TryParse(initParams["PollTime"], out millis))
return TimeSpan.FromMilliseconds(millis);
return DefaultRefreshInterval;
}
private static readonly TimeSpan DefaultMenuRefresh = TimeSpan.FromSeconds(10);
public static TimeSpan GetMenuRefreshInterval()
{
IDictionary<string, string> initParams = Application.Current.Host.InitParams;
if (!initParams.ContainsKey("MenuRefresh"))
return DefaultMenuRefresh;
int millis;
if (int.TryParse(initParams["MenuRefresh"], out millis))
return TimeSpan.FromMilliseconds(millis);
return DefaultMenuRefresh;
}
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new MainPage();
}
private void Application_Exit(object sender, EventArgs e)
{
}
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
// If the app is running outside of the debugger then report the exception using
// the browser's exception mechanism. On IE this will display it a yellow alert
// icon in the status bar and Firefox will display a script error.
if (!System.Diagnostics.Debugger.IsAttached)
{
// NOTE: This will allow the application to continue running after an exception has been thrown
// but not handled.
// For production applications this error handling should be replaced with something that will
// report the error to the website and stop the application.
e.Handled = true;
Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); });
}
}
private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e)
{
try
{
string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");
System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
}
catch (Exception)
{
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I am a software developer originally from Auckland, New Zealand. I have lived and worked in London since 2005.