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@43: public void SetTexts(System.Collections.Generic.IList aTextFields)
sl@19: {
sl@43: Program.iMainForm.SetTextsThreadSafe(SessionId, aTextFields);
sl@19: }
sl@22:
sl@19: //
sl@43: public void SetText(TextField aTextField)
sl@17: {
sl@43: Program.iMainForm.SetTextThreadSafe(SessionId, aTextField);
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: }