Server/Session.cs
author StephaneLenclud
Mon, 06 Mar 2017 15:11:27 +0100
changeset 282 29b4bdeda281
parent 261 e2729a990e8b
permissions -rw-r--r--
Published v1.4.7.0
Adding back runtime dependencies.
     1 //
     2 // Copyright (C) 2014-2015 Stéphane Lenclud.
     3 //
     4 // This file is part of SharpDisplayManager.
     5 //
     6 // SharpDisplayManager is free software: you can redistribute it and/or modify
     7 // it under the terms of the GNU General Public License as published by
     8 // the Free Software Foundation, either version 3 of the License, or
     9 // (at your option) any later version.
    10 //
    11 // SharpDisplayManager is distributed in the hope that it will be useful,
    12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14 // GNU General Public License for more details.
    15 //
    16 // You should have received a copy of the GNU General Public License
    17 // along with SharpDisplayManager.  If not, see <http://www.gnu.org/licenses/>.
    18 //
    19 
    20 using System;
    21 using System.Windows.Forms;
    22 using System.Collections;
    23 using System.ServiceModel;
    24 using System.Collections.Generic;
    25 using System.Linq;
    26 using System.Diagnostics;
    27 using SharpLib.Display;
    28 
    29 namespace SharpDisplay
    30 {
    31     /// <summary>
    32     /// Implement our display services.
    33     /// Each client connection has such a session object server side.
    34     /// </summary>
    35     [ServiceBehavior(
    36                         ConcurrencyMode = ConcurrencyMode.Multiple,
    37                         InstanceContextMode = InstanceContextMode.PerSession
    38                     )]
    39     class Session : IService, IDisposable
    40     {
    41         public string SessionId { get; set; }
    42         public string Name { get; set; }
    43         public uint Priority { get; set; }
    44         public Target Target { get; set; }
    45 
    46         Session()
    47         {
    48             Trace.TraceInformation("Server session opening.");
    49             //First save our session ID. It will be needed in Dispose cause our OperationContxt won't be available then.
    50             SessionId = OperationContext.Current.SessionId;
    51             ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
    52             //
    53             SharpDisplayManager.Program.iFormMain.AddClientThreadSafe(SessionId,callback);
    54 
    55         }
    56 
    57         public void Dispose()
    58         {
    59             Trace.TraceInformation("Server session closing.");
    60             SharpDisplayManager.Program.iFormMain.RemoveClientThreadSafe(SessionId);
    61         }
    62 
    63         //
    64         public void SetName(string aClientName)
    65         {
    66             Name = aClientName;
    67             SharpDisplayManager.Program.iFormMain.SetClientNameThreadSafe(SessionId, Name);
    68             //Disconnect(aClientName);
    69 
    70             //Register our client and its callback interface
    71             //IDisplayServiceCallback callback = OperationContext.Current.GetCallbackChannel<IDisplayServiceCallback>();
    72             //Program.iFormMain.iClients.Add(aClientName, callback);
    73             //Program.iFormMain.treeViewClients.Nodes.Add(aClientName, aClientName);
    74             //For some reason MP still hangs on that one
    75             //callback.OnConnected();
    76         }
    77 
    78         /// <summary>
    79         /// 
    80         /// </summary>
    81         /// <param name="aPriority"></param>
    82         public void SetPriority(uint aPriority)
    83         {
    84             Priority = aPriority;
    85             SharpDisplayManager.Program.iFormMain.SetClientPriorityThreadSafe(SessionId, Priority);
    86         }
    87 
    88         public void SetTarget(Target aTarget)
    89         {
    90             Target = aTarget;
    91             SharpDisplayManager.Program.iFormMain.SetClientTargetThreadSafe(SessionId, Target);
    92         }
    93 
    94 
    95         public void SetLayout(TableLayout aLayout)
    96         {
    97             SharpDisplayManager.Program.iFormMain.SetClientLayoutThreadSafe(SessionId, aLayout);
    98         }
    99 
   100         //
   101         public void SetField(DataField aField)
   102         {
   103             SharpDisplayManager.Program.iFormMain.SetClientFieldThreadSafe(SessionId, aField);
   104         }
   105 
   106         //From IDisplayService
   107         public void SetFields(System.Collections.Generic.IList<DataField> aFields)
   108         {
   109             SharpDisplayManager.Program.iFormMain.SetClientFieldsThreadSafe(SessionId, aFields);
   110         }
   111 
   112         ///
   113         public int ClientCount()
   114         {
   115             return SharpDisplayManager.Program.iFormMain.iClients.Count;
   116         }
   117 
   118         public void  TriggerEventsByName(string aName)
   119         {
   120             SharpDisplayManager.Properties.Settings.Default.EarManager.TriggerEventsByName(aName);
   121         }
   122 
   123 
   124     }
   125 
   126 }