2 // Copyright (C) 2014-2015 Stéphane Lenclud.
4 // This file is part of SharpDisplayManager.
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.
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.
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/>.
21 using System.Windows.Forms;
22 using System.Collections;
23 using System.ServiceModel;
24 using System.Collections.Generic;
26 using System.Diagnostics;
27 using SharpLib.Display;
29 namespace SharpDisplay
32 /// Implement our display services.
33 /// Each client connection has such a session object server side.
36 ConcurrencyMode = ConcurrencyMode.Multiple,
37 InstanceContextMode = InstanceContextMode.PerSession
39 class Session : IService, IDisposable
41 public string SessionId { get; set; }
42 public string Name { get; set; }
43 public uint Priority { get; set; }
44 public Target Target { get; set; }
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>();
53 SharpDisplayManager.Program.iFormMain.AddClientThreadSafe(SessionId,callback);
59 Trace.TraceInformation("Server session closing.");
60 SharpDisplayManager.Program.iFormMain.RemoveClientThreadSafe(SessionId);
64 public void SetName(string aClientName)
67 SharpDisplayManager.Program.iFormMain.SetClientNameThreadSafe(SessionId, Name);
68 //Disconnect(aClientName);
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();
81 /// <param name="aPriority"></param>
82 public void SetPriority(uint aPriority)
85 SharpDisplayManager.Program.iFormMain.SetClientPriorityThreadSafe(SessionId, Priority);
88 public void SetTarget(Target aTarget)
91 SharpDisplayManager.Program.iFormMain.SetClientTargetThreadSafe(SessionId, Target);
95 public void SetLayout(TableLayout aLayout)
97 SharpDisplayManager.Program.iFormMain.SetClientLayoutThreadSafe(SessionId, aLayout);
101 public void SetField(DataField aField)
103 SharpDisplayManager.Program.iFormMain.SetClientFieldThreadSafe(SessionId, aField);
106 //From IDisplayService
107 public void SetFields(System.Collections.Generic.IList<DataField> aFields)
109 SharpDisplayManager.Program.iFormMain.SetClientFieldsThreadSafe(SessionId, aFields);
113 public int ClientCount()
115 return SharpDisplayManager.Program.iFormMain.iClients.Count;
118 public void TriggerEventsByName(string aName)
120 SharpDisplayManager.Properties.Settings.Default.EarManager.TriggerEventsByName(aName);