# 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); + } + } + }