Server/Session.cs
author sl
Fri, 03 Oct 2014 18:43:55 +0200
changeset 65 464486b81635
parent 62 ac698f4e1b36
child 67 6e50baf5a811
permissions -rw-r--r--
Adding current client concept.
     1 using System;
     2 using System.Windows.Forms;
     3 using System.Collections;
     4 using System.ServiceModel;
     5 using System.Collections.Generic;
     6 using System.Linq;
     7 using System.Diagnostics;
     8 using SharpDisplay;
     9 
    10 namespace SharpDisplay
    11 {
    12     /// <summary>
    13     /// Implement our display services.
    14     /// Each client connection has such a session object server side.
    15     /// </summary>
    16     [ServiceBehavior(
    17                         ConcurrencyMode = ConcurrencyMode.Multiple,
    18                         InstanceContextMode = InstanceContextMode.PerSession
    19                     )]
    20     class Session : IService, IDisposable
    21     {
    22         public string SessionId { get; set; }
    23         public string Name { get; set; }
    24 
    25         Session()
    26         {
    27             Trace.TraceInformation("Server session opening.");
    28             //First save our session ID. It will be needed in Dispose cause our OperationContxt won't be available then.
    29             SessionId = OperationContext.Current.SessionId;
    30             ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
    31             //
    32             SharpDisplayManager.Program.iMainForm.AddClientThreadSafe(SessionId,callback);
    33 
    34         }
    35 
    36         public void Dispose()
    37         {
    38             Trace.TraceInformation("Server session closing.");
    39             SharpDisplayManager.Program.iMainForm.RemoveClientThreadSafe(SessionId);
    40         }
    41 
    42         //
    43         public void SetName(string aClientName)
    44         {
    45             Name = aClientName;
    46             SharpDisplayManager.Program.iMainForm.SetClientNameThreadSafe(SessionId, Name);
    47             //Disconnect(aClientName);
    48 
    49             //Register our client and its callback interface
    50             //IDisplayServiceCallback callback = OperationContext.Current.GetCallbackChannel<IDisplayServiceCallback>();
    51             //Program.iMainForm.iClients.Add(aClientName, callback);
    52             //Program.iMainForm.treeViewClients.Nodes.Add(aClientName, aClientName);
    53             //For some reason MP still hangs on that one
    54             //callback.OnConnected();
    55         }
    56 
    57         public void SetLayout(TableLayout aLayout)
    58         {
    59             SharpDisplayManager.Program.iMainForm.SetClientLayoutThreadSafe(SessionId, aLayout);
    60         }
    61 
    62         //From IDisplayService
    63         public void SetTexts(System.Collections.Generic.IList<TextField> aTextFields)
    64         {
    65             SharpDisplayManager.Program.iMainForm.SetClientTextsThreadSafe(SessionId, aTextFields);
    66         }
    67 
    68         //
    69         public void SetText(TextField aTextField)
    70         {
    71             SharpDisplayManager.Program.iMainForm.SetClientTextThreadSafe(SessionId, aTextField);
    72         }
    73 
    74 
    75         ///
    76         public int ClientCount()
    77         {
    78             return SharpDisplayManager.Program.iMainForm.iClients.Count;
    79         }
    80 
    81 
    82 
    83     }
    84 
    85 }