sl@17: using System; sl@17: using System.Windows.Forms; sl@19: using System.Collections; sl@20: using System.ServiceModel; sl@21: using System.Collections.Generic; sl@21: using System.Linq; sl@30: using System.Diagnostics; sl@55: using SharpDisplay; sl@17: sl@55: namespace SharpDisplay sl@17: { sl@17: /// sl@55: /// Implement our display services. sl@55: /// Each client connection has such a session object server side. sl@17: /// sl@62: [ServiceBehavior( sl@30: ConcurrencyMode = ConcurrencyMode.Multiple, sl@62: InstanceContextMode = InstanceContextMode.PerSession sl@30: )] sl@55: class Session : IService, IDisposable sl@17: { sl@30: public string SessionId { get; set; } sl@32: public string Name { get; set; } sl@30: sl@55: Session() sl@30: { sl@30: Trace.TraceInformation("Server session opening."); sl@30: //First save our session ID. It will be needed in Dispose cause our OperationContxt won't be available then. sl@30: SessionId = OperationContext.Current.SessionId; sl@55: ICallback callback = OperationContext.Current.GetCallbackChannel(); sl@30: // sl@55: SharpDisplayManager.Program.iMainForm.AddClientThreadSafe(SessionId,callback); sl@30: sl@30: } sl@30: sl@30: public void Dispose() sl@30: { sl@30: Trace.TraceInformation("Server session closing."); sl@55: SharpDisplayManager.Program.iMainForm.RemoveClientThreadSafe(SessionId); sl@30: } sl@17: sl@20: // sl@32: public void SetName(string aClientName) sl@20: { sl@32: Name = aClientName; sl@55: SharpDisplayManager.Program.iMainForm.SetClientNameThreadSafe(SessionId, Name); sl@30: //Disconnect(aClientName); sl@26: sl@26: //Register our client and its callback interface sl@30: //IDisplayServiceCallback callback = OperationContext.Current.GetCallbackChannel(); sl@30: //Program.iMainForm.iClients.Add(aClientName, callback); sl@30: //Program.iMainForm.treeViewClients.Nodes.Add(aClientName, aClientName); sl@21: //For some reason MP still hangs on that one sl@21: //callback.OnConnected(); sl@20: } sl@20: sl@62: public void SetLayout(TableLayout aLayout) sl@62: { sl@62: SharpDisplayManager.Program.iMainForm.SetClientLayoutThreadSafe(SessionId, aLayout); sl@62: } sl@62: sl@75: // sl@75: public void SetField(DataField aField) sl@72: { sl@75: SharpDisplayManager.Program.iMainForm.SetClientFieldThreadSafe(SessionId, aField); sl@72: } sl@72: sl@62: //From IDisplayService sl@74: public void SetFields(System.Collections.Generic.IList aFields) sl@62: { sl@75: SharpDisplayManager.Program.iMainForm.SetClientFieldsThreadSafe(SessionId, aFields); sl@62: } sl@62: sl@26: /// sl@32: public int ClientCount() sl@26: { sl@55: return SharpDisplayManager.Program.iMainForm.iClients.Count; sl@26: } sl@26: sl@62: sl@21: sl@17: } sl@17: sl@17: }