# HG changeset patch
# User sl
# Date 1408003064 -7200
# Node ID a6fb2b2f73b087962146995408e30d7fe4dd8816
# Parent 6f10207a89a8d687cb871ebd2c13ed7fcfc6278a
Adding disconnect function to our interface.
diff -r 6f10207a89a8 -r a6fb2b2f73b0 Client/Client.cs
--- a/Client/Client.cs Thu Aug 14 09:30:14 2014 +0200
+++ b/Client/Client.cs Thu Aug 14 09:57:44 2014 +0200
@@ -14,7 +14,7 @@
///
///
///
- public partial class ClientInput : IDisplayServiceCallback, IDisposable
+ public partial class Callback : IDisplayServiceCallback, IDisposable
{
public void OnConnected()
{
@@ -45,17 +45,26 @@
///
///
///
- public partial class ClientOutput : DuplexClientBase, IDisplayService
+ public partial class Client : DuplexClientBase
{
- public ClientOutput(InstanceContext callbackInstance)
+ private string Name { get; set; }
+
+ public Client(InstanceContext callbackInstance)
: base(callbackInstance, new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8001/DisplayService"))
{ }
public void Connect(string aClientName)
{
+ Name = aClientName;
Channel.Connect(aClientName);
}
+ public void Disconnect()
+ {
+ Channel.Disconnect(Name);
+ Name = "";
+ }
+
public void SetText(int aLineIndex, string aText)
{
Channel.SetText(aLineIndex, aText);
@@ -67,6 +76,5 @@
Channel.SetTexts(aTexts);
}
-
}
}
diff -r 6f10207a89a8 -r a6fb2b2f73b0 Client/MainForm.Designer.cs
--- a/Client/MainForm.Designer.cs Thu Aug 14 09:30:14 2014 +0200
+++ b/Client/MainForm.Designer.cs Thu Aug 14 09:57:44 2014 +0200
@@ -49,6 +49,7 @@
this.Controls.Add(this.buttonSetText);
this.Name = "MainForm";
this.Text = "Sharp Display Client";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.Load += new System.EventHandler(this.MainForm_Load);
this.ResumeLayout(false);
diff -r 6f10207a89a8 -r a6fb2b2f73b0 Client/MainForm.cs
--- a/Client/MainForm.cs Thu Aug 14 09:30:14 2014 +0200
+++ b/Client/MainForm.cs Thu Aug 14 09:57:44 2014 +0200
@@ -15,8 +15,8 @@
{
public partial class MainForm : Form
{
- ClientOutput iClientOutput;
- ClientInput iClientInput;
+ Client iClient;
+ Callback iCallback;
public MainForm()
{
@@ -27,25 +27,34 @@
{
//iClient.SetText(0,"Top");
//iClient.SetText(1, "Bottom");
- iClientOutput.SetTexts(new string[] { "Top", "Bottom" });
+ iClient.SetTexts(new string[] { "Top", "Bottom" });
}
private void MainForm_Load(object sender, EventArgs e)
{
- iClientInput = new ClientInput();
+ iCallback = new Callback();
//Instance context is then managed by our client class
- InstanceContext instanceContext = new InstanceContext(iClientInput);
- iClientOutput = new ClientOutput(instanceContext);
+ InstanceContext instanceContext = new InstanceContext(iCallback);
+ iClient = new Client(instanceContext);
- iClientOutput.Connect("TestClient");
+ iClient.Connect("TestClient");
}
public void CloseConnection()
{
- iClientOutput.Close();
- iClientOutput = null;
- iClientInput = null;
+ iClient.Close();
+ iClient = null;
+ iCallback = null;
+ }
+
+ private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (iClient != null) //Could catch exception instead
+ {
+ iClient.Disconnect();
+ CloseConnection();
+ }
}
}
}
diff -r 6f10207a89a8 -r a6fb2b2f73b0 Interface/Interface.cs
--- a/Interface/Interface.cs Thu Aug 14 09:30:14 2014 +0200
+++ b/Interface/Interface.cs Thu Aug 14 09:57:44 2014 +0200
@@ -17,6 +17,9 @@
void Connect(string aClientName);
[OperationContract(IsOneWay = true)]
+ void Disconnect(string aClientName);
+
+ [OperationContract(IsOneWay = true)]
void SetText(int aLineIndex, string aText);
[OperationContract(IsOneWay = true)]
diff -r 6f10207a89a8 -r a6fb2b2f73b0 Server/Servers.cs
--- a/Server/Servers.cs Thu Aug 14 09:30:14 2014 +0200
+++ b/Server/Servers.cs Thu Aug 14 09:57:44 2014 +0200
@@ -49,19 +49,26 @@
//
public void Connect(string aClientName)
{
+ Disconnect(aClientName);
+
+ //Register our client and its callback interface
IDisplayServiceCallback callback = OperationContext.Current.GetCallbackChannel();
- //remove the old client if any
- if (Program.iMainForm.iClients.Keys.Contains(aClientName))
- {
- Program.iMainForm.iClients.Remove(aClientName);
- }
- //Register our client
Program.iMainForm.iClients.Add(aClientName, callback);
//For some reason MP still hangs on that one
//callback.OnConnected();
}
+ ///
+ public void Disconnect(string aClientName)
+ {
+ //remove the old client if any
+ if (Program.iMainForm.iClients.Keys.Contains(aClientName))
+ {
+ Program.iMainForm.iClients.Remove(aClientName);
+ }
+ }
+
}