diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj
index 069bc6ff6c..7455120871 100644
--- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj
@@ -82,9 +82,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSink.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSink.cs
new file mode 100644
index 0000000000..5065312e6a
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSink.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.Remoting.Channels;
+using System.Windows.Forms;
+using System.Runtime.Remoting.Messaging;
+using System.IO;
+using System.Threading;
+
+namespace CustomSinks
+{
+ class InvokeOnSTAClientChannelSink : BaseChannelSinkWithProperties, IClientFormatterSink
+ {
+ IClientFormatterSink nextSink;
+
+ public InvokeOnSTAClientChannelSink(IClientFormatterSink nextSink)
+ {
+ this.nextSink = nextSink;
+ }
+
+
+ // IClientChannelSink Members
+
+ void IClientChannelSink.AsyncProcessRequest(IClientChannelSinkStack sinkStack, IMessage msg, ITransportHeaders headers, Stream stream)
+ {
+ nextSink.AsyncProcessRequest(sinkStack, msg, headers, stream);
+ }
+
+ void IClientChannelSink.AsyncProcessResponse(IClientResponseChannelSinkStack sinkStack, object state, ITransportHeaders headers, Stream stream)
+ {
+ nextSink.AsyncProcessResponse(sinkStack, state, headers, stream);
+ }
+
+ Stream IClientChannelSink.GetRequestStream(IMessage msg, ITransportHeaders headers)
+ {
+ return nextSink.GetRequestStream(msg, headers);
+ }
+
+ IClientChannelSink IClientChannelSink.NextChannelSink {
+ get {
+ return nextSink;
+ }
+ }
+
+ void IClientChannelSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream)
+ {
+ nextSink.ProcessMessage(msg, requestHeaders, requestStream, out responseHeaders, out responseStream);
+ }
+
+ // IMessageSink Members
+
+ IMessageCtrl IMessageSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)
+ {
+ return nextSink.AsyncProcessMessage(msg, replySink);
+ }
+
+ IMessageSink IMessageSink.NextSink {
+ get {
+ return nextSink;
+ }
+ }
+
+ IMessage IMessageSink.SyncProcessMessage(IMessage msg)
+ {
+ IMessage response = null;
+ Thread thread = new Thread(new ThreadStart(delegate {
+ response = nextSink.SyncProcessMessage(msg);
+ }));
+
+ thread.Start();
+
+ while (thread.IsAlive) Application.DoEvents();
+
+ return response;
+ }
+
+ // IChannelSinkBase Members
+
+ System.Collections.IDictionary IChannelSinkBase.Properties {
+ get {
+ return this.Properties;
+ }
+ }
+}
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSinkProvider.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSinkProvider.cs
new file mode 100644
index 0000000000..ce6302e9f6
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAClientChannelSinkProvider.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.Remoting.Channels;
+using System.Collections;
+
+namespace CustomSinks
+{
+ class InvokeOnSTAClientChannelSinkProvider: IClientChannelSinkProvider
+ {
+ private IClientChannelSinkProvider nextProvider;
+
+ public InvokeOnSTAClientChannelSinkProvider(IDictionary properties, ICollection providerData)
+ {
+ }
+
+ IClientChannelSink IClientChannelSinkProvider.CreateSink(IChannelSender channel, string url, object remoteChannelData)
+ {
+ IClientChannelSink nextSink = nextProvider.CreateSink(channel, url, remoteChannelData);
+ IClientChannelSink thisSink = new InvokeOnSTAClientChannelSink(nextSink as IClientFormatterSink);
+ return thisSink;
+ }
+
+ IClientChannelSinkProvider IClientChannelSinkProvider.Next {
+ get {
+ return nextProvider;
+ }
+ set {
+ nextProvider = value;
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAServerChannelSink.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAServerChannelSink.cs
new file mode 100644
index 0000000000..2ef0a49bfa
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAServerChannelSink.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.Remoting.Channels;
+using System.Windows.Forms;
+using System.Runtime.Remoting.Messaging;
+using System.IO;
+
+namespace CustomSinks
+{
+ class InvokeOnSTAServerChannelSink: BaseChannelSinkWithProperties, IServerChannelSink
+ {
+ IServerChannelSink nextSink;
+
+ public InvokeOnSTAServerChannelSink(IServerChannelSink nextSink)
+ {
+ this.nextSink = nextSink;
+ }
+
+ void IServerChannelSink.AsyncProcessResponse(IServerResponseChannelSinkStack sinkStack, object state, System.Runtime.Remoting.Messaging.IMessage msg, ITransportHeaders headers, System.IO.Stream stream)
+ {
+ nextSink.AsyncProcessResponse(sinkStack, state, msg, headers, stream);
+ }
+
+ System.IO.Stream IServerChannelSink.GetResponseStream(IServerResponseChannelSinkStack sinkStack, object state, System.Runtime.Remoting.Messaging.IMessage msg, ITransportHeaders headers)
+ {
+ return nextSink.GetResponseStream(sinkStack, state, msg, headers);
+ }
+
+ IServerChannelSink IServerChannelSink.NextChannelSink {
+ get {
+ return nextSink;
+ }
+ }
+
+ ServerProcessing IServerChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, System.Runtime.Remoting.Messaging.IMessage requestMsg, ITransportHeaders requestHeaders, System.IO.Stream requestStream, out System.Runtime.Remoting.Messaging.IMessage responseMsg, out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
+ {
+ if (Application.OpenForms.Count > 0) {
+ IMessage outResponseMsg = null;
+ ITransportHeaders outResponseHeaders = null;
+ Stream outResponseStream = null;
+ ServerProcessing returnValue = ServerProcessing.Complete;
+ Application.OpenForms[0].Invoke(new EventHandler(delegate
+ {
+ returnValue = nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out outResponseMsg, out outResponseHeaders, out outResponseStream);
+ }));
+ responseMsg = outResponseMsg;
+ responseHeaders = outResponseHeaders;
+ responseStream = outResponseStream;
+ return returnValue;
+ } else {
+ return nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
+ }
+ }
+
+ System.Collections.IDictionary IChannelSinkBase.Properties {
+ get {
+ return this.Properties;
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAServerChannelSinkProvider.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAServerChannelSinkProvider.cs
new file mode 100644
index 0000000000..49b8be49ac
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTAServerChannelSinkProvider.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.Remoting.Channels;
+using System.Collections;
+
+namespace CustomSinks
+{
+ class InvokeOnSTAServerChannelSinkProvider: IServerChannelSinkProvider
+ {
+ private IServerChannelSinkProvider nextProvider;
+
+ public InvokeOnSTAServerChannelSinkProvider(IDictionary properties, ICollection providerData)
+ {
+ }
+
+ IServerChannelSink IServerChannelSinkProvider.CreateSink(IChannelReceiver channel)
+ {
+ IServerChannelSink nextSink = nextProvider.CreateSink(channel);
+ IServerChannelSink thisSink = new InvokeOnSTAServerChannelSink(nextSink);
+ return thisSink;
+ }
+
+ void IServerChannelSinkProvider.GetChannelData(IChannelDataStore channelData)
+ {
+ }
+
+ IServerChannelSinkProvider IServerChannelSinkProvider.Next {
+ get {
+ return nextProvider;
+ }
+ set {
+ nextProvider = value;
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTASink.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTASink.csproj
new file mode 100644
index 0000000000..2afef0b6b9
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/InvokeOnSTASink/InvokeOnSTASink.csproj
@@ -0,0 +1,33 @@
+
+
+ Library
+ InvokeOnSTASink
+ InvokeOnSTASink
+ Debug
+ AnyCPU
+ {068578FE-412A-48DC-B90C-B7D2B8593DB4}
+
+
+ bin\Debug\
+ false
+ DEBUG;TRACE
+
+
+ bin\Release\
+ true
+ TRACE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/EventForwarder.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/EventForwarder.cs
new file mode 100644
index 0000000000..a826950b08
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/EventForwarder.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CustomSinks
+{
+ public class EventForwarder:MarshalByRefObject
+ {
+ Delegate realEvent;
+
+ public EventForwarder(Delegate realEvent)
+ {
+ this.realEvent = realEvent;
+ }
+
+ public void ForwardEvent0()
+ {
+ realEvent.DynamicInvoke(new object[] {});
+ }
+
+ public void ForwardEvent1(object p1)
+ {
+ realEvent.DynamicInvoke(new object[] { p1});
+ }
+
+ public void ForwardEvent2(object p1, object p2)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2});
+ }
+
+ public void ForwardEvent3(object p1, object p2, object p3)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2, p3});
+ }
+
+ public void ForwardEvent4(object p1, object p2, object p3, object p4)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4});
+ }
+
+ public void ForwardEvent5(object p1, object p2, object p3, object p4, object p5)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5});
+ }
+
+ public void ForwardEvent6(object p1, object p2, object p3, object p4, object p5, object p6)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6});
+ }
+
+ public void ForwardEvent7(object p1, object p2, object p3, object p4, object p5, object p6, object p7)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7});
+ }
+
+ public void ForwardEvent8(object p1, object p2, object p3, object p4, object p5, object p6, object p7, object p8)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8});
+ }
+
+ public void ForwardEvent9(object p1, object p2, object p3, object p4, object p5, object p6, object p7, object p8, object p9)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8, p9});
+ }
+
+ public void ForwardEvent10(object p1, object p2, object p3, object p4, object p5, object p6, object p7, object p8, object p9, object p10)
+ {
+ realEvent.DynamicInvoke(new object[] { p1, p2, p3, p4, p5, p6, p7, p8, p9, p10});
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSink.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSink.cs
new file mode 100644
index 0000000000..28c16d96ea
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSink.cs
@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.Remoting.Channels;
+using System.Windows.Forms;
+using System.Runtime.Remoting.Messaging;
+using System.IO;
+using System.Threading;
+using System.Reflection;
+
+namespace CustomSinks
+{
+ class PrivateEventHandlersClientChannelSink : BaseChannelSinkWithProperties, IClientFormatterSink
+ {
+ IClientFormatterSink nextSink;
+
+ public PrivateEventHandlersClientChannelSink(IClientFormatterSink nextSink)
+ {
+ this.nextSink = nextSink;
+ }
+
+
+ // IClientChannelSink Members
+
+ void IClientChannelSink.AsyncProcessRequest(IClientChannelSinkStack sinkStack, IMessage msg, ITransportHeaders headers, Stream stream)
+ {
+ nextSink.AsyncProcessRequest(sinkStack, msg, headers, stream);
+ }
+
+ void IClientChannelSink.AsyncProcessResponse(IClientResponseChannelSinkStack sinkStack, object state, ITransportHeaders headers, Stream stream)
+ {
+ nextSink.AsyncProcessResponse(sinkStack, state, headers, stream);
+ }
+
+ Stream IClientChannelSink.GetRequestStream(IMessage msg, ITransportHeaders headers)
+ {
+ return nextSink.GetRequestStream(msg, headers);
+ }
+
+ IClientChannelSink IClientChannelSink.NextChannelSink {
+ get {
+ return nextSink;
+ }
+ }
+
+ void IClientChannelSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream)
+ {
+ nextSink.ProcessMessage(msg, requestHeaders, requestStream, out responseHeaders, out responseStream);
+ }
+
+ // IMessageSink Members
+
+ IMessageCtrl IMessageSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)
+ {
+ return nextSink.AsyncProcessMessage(msg, replySink);
+ }
+
+ IMessageSink IMessageSink.NextSink {
+ get {
+ return nextSink;
+ }
+ }
+
+ IMessage IMessageSink.SyncProcessMessage(IMessage msg)
+ {
+ MethodCall methodCall = new MethodCall(msg);
+ if (methodCall.ArgCount > 0 && methodCall.Args[0] is Delegate) {
+ Delegate realDelegate = methodCall.Args[0] as Delegate;
+ Type type = realDelegate.GetType();
+ EventForwarder eventForwarder = new EventForwarder(realDelegate);
+ MethodInfo proxyMethod = typeof(EventForwarder).GetMethod("ForwardEvent" + realDelegate.Method.GetParameters().Length);
+ Delegate proxyDelegate = Delegate.CreateDelegate(type, eventForwarder, proxyMethod);
+ methodCall.Args[0] = proxyDelegate;
+ }
+
+ return nextSink.SyncProcessMessage(methodCall);
+ }
+
+ // IChannelSinkBase Members
+
+ System.Collections.IDictionary IChannelSinkBase.Properties {
+ get {
+ return this.Properties;
+ }
+ }
+}
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSinkProvider.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSinkProvider.cs
new file mode 100644
index 0000000000..0dd4cb7d3e
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersClientChannelSinkProvider.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.Remoting.Channels;
+using System.Collections;
+
+namespace CustomSinks
+{
+ class PrivateEventHandlersClientChannelSinkProvider: IClientChannelSinkProvider
+ {
+ private IClientChannelSinkProvider nextProvider;
+
+ public PrivateEventHandlersClientChannelSinkProvider(IDictionary properties, ICollection providerData)
+ {
+ }
+
+ IClientChannelSink IClientChannelSinkProvider.CreateSink(IChannelSender channel, string url, object remoteChannelData)
+ {
+ IClientChannelSink nextSink = nextProvider.CreateSink(channel, url, remoteChannelData);
+ IClientChannelSink thisSink = new PrivateEventHandlersClientChannelSink(nextSink as IClientFormatterSink);
+ return thisSink;
+ }
+
+ IClientChannelSinkProvider IClientChannelSinkProvider.Next {
+ get {
+ return nextProvider;
+ }
+ set {
+ nextProvider = value;
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersSink.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersSink.csproj
new file mode 100644
index 0000000000..ec828bf252
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/PrivateEventHandlersSink/PrivateEventHandlersSink.csproj
@@ -0,0 +1,31 @@
+
+
+ Library
+ PrivateEventHandlersSink
+ PrivateEventHandlersSink
+ Debug
+ AnyCPU
+ {6AF77F6A-775A-45DF-97B8-AAD76CD4023B}
+
+
+ bin\Debug\
+ false
+ DEBUG;TRACE
+
+
+ bin\Release\
+ true
+ TRACE
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/RemotingSinks.sln b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/RemotingSinks.sln
new file mode 100644
index 0000000000..259e2512c0
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/RemotingSinks.sln
@@ -0,0 +1,14 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# SharpDevelop 2.0.0.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InvokeOnSTASink", "InvokeOnSTASink\InvokeOnSTASink.csproj", "{068578FE-412A-48DC-B90C-B7D2B8593DB4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrivateEventHandlersSink", "PrivateEventHandlersSink\PrivateEventHandlersSink.csproj", "{6AF77F6A-775A-45DF-97B8-AAD76CD4023B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestClient", "TestClient\TestClient.csproj", "{2DDD7699-76DC-492D-85A6-BB3B5CBB5FC3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestCommonTypes", "TestCommonTypes\TestCommonTypes.csproj", "{C2A2838E-E87F-47C3-9440-556875E1BB5E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestServer", "TestServer\TestServer.csproj", "{1EE49A1D-7098-4B75-B174-B36C803EA9EB}"
+EndProject
+Global
+EndGlobal
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/Client.exe.config b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/Client.exe.config
new file mode 100644
index 0000000000..c58a741fca
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/Client.exe.config
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/FormClient.Designer.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/FormClient.Designer.cs
new file mode 100644
index 0000000000..91811187b2
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/FormClient.Designer.cs
@@ -0,0 +1,88 @@
+namespace CustomSinks
+{
+ partial class FormClient
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.buttonSend = new System.Windows.Forms.Button();
+ this.textBoxInput = new System.Windows.Forms.TextBox();
+ this.richTextBoxChat = new System.Windows.Forms.RichTextBox();
+ this.SuspendLayout();
+ //
+ // buttonSend
+ //
+ this.buttonSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.buttonSend.Location = new System.Drawing.Point(184, 158);
+ this.buttonSend.Name = "buttonSend";
+ this.buttonSend.Size = new System.Drawing.Size(75, 23);
+ this.buttonSend.TabIndex = 0;
+ this.buttonSend.Text = "Send";
+ this.buttonSend.Click += new System.EventHandler(this.buttonSend_Click);
+ //
+ // textBoxInput
+ //
+ this.textBoxInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.textBoxInput.Location = new System.Drawing.Point(2, 158);
+ this.textBoxInput.Name = "textBoxInput";
+ this.textBoxInput.Size = new System.Drawing.Size(176, 26);
+ this.textBoxInput.TabIndex = 1;
+ //
+ // richTextBoxChat
+ //
+ this.richTextBoxChat.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.richTextBoxChat.Location = new System.Drawing.Point(2, 2);
+ this.richTextBoxChat.Name = "richTextBoxChat";
+ this.richTextBoxChat.Size = new System.Drawing.Size(257, 150);
+ this.richTextBoxChat.TabIndex = 2;
+ this.richTextBoxChat.Text = "";
+ //
+ // FormClient
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(262, 188);
+ this.Controls.Add(this.richTextBoxChat);
+ this.Controls.Add(this.textBoxInput);
+ this.Controls.Add(this.buttonSend);
+ this.Name = "FormClient";
+ this.Text = "Client";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button buttonSend;
+ private System.Windows.Forms.TextBox textBoxInput;
+ private System.Windows.Forms.RichTextBox richTextBoxChat;
+ }
+}
+
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/FormClient.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/FormClient.cs
new file mode 100644
index 0000000000..1eccb3eacb
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/FormClient.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Runtime.Remoting;
+
+namespace CustomSinks
+{
+ public partial class FormClient : Form
+ {
+ ChatServer chatServer;
+
+ public FormClient()
+ {
+ InitializeComponent();
+ RemotingConfiguration.Configure("Client.exe.config");
+ chatServer = new ChatServer();
+ chatServer.NewMessage +=
+ delegate(object sender, TextMessageEventArgs args)
+ {
+ richTextBoxChat.AppendText(args.Message + "\r\n");
+ };
+ }
+
+ private void buttonSend_Click(object sender, EventArgs e)
+ {
+ chatServer.SendMessage(textBoxInput.Text);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/Program.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/Program.cs
new file mode 100644
index 0000000000..f4bd406abd
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/Program.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using System.Runtime.Remoting;
+using System.Threading;
+
+namespace CustomSinks
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Thread.CurrentThread.Name = "Client (STA)";
+
+ Application.EnableVisualStyles();
+ Application.Run(new FormClient());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/TestClient.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/TestClient.csproj
new file mode 100644
index 0000000000..363dbcfa9e
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestClient/TestClient.csproj
@@ -0,0 +1,53 @@
+
+
+ WinExe
+ TestClient
+ TestClient
+ Debug
+ AnyCPU
+ {2DDD7699-76DC-492D-85A6-BB3B5CBB5FC3}
+
+
+
+
+
+ bin\Debug\
+ false
+ DEBUG;TRACE
+
+
+ bin\Release\
+ true
+ TRACE
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
+ {C2A2838E-E87F-47C3-9440-556875E1BB5E}
+ TestCommonTypes
+
+
+ {6AF77F6A-775A-45DF-97B8-AAD76CD4023B}
+ PrivateEventHandlersSink
+
+
+ {068578FE-412A-48DC-B90C-B7D2B8593DB4}
+ InvokeOnSTASink
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/ChatServer.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/ChatServer.cs
new file mode 100644
index 0000000000..ec76361aed
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/ChatServer.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CustomSinks
+{
+ public class ChatServer: MarshalByRefObject
+ {
+ public event TextMessageEventHandler NewMessage;
+
+ public void SendMessage(string message)
+ {
+ Console.WriteLine("Message received:" + message);
+ if (NewMessage != null) {
+ NewMessage(this, new TextMessageEventArgs(message));
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/TestCommonTypes.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/TestCommonTypes.csproj
new file mode 100644
index 0000000000..308543c6b3
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/TestCommonTypes.csproj
@@ -0,0 +1,29 @@
+
+
+ Library
+ TestCommonTypes
+ TestCommonTypes
+ Debug
+ AnyCPU
+ {C2A2838E-E87F-47C3-9440-556875E1BB5E}
+
+
+ bin\Debug\
+ false
+ DEBUG;TRACE
+
+
+ bin\Release\
+ true
+ TRACE
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/TextMessageEventArgs.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/TextMessageEventArgs.cs
new file mode 100644
index 0000000000..52b8ff478b
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestCommonTypes/TextMessageEventArgs.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CustomSinks
+{
+ public delegate void TextMessageEventHandler (object sender, TextMessageEventArgs args);
+
+ [Serializable]
+ public class TextMessageEventArgs : EventArgs
+ {
+ string message;
+
+ public TextMessageEventArgs(string message)
+ {
+ this.message = message;
+ }
+
+ public string Message {
+ get {
+ return message;
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/Program.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/Program.cs
new file mode 100644
index 0000000000..511cee75b9
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/Program.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.Remoting;
+using System.Threading;
+
+namespace CustomSinks
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Thread.CurrentThread.Name = "Server (STA)";
+
+ RemotingConfiguration.Configure("Server.exe.config");
+
+ Console.WriteLine("Chat server started. Press ENTER to exit.");
+ Console.ReadLine();
+ }
+ }
+}
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/Server.exe.config b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/Server.exe.config
new file mode 100644
index 0000000000..6699708e22
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/Server.exe.config
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/TestServer.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/TestServer.csproj
new file mode 100644
index 0000000000..f6383198d4
--- /dev/null
+++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/RemotingSinks/TestServer/TestServer.csproj
@@ -0,0 +1,46 @@
+
+
+ Exe
+ TestServer
+ TestServer
+ Debug
+ AnyCPU
+ {1EE49A1D-7098-4B75-B174-B36C803EA9EB}
+
+
+ bin\Debug\
+ false
+ DEBUG;TRACE
+
+
+ bin\Release\
+ true
+ TRACE
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
+ {C2A2838E-E87F-47C3-9440-556875E1BB5E}
+ TestCommonTypes
+
+
+ {6AF77F6A-775A-45DF-97B8-AAD76CD4023B}
+ PrivateEventHandlersSink
+
+
+ {068578FE-412A-48DC-B90C-B7D2B8593DB4}
+ InvokeOnSTASink
+
+
+
+
\ No newline at end of file