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@22: using SharpDisplayInterface; sl@30: using System.Diagnostics; sl@17: sl@17: namespace SharpDisplayManager sl@17: { sl@17: /// sl@17: /// Implement our display service. sl@17: /// This class is instantiated anew whenever a client send a request. sl@17: /// sl@30: [ServiceBehavior( sl@30: ConcurrencyMode = ConcurrencyMode.Multiple, sl@30: InstanceContextMode = InstanceContextMode.PerSession sl@30: )] sl@30: class DisplayServer : IDisplayService, IDisposable sl@17: { sl@30: public string SessionId { get; set; } sl@32: public string Name { get; set; } sl@30: sl@30: DisplayServer() 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@30: IDisplayServiceCallback callback = OperationContext.Current.GetCallbackChannel(); sl@30: // sl@30: 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@30: Program.iMainForm.RemoveClientThreadSafe(SessionId); sl@30: } sl@30: sl@17: //From IDisplayService sl@19: public void SetTexts(System.Collections.Generic.IList aTexts) sl@19: { sl@34: Program.iMainForm.SetTextsThreadSafe(SessionId, aTexts); sl@19: } sl@22: sl@19: // sl@17: public void SetText(int aLineIndex, string aText) sl@17: { sl@34: Program.iMainForm.SetTextThreadSafe(SessionId, aLineIndex, aText); sl@17: } sl@17: sl@20: // sl@32: public void SetName(string aClientName) sl@20: { sl@32: Name = aClientName; sl@32: 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@26: /// sl@32: public int ClientCount() sl@26: { sl@32: return Program.iMainForm.iClients.Count; sl@26: } sl@26: sl@30: sl@21: sl@17: } sl@17: sl@17: }