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: }