Actions persistence working.
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; }
47 Trace.TraceInformation("Server session opening.");
48 //First save our session ID. It will be needed in Dispose cause our OperationContxt won't be available then.
49 SessionId = OperationContext.Current.SessionId;
50 ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
52 SharpDisplayManager.Program.iMainForm.AddClientThreadSafe(SessionId,callback);
58 Trace.TraceInformation("Server session closing.");
59 SharpDisplayManager.Program.iMainForm.RemoveClientThreadSafe(SessionId);
63 public void SetName(string aClientName)
66 SharpDisplayManager.Program.iMainForm.SetClientNameThreadSafe(SessionId, Name);
67 //Disconnect(aClientName);
69 //Register our client and its callback interface
70 //IDisplayServiceCallback callback = OperationContext.Current.GetCallbackChannel<IDisplayServiceCallback>();
71 //Program.iMainForm.iClients.Add(aClientName, callback);
72 //Program.iMainForm.treeViewClients.Nodes.Add(aClientName, aClientName);
73 //For some reason MP still hangs on that one
74 //callback.OnConnected();
80 /// <param name="aPriority"></param>
81 public void SetPriority(uint aPriority)
84 SharpDisplayManager.Program.iMainForm.SetClientPriorityThreadSafe(SessionId, Priority);
87 public void SetLayout(TableLayout aLayout)
89 SharpDisplayManager.Program.iMainForm.SetClientLayoutThreadSafe(SessionId, aLayout);
93 public void SetField(DataField aField)
95 SharpDisplayManager.Program.iMainForm.SetClientFieldThreadSafe(SessionId, aField);
98 //From IDisplayService
99 public void SetFields(System.Collections.Generic.IList<DataField> aFields)
101 SharpDisplayManager.Program.iMainForm.SetClientFieldsThreadSafe(SessionId, aFields);
105 public int ClientCount()
107 return SharpDisplayManager.Program.iMainForm.iClients.Count;