Migration to SharpLibDisplay.
authorStephaneLenclud
Fri, 30 Oct 2015 16:45:33 +0100
changeset 171151e11cac3b2
parent 170 f59d913ae7a9
child 172 5be2191d4be3
Migration to SharpLibDisplay.
Client/Client.cs
Client/MainForm.cs
Client/SharpDisplayClient.csproj
Interface/Interface.cs
Interface/Properties/AssemblyInfo.cs
Interface/SharpDisplayInterface.csproj
Server/ClientData.cs
Server/MainForm.cs
Server/Session.cs
Server/SharpDisplayManager.csproj
Server/packages.config
Setup/Setup.vdproj
SharpDisplayManager.sln
     1.1 --- a/Client/Client.cs	Tue Sep 29 18:38:36 2015 +0200
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,325 +0,0 @@
     1.4 -//
     1.5 -// Copyright (C) 2014-2015 Stéphane Lenclud.
     1.6 -//
     1.7 -// This file is part of SharpDisplayManager.
     1.8 -//
     1.9 -// SharpDisplayManager is free software: you can redistribute it and/or modify
    1.10 -// it under the terms of the GNU General Public License as published by
    1.11 -// the Free Software Foundation, either version 3 of the License, or
    1.12 -// (at your option) any later version.
    1.13 -//
    1.14 -// SharpDisplayManager is distributed in the hope that it will be useful,
    1.15 -// but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.16 -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1.17 -// GNU General Public License for more details.
    1.18 -//
    1.19 -// You should have received a copy of the GNU General Public License
    1.20 -// along with SharpDisplayManager.  If not, see <http://www.gnu.org/licenses/>.
    1.21 -//
    1.22 -
    1.23 -using System;
    1.24 -using System.Collections.Generic;
    1.25 -using System.Linq;
    1.26 -using System.Text;
    1.27 -using System.Threading.Tasks;
    1.28 -using System.Windows.Forms;
    1.29 -using SharpDisplay;
    1.30 -using System.ServiceModel;
    1.31 -using System.ServiceModel.Channels;
    1.32 -
    1.33 -
    1.34 -namespace SharpDisplayClient
    1.35 -{
    1.36 -    /// <summary>
    1.37 -    /// Client side Sharp Display callback implementation.
    1.38 -    /// </summary>
    1.39 -    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
    1.40 -    public class Callback : ICallback, IDisposable
    1.41 -    {
    1.42 -        private MainForm MainForm { get; set; }
    1.43 -
    1.44 -        public Callback(MainForm aMainForm)
    1.45 -        {
    1.46 -            MainForm = aMainForm;
    1.47 -        }
    1.48 -
    1.49 -        /// <summary>
    1.50 -        /// Not used I believe.
    1.51 -        /// </summary>
    1.52 -        public void OnConnected()
    1.53 -        {
    1.54 -            //Debug.Assert(Thread.CurrentThread.IsThreadPoolThread);
    1.55 -            //Trace.WriteLine("Callback thread = " + Thread.CurrentThread.ManagedThreadId);
    1.56 -
    1.57 -            MessageBox.Show("OnConnected()", "Client");
    1.58 -        }
    1.59 -
    1.60 -
    1.61 -        public void OnCloseOrder()
    1.62 -        {
    1.63 -            //Debug.Assert(Thread.CurrentThread.IsThreadPoolThread);
    1.64 -            //Trace.WriteLine("Callback thread = " + Thread.CurrentThread.ManagedThreadId);
    1.65 -
    1.66 -            //MessageBox.Show("OnServerClosing()", "Client");
    1.67 -            MainForm.CloseConnectionThreadSafe();
    1.68 -            MainForm.CloseThreadSafe();
    1.69 -        }
    1.70 -
    1.71 -        //From IDisposable
    1.72 -        public void Dispose()
    1.73 -        {
    1.74 -
    1.75 -        }
    1.76 -    }
    1.77 -
    1.78 -
    1.79 -    /// <summary>
    1.80 -    /// Client side implementation of our Sharp Display Service.
    1.81 -    /// </summary>
    1.82 -    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
    1.83 -    public class Client : DuplexClientBase<IService>
    1.84 -    {
    1.85 -        public string SessionId { get { return InnerChannel.SessionId; } }
    1.86 -
    1.87 -        public Client(ICallback aCallback)
    1.88 -            : base(new InstanceContext(aCallback), new NetTcpBinding(SecurityMode.None, true), new EndpointAddress("net.tcp://localhost:8001/DisplayService"))
    1.89 -        { }
    1.90 -
    1.91 -        public void SetName(string aClientName)
    1.92 -        {
    1.93 -            Channel.SetName(aClientName);
    1.94 -        }
    1.95 -
    1.96 -        public void SetLayout(TableLayout aLayout)
    1.97 -        {
    1.98 -            Channel.SetLayout(aLayout);
    1.99 -        }
   1.100 -
   1.101 -        public void SetField(DataField aField)
   1.102 -        {
   1.103 -            Channel.SetField(aField);
   1.104 -        }
   1.105 -
   1.106 -        public void SetFields(System.Collections.Generic.IList<DataField> aFields)
   1.107 -        {
   1.108 -            Channel.SetFields(aFields);
   1.109 -        }
   1.110 -
   1.111 -        public int ClientCount()
   1.112 -        {
   1.113 -            return Channel.ClientCount();
   1.114 -        }
   1.115 -
   1.116 -        public bool IsReady()
   1.117 -        {
   1.118 -            return State == CommunicationState.Opened || State == CommunicationState.Created;
   1.119 -        }
   1.120 -    }
   1.121 -
   1.122 -
   1.123 -    /// <summary>
   1.124 -    /// Handle connection with our Sharp Display Server.
   1.125 -    /// If the connection is faulted it will attempt to restart it.
   1.126 -    /// </summary>
   1.127 -    public class DisplayClient
   1.128 -    {
   1.129 -        private Client iClient;
   1.130 -        private Callback iCallback;
   1.131 -        private bool resetingConnection = false;
   1.132 -
   1.133 -        private MainForm MainForm { get; set; }
   1.134 -        public string SessionId { get { return iClient.SessionId; } }
   1.135 -        public string Name { get; private set; }
   1.136 -        private TableLayout Layout { get; set; }
   1.137 -        private System.Collections.Generic.IList<DataField> Fields { get; set; }
   1.138 -
   1.139 -
   1.140 -        public DisplayClient(MainForm aMainForm)
   1.141 -        {
   1.142 -            MainForm = aMainForm;
   1.143 -            Name = "";
   1.144 -            Fields = new DataField[]{};
   1.145 -        }
   1.146 -
   1.147 -        /// <summary>
   1.148 -        /// Initialize our server connection.
   1.149 -        /// </summary>
   1.150 -        public void Open()
   1.151 -        {
   1.152 -            iCallback = new Callback(MainForm);
   1.153 -            iClient = new Client(iCallback);
   1.154 -        }
   1.155 -
   1.156 -        /// <summary>
   1.157 -        /// Terminate our server connection.
   1.158 -        /// </summary>
   1.159 -        public void Close()
   1.160 -        {
   1.161 -            iClient.Close();
   1.162 -            iClient = null;
   1.163 -            iCallback.Dispose();
   1.164 -            iCallback = null;
   1.165 -        }
   1.166 -
   1.167 -        /// <summary>
   1.168 -        /// Tells whether a server connection is available.
   1.169 -        /// </summary>
   1.170 -        /// <returns>True if a server connection is available. False otherwise.</returns>
   1.171 -        public bool IsReady()
   1.172 -        {
   1.173 -            return (iClient != null && iCallback != null && iClient.IsReady());
   1.174 -        }
   1.175 -
   1.176 -        /// <summary>
   1.177 -        /// Check if our server connection is available and attempt reset it if it isn't.
   1.178 -        /// This is notably dealing with timed out connections.
   1.179 -        /// </summary>
   1.180 -        public void CheckConnection()
   1.181 -        {
   1.182 -            if (!IsReady() && !resetingConnection)
   1.183 -            {
   1.184 -                //Try to reconnect
   1.185 -                Open();
   1.186 -
   1.187 -                //Avoid stack overflow in case of persisting failure
   1.188 -                resetingConnection = true;
   1.189 -
   1.190 -                try
   1.191 -                {
   1.192 -                    //On reconnect there is a bunch of properties we need to reset
   1.193 -                    if (Name != "")
   1.194 -                    {
   1.195 -                        iClient.SetName(Name);
   1.196 -                    }
   1.197 -
   1.198 -                    SetLayout(Layout);
   1.199 -                    iClient.SetFields(Fields);
   1.200 -                }
   1.201 -                finally
   1.202 -                {
   1.203 -                    //Make sure our this state does not get out of sync
   1.204 -                    resetingConnection = true;
   1.205 -                }
   1.206 -            }
   1.207 -        }
   1.208 -
   1.209 -        /// <summary>
   1.210 -        /// Set our client's name.
   1.211 -        /// Client's name is typically user friendly.
   1.212 -        /// It does not have to be unique.
   1.213 -        /// </summary>
   1.214 -        /// <param name="aClientName">Our client name.</param>
   1.215 -        public void SetName(string aClientName)
   1.216 -        {
   1.217 -            Name = aClientName;
   1.218 -            CheckConnection();
   1.219 -            iClient.SetName(aClientName);
   1.220 -        }
   1.221 -
   1.222 -        /// <summary>
   1.223 -        /// Set your client fields' layout.
   1.224 -        /// </summary>
   1.225 -        /// <param name="aLayout">The layout to apply for this client.</param>
   1.226 -        public void SetLayout(TableLayout aLayout)
   1.227 -        {
   1.228 -            Layout = aLayout;
   1.229 -            CheckConnection();
   1.230 -            iClient.SetLayout(aLayout);
   1.231 -        }
   1.232 -
   1.233 -        /// <summary>
   1.234 -        /// Set the specified field.
   1.235 -        /// </summary>
   1.236 -        /// <param name="aField"></param>
   1.237 -        /// <returns>True if the specified field was set client side. False means you need to redefine all your fields using CreateFields.</returns>
   1.238 -        public bool SetField(DataField aField)
   1.239 -        {
   1.240 -            int i = 0;
   1.241 -            bool fieldFound = false;
   1.242 -            foreach (DataField field in Fields)
   1.243 -            {
   1.244 -                if (field.Index == aField.Index)
   1.245 -                {
   1.246 -                    //Update our field then
   1.247 -                    Fields[i] = aField;
   1.248 -                    fieldFound = true;
   1.249 -                    break;
   1.250 -                }
   1.251 -                i++;
   1.252 -            }
   1.253 -
   1.254 -            if (!fieldFound)
   1.255 -            {
   1.256 -                //Field not found, make sure to use CreateFields first after setting your layout.
   1.257 -                return false;
   1.258 -            }
   1.259 -
   1.260 -            CheckConnection();
   1.261 -            iClient.SetField(aField);
   1.262 -            return true;
   1.263 -        }
   1.264 -
   1.265 -        /// <summary>
   1.266 -        /// Use this function when updating existing fields.
   1.267 -        /// </summary>
   1.268 -        /// <param name="aFields"></param>
   1.269 -        public bool SetFields(System.Collections.Generic.IList<DataField> aFields)
   1.270 -        {
   1.271 -            int fieldFoundCount = 0;
   1.272 -            foreach (DataField fieldUpdate in aFields)
   1.273 -            {
   1.274 -                int i = 0;
   1.275 -                foreach (DataField existingField in Fields)
   1.276 -                {
   1.277 -                    if (existingField.Index == fieldUpdate.Index)
   1.278 -                    {
   1.279 -                        //Update our field then
   1.280 -                        Fields[i] = fieldUpdate;
   1.281 -                        fieldFoundCount++;
   1.282 -                        //Move on to the next field
   1.283 -                        break;
   1.284 -                    }
   1.285 -                    i++;
   1.286 -                }
   1.287 -            }
   1.288 -
   1.289 -            //
   1.290 -            if (fieldFoundCount!=aFields.Count)
   1.291 -            {
   1.292 -                //Field not found, make sure to use CreateFields first after setting your layout.
   1.293 -                return false;
   1.294 -            }
   1.295 -
   1.296 -            CheckConnection();
   1.297 -            iClient.SetFields(aFields);
   1.298 -            return true;
   1.299 -        }
   1.300 -
   1.301 -        /// <summary>
   1.302 -        /// Use this function when creating your fields.
   1.303 -        /// This must be done at least once after setting your layout.
   1.304 -        /// </summary>
   1.305 -        /// <param name="aFields"></param>
   1.306 -        public void CreateFields(System.Collections.Generic.IList<DataField> aFields)
   1.307 -        {
   1.308 -            Fields = aFields;
   1.309 -            CheckConnection();
   1.310 -            iClient.SetFields(aFields);
   1.311 -        }
   1.312 -
   1.313 -        /// <summary>
   1.314 -        /// Provide the number of clients currently connected to our server.
   1.315 -        /// </summary>
   1.316 -        /// <returns>Number of clients currently connected to our server.</returns>
   1.317 -        public int ClientCount()
   1.318 -        {
   1.319 -            CheckConnection();
   1.320 -            return iClient.ClientCount();
   1.321 -        }
   1.322 -
   1.323 -
   1.324 -
   1.325 -    }
   1.326 -
   1.327 -
   1.328 -}
     2.1 --- a/Client/MainForm.cs	Tue Sep 29 18:38:36 2015 +0200
     2.2 +++ b/Client/MainForm.cs	Fri Oct 30 16:45:33 2015 +0100
     2.3 @@ -29,7 +29,7 @@
     2.4  using System.ServiceModel;
     2.5  using System.ServiceModel.Channels;
     2.6  using System.Diagnostics;
     2.7 -using SharpDisplay;
     2.8 +using SharpLib.Display;
     2.9  
    2.10  
    2.11  namespace SharpDisplayClient
    2.12 @@ -39,7 +39,7 @@
    2.13  		public StartParams Params { get; set; }
    2.14  
    2.15  		//
    2.16 -        DisplayClient iClient;
    2.17 +        Client iClient;
    2.18  		//
    2.19          ContentAlignment Alignment;
    2.20          DataField iTextFieldTop;
    2.21 @@ -55,14 +55,20 @@
    2.22              iTextFieldTop = new DataField(0);
    2.23          }
    2.24  
    2.25 -		/// <summary>
    2.26 -		/// 
    2.27 -		/// </summary>
    2.28 -		/// <param name="sender"></param>
    2.29 -		/// <param name="e"></param>
    2.30 +        public void OnCloseOrder()
    2.31 +        {
    2.32 +            CloseThreadSafe();
    2.33 +        }
    2.34 +
    2.35 +        /// <summary>
    2.36 +        /// 
    2.37 +        /// </summary>
    2.38 +        /// <param name="sender"></param>
    2.39 +        /// <param name="e"></param>
    2.40          private void MainForm_Load(object sender, EventArgs e)
    2.41          {
    2.42 -            iClient = new DisplayClient(this);
    2.43 +            iClient = new Client();
    2.44 +            iClient.CloseOrderEvent += OnCloseOrder;
    2.45              iClient.Open();
    2.46  
    2.47              //Connect using unique name
     3.1 --- a/Client/SharpDisplayClient.csproj	Tue Sep 29 18:38:36 2015 +0200
     3.2 +++ b/Client/SharpDisplayClient.csproj	Fri Oct 30 16:45:33 2015 +0100
     3.3 @@ -84,6 +84,10 @@
     3.4      <NoWin32Manifest>true</NoWin32Manifest>
     3.5    </PropertyGroup>
     3.6    <ItemGroup>
     3.7 +    <Reference Include="SharpLibDisplay, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
     3.8 +      <HintPath>..\packages\SharpLibDisplay.0.0.2\lib\net40\SharpLibDisplay.dll</HintPath>
     3.9 +      <Private>True</Private>
    3.10 +    </Reference>
    3.11      <Reference Include="System" />
    3.12      <Reference Include="System.Core" />
    3.13      <Reference Include="System.ServiceModel" />
    3.14 @@ -97,7 +101,6 @@
    3.15      <Reference Include="System.Xml" />
    3.16    </ItemGroup>
    3.17    <ItemGroup>
    3.18 -    <Compile Include="Client.cs" />
    3.19      <Compile Include="MainForm.cs">
    3.20        <SubType>Form</SubType>
    3.21      </Compile>
    3.22 @@ -119,6 +122,7 @@
    3.23        <DependentUpon>Resources.resx</DependentUpon>
    3.24        <DesignTime>True</DesignTime>
    3.25      </Compile>
    3.26 +    <None Include="packages.config" />
    3.27      <None Include="Properties\Settings.settings">
    3.28        <Generator>SettingsSingleFileGenerator</Generator>
    3.29        <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    3.30 @@ -133,12 +137,6 @@
    3.31      <None Include="App.config" />
    3.32    </ItemGroup>
    3.33    <ItemGroup>
    3.34 -    <ProjectReference Include="..\Interface\SharpDisplayInterface.csproj">
    3.35 -      <Project>{88eee0dc-abbc-4738-bad6-7e08cf7f50f9}</Project>
    3.36 -      <Name>SharpDisplayInterface</Name>
    3.37 -    </ProjectReference>
    3.38 -  </ItemGroup>
    3.39 -  <ItemGroup>
    3.40      <BootstrapperPackage Include=".NETFramework,Version=v4.5">
    3.41        <Visible>False</Visible>
    3.42        <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>
     4.1 --- a/Interface/Interface.cs	Tue Sep 29 18:38:36 2015 +0200
     4.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.3 @@ -1,251 +0,0 @@
     4.4 -//
     4.5 -// Define a public API for both SharpDisplay client and server to use.
     4.6 -//
     4.7 -
     4.8 -using System;
     4.9 -using System.Collections.Generic;
    4.10 -using System.Linq;
    4.11 -using System.Text;
    4.12 -using System.Threading.Tasks;
    4.13 -using System.ServiceModel;
    4.14 -using System.Collections;
    4.15 -using System.Drawing;
    4.16 -using System.Runtime.Serialization;
    4.17 -using System.Windows.Forms;
    4.18 -
    4.19 -
    4.20 -namespace SharpDisplay
    4.21 -{
    4.22 -    /// <summary>
    4.23 -    /// For client to specify a specific layout.
    4.24 -    /// A table layout is sent from client to server and defines data fields layout on our display.
    4.25 -    /// </summary>
    4.26 -    [DataContract]
    4.27 -    public class TableLayout
    4.28 -    {
    4.29 -        public TableLayout()
    4.30 -        {
    4.31 -            Columns = new List<ColumnStyle>();
    4.32 -            Rows = new List<RowStyle>();
    4.33 -        }
    4.34 -
    4.35 -        /// <summary>
    4.36 -        /// Construct our table layout.
    4.37 -        /// </summary>
    4.38 -        /// <param name="aColumnCount">Number of column in our table.</param>
    4.39 -        /// <param name="aRowCount">Number of rows in our table.</param>
    4.40 -        public TableLayout(int aColumnCount, int aRowCount)
    4.41 -        {
    4.42 -            Columns = new List<ColumnStyle>();
    4.43 -            Rows = new List<RowStyle>();
    4.44 -
    4.45 -            for (int i = 0; i < aColumnCount; i++)
    4.46 -            {
    4.47 -                Columns.Add(new ColumnStyle(SizeType.Percent, 100 / aColumnCount));
    4.48 -            }
    4.49 -
    4.50 -            for (int i = 0; i < aRowCount; i++)
    4.51 -            {
    4.52 -                Rows.Add(new RowStyle(SizeType.Percent, 100 / aRowCount));
    4.53 -            }
    4.54 -        }
    4.55 -
    4.56 -        /// <summary>
    4.57 -        /// Compare two TableLayout object.
    4.58 -        /// </summary>
    4.59 -        /// <returns>Tells whether both layout are identical.</returns>
    4.60 -        public bool IsSameAs(TableLayout aTableLayout)
    4.61 -        {
    4.62 -            //Check rows and columns counts
    4.63 -            if (Columns.Count != aTableLayout.Columns.Count || Rows.Count != aTableLayout.Rows.Count)
    4.64 -            {
    4.65 -                return false;
    4.66 -            }
    4.67 -
    4.68 -            //Compare each columns
    4.69 -            for (int i=0;i<Columns.Count;i++)
    4.70 -            {
    4.71 -                if (Columns[i].SizeType != aTableLayout.Columns[i].SizeType)
    4.72 -                {
    4.73 -                    return false;
    4.74 -                }
    4.75 -
    4.76 -                if (Columns[i].Width != aTableLayout.Columns[i].Width)
    4.77 -                {
    4.78 -                    return false;
    4.79 -                }
    4.80 -            }
    4.81 -
    4.82 -            //Compare each columns
    4.83 -            for (int i = 0; i < Rows.Count; i++)
    4.84 -            {
    4.85 -                if (Rows[i].SizeType != aTableLayout.Rows[i].SizeType)
    4.86 -                {
    4.87 -                    return false;
    4.88 -                }
    4.89 -
    4.90 -                if (Rows[i].Height != aTableLayout.Rows[i].Height)
    4.91 -                {
    4.92 -                    return false;
    4.93 -                }
    4.94 -            }
    4.95 -
    4.96 -            //Both rows and columns have the same content.
    4.97 -            return true;
    4.98 -        }
    4.99 -
   4.100 -        [DataMember]
   4.101 -        public List<ColumnStyle> Columns { get; set; }
   4.102 -
   4.103 -        [DataMember]
   4.104 -        public List<RowStyle> Rows { get; set; }
   4.105 -    }
   4.106 -
   4.107 -    /// <summary>
   4.108 -    /// Define a data field on our display.
   4.109 -    /// Data field can be either text or bitmap.
   4.110 -    /// </summary>
   4.111 -    [DataContract]
   4.112 -    public class DataField
   4.113 -    {
   4.114 -        public DataField()
   4.115 -        {
   4.116 -            Index = 0;
   4.117 -            ColumnSpan = 1;
   4.118 -            RowSpan = 1;
   4.119 -            //Text
   4.120 -            Text = "";
   4.121 -            Alignment = ContentAlignment.MiddleLeft;
   4.122 -            //Bitmap
   4.123 -            Bitmap = null;
   4.124 -        }
   4.125 -
   4.126 -        //Text constructor
   4.127 -        public DataField(int aIndex, string aText = "", ContentAlignment aAlignment = ContentAlignment.MiddleLeft)
   4.128 -        {
   4.129 -            ColumnSpan = 1;
   4.130 -            RowSpan = 1;
   4.131 -            Index = aIndex;
   4.132 -            Text = aText;
   4.133 -            Alignment = aAlignment;
   4.134 -            //
   4.135 -            Bitmap = null;
   4.136 -        }
   4.137 -
   4.138 -        //Bitmap constructor
   4.139 -        public DataField(int aIndex, Bitmap aBitmap)
   4.140 -        {
   4.141 -            ColumnSpan = 1;
   4.142 -            RowSpan = 1;
   4.143 -            Index = aIndex;
   4.144 -            Bitmap = aBitmap;
   4.145 -            //Text
   4.146 -            Text = "";
   4.147 -            Alignment = ContentAlignment.MiddleLeft;
   4.148 -        }
   4.149 -
   4.150 -
   4.151 -        //Generic layout properties
   4.152 -        [DataMember]
   4.153 -        public int Index { get; set; }
   4.154 -
   4.155 -        [DataMember]
   4.156 -        public int Column { get; set; }
   4.157 -
   4.158 -        [DataMember]
   4.159 -        public int Row { get; set; }
   4.160 -
   4.161 -        [DataMember]
   4.162 -        public int ColumnSpan { get; set; }
   4.163 -
   4.164 -        [DataMember]
   4.165 -        public int RowSpan { get; set; }
   4.166 -
   4.167 -        //Text properties
   4.168 -        [DataMember]
   4.169 -        public string Text { get; set; }
   4.170 -
   4.171 -        [DataMember]
   4.172 -        public ContentAlignment Alignment { get; set; }
   4.173 -
   4.174 -        //Bitmap properties
   4.175 -        [DataMember]
   4.176 -        public Bitmap Bitmap { get; set; }
   4.177 -
   4.178 -        //
   4.179 -        public bool IsBitmap { get{ return Bitmap!=null;} }
   4.180 -        //
   4.181 -        public bool IsText { get { return Bitmap == null; } }
   4.182 -        //
   4.183 -        public bool IsSameLayout(DataField aField)
   4.184 -        {
   4.185 -            return (aField.ColumnSpan == ColumnSpan && aField.RowSpan == RowSpan);
   4.186 -        }
   4.187 -    }
   4.188 -
   4.189 -    /// <summary>
   4.190 -    /// Define our SharpDisplay service.
   4.191 -    /// Clients and servers must implement it to communicate with one another.
   4.192 -    /// Through this service clients can send requests to a server.
   4.193 -    /// Through this service a server session can receive requests from a client.
   4.194 -    /// </summary>
   4.195 -    [ServiceContract(   CallbackContract = typeof(ICallback), SessionMode = SessionMode.Required)]
   4.196 -    public interface IService
   4.197 -    {
   4.198 -        /// <summary>
   4.199 -        /// Set the name of this client.
   4.200 -        /// Name is a convenient way to recognize your client.
   4.201 -        /// Naming you client is not mandatory.
   4.202 -        /// In the absence of a name the session ID is often used instead.
   4.203 -        /// </summary>
   4.204 -        /// <param name="aClientName"></param>
   4.205 -        [OperationContract(IsOneWay = true)]
   4.206 -        void SetName(string aClientName);
   4.207 -
   4.208 -        /// <summary>
   4.209 -        /// </summary>
   4.210 -        /// <param name="aLayout"></param>
   4.211 -        [OperationContract(IsOneWay = true)]
   4.212 -        void SetLayout(TableLayout aLayout);
   4.213 -
   4.214 -        /// <summary>
   4.215 -        /// Set the given field on your display.
   4.216 -        /// Fields are often just lines of text or bitmaps.
   4.217 -        /// </summary>
   4.218 -        /// <param name="aTextFieldIndex"></param>
   4.219 -        [OperationContract(IsOneWay = true)]
   4.220 -        void SetField(DataField aField);
   4.221 -
   4.222 -        /// <summary>
   4.223 -        /// Allows a client to set multiple fields at once.
   4.224 -        /// </summary>
   4.225 -        /// <param name="aFields"></param>
   4.226 -        [OperationContract(IsOneWay = true)]
   4.227 -        void SetFields(System.Collections.Generic.IList<DataField> aFields);
   4.228 -
   4.229 -        /// <summary>
   4.230 -        /// Provides the number of clients currently connected
   4.231 -        /// </summary>
   4.232 -        /// <returns></returns>
   4.233 -        [OperationContract()]
   4.234 -        int ClientCount();
   4.235 -
   4.236 -    }
   4.237 -
   4.238 -    /// <summary>
   4.239 -    /// SharDisplay callback provides a means for a server to notify its clients.
   4.240 -    /// </summary>
   4.241 -    public interface ICallback
   4.242 -    {
   4.243 -        [OperationContract(IsOneWay = true)]
   4.244 -        void OnConnected();
   4.245 -
   4.246 -        /// <summary>
   4.247 -        /// Tell our client to close its connection.
   4.248 -        /// Notably sent when the server is shutting down.
   4.249 -        /// </summary>
   4.250 -        [OperationContract(IsOneWay = true)]
   4.251 -        void OnCloseOrder();
   4.252 -    }
   4.253 -
   4.254 -}
     5.1 --- a/Interface/Properties/AssemblyInfo.cs	Tue Sep 29 18:38:36 2015 +0200
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,36 +0,0 @@
     5.4 -using System.Reflection;
     5.5 -using System.Runtime.CompilerServices;
     5.6 -using System.Runtime.InteropServices;
     5.7 -
     5.8 -// General Information about an assembly is controlled through the following 
     5.9 -// set of attributes. Change these attribute values to modify the information
    5.10 -// associated with an assembly.
    5.11 -[assembly: AssemblyTitle("SharpDisplayInterface")]
    5.12 -[assembly: AssemblyDescription("")]
    5.13 -[assembly: AssemblyConfiguration("")]
    5.14 -[assembly: AssemblyCompany("")]
    5.15 -[assembly: AssemblyProduct("SharpDisplayInterface")]
    5.16 -[assembly: AssemblyCopyright("Copyright ©  2014")]
    5.17 -[assembly: AssemblyTrademark("")]
    5.18 -[assembly: AssemblyCulture("")]
    5.19 -
    5.20 -// Setting ComVisible to false makes the types in this assembly not visible 
    5.21 -// to COM components.  If you need to access a type in this assembly from 
    5.22 -// COM, set the ComVisible attribute to true on that type.
    5.23 -[assembly: ComVisible(false)]
    5.24 -
    5.25 -// The following GUID is for the ID of the typelib if this project is exposed to COM
    5.26 -[assembly: Guid("53136116-6621-4ac0-8a01-bf746674b192")]
    5.27 -
    5.28 -// Version information for an assembly consists of the following four values:
    5.29 -//
    5.30 -//      Major Version
    5.31 -//      Minor Version 
    5.32 -//      Build Number
    5.33 -//      Revision
    5.34 -//
    5.35 -// You can specify all the values or you can default the Build and Revision Numbers 
    5.36 -// by using the '*' as shown below:
    5.37 -// [assembly: AssemblyVersion("1.0.*")]
    5.38 -[assembly: AssemblyVersion("1.0.0.0")]
    5.39 -[assembly: AssemblyFileVersion("1.0.0.0")]
     6.1 --- a/Interface/SharpDisplayInterface.csproj	Tue Sep 29 18:38:36 2015 +0200
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,82 +0,0 @@
     6.4 -<?xml version="1.0" encoding="utf-8"?>
     6.5 -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     6.6 -  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
     6.7 -  <PropertyGroup>
     6.8 -    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     6.9 -    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    6.10 -    <ProjectGuid>{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}</ProjectGuid>
    6.11 -    <OutputType>Library</OutputType>
    6.12 -    <AppDesignerFolder>Properties</AppDesignerFolder>
    6.13 -    <RootNamespace>SharpDisplayInterface</RootNamespace>
    6.14 -    <AssemblyName>SharpDisplayInterface</AssemblyName>
    6.15 -    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
    6.16 -    <FileAlignment>512</FileAlignment>
    6.17 -    <TargetFrameworkProfile />
    6.18 -  </PropertyGroup>
    6.19 -  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    6.20 -    <DebugSymbols>true</DebugSymbols>
    6.21 -    <DebugType>full</DebugType>
    6.22 -    <Optimize>false</Optimize>
    6.23 -    <OutputPath>bin\Debug\</OutputPath>
    6.24 -    <DefineConstants>DEBUG;TRACE</DefineConstants>
    6.25 -    <ErrorReport>prompt</ErrorReport>
    6.26 -    <WarningLevel>4</WarningLevel>
    6.27 -    <Prefer32Bit>false</Prefer32Bit>
    6.28 -  </PropertyGroup>
    6.29 -  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    6.30 -    <DebugType>pdbonly</DebugType>
    6.31 -    <Optimize>true</Optimize>
    6.32 -    <OutputPath>bin\Release\</OutputPath>
    6.33 -    <DefineConstants>TRACE</DefineConstants>
    6.34 -    <ErrorReport>prompt</ErrorReport>
    6.35 -    <WarningLevel>4</WarningLevel>
    6.36 -    <Prefer32Bit>false</Prefer32Bit>
    6.37 -  </PropertyGroup>
    6.38 -  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    6.39 -    <DebugSymbols>true</DebugSymbols>
    6.40 -    <OutputPath>..\bin\x86\Debug\</OutputPath>
    6.41 -	<BaseIntermediateOutputPath>..\bin\x86\Debug\obj</BaseIntermediateOutputPath>
    6.42 -    <DefineConstants>DEBUG;TRACE</DefineConstants>
    6.43 -    <DebugType>full</DebugType>
    6.44 -    <PlatformTarget>x86</PlatformTarget>
    6.45 -    <ErrorReport>prompt</ErrorReport>
    6.46 -    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    6.47 -    <Prefer32Bit>false</Prefer32Bit>
    6.48 -  </PropertyGroup>
    6.49 -  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    6.50 -    <OutputPath>..\bin\x86\Release\</OutputPath>
    6.51 -	<BaseIntermediateOutputPath>..\bin\x86\Release\obj</BaseIntermediateOutputPath>
    6.52 -    <DefineConstants>TRACE</DefineConstants>
    6.53 -    <Optimize>true</Optimize>
    6.54 -    <DebugType>pdbonly</DebugType>
    6.55 -    <PlatformTarget>x86</PlatformTarget>
    6.56 -    <ErrorReport>prompt</ErrorReport>
    6.57 -    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    6.58 -    <Prefer32Bit>false</Prefer32Bit>
    6.59 -  </PropertyGroup>
    6.60 -  <ItemGroup>
    6.61 -    <Reference Include="System" />
    6.62 -    <Reference Include="System.Core" />
    6.63 -    <Reference Include="System.Drawing" />
    6.64 -    <Reference Include="System.Runtime.Serialization" />
    6.65 -    <Reference Include="System.ServiceModel" />
    6.66 -    <Reference Include="System.Windows.Forms" />
    6.67 -    <Reference Include="System.Xml.Linq" />
    6.68 -    <Reference Include="System.Data.DataSetExtensions" />
    6.69 -    <Reference Include="Microsoft.CSharp" />
    6.70 -    <Reference Include="System.Data" />
    6.71 -    <Reference Include="System.Xml" />
    6.72 -  </ItemGroup>
    6.73 -  <ItemGroup>
    6.74 -    <Compile Include="Interface.cs" />
    6.75 -    <Compile Include="Properties\AssemblyInfo.cs" />
    6.76 -  </ItemGroup>
    6.77 -  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    6.78 -  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
    6.79 -       Other similar extension points exist, see Microsoft.Common.targets.
    6.80 -  <Target Name="BeforeBuild">
    6.81 -  </Target>
    6.82 -  <Target Name="AfterBuild">
    6.83 -  </Target>
    6.84 -  -->
    6.85 -</Project>
    6.86 \ No newline at end of file
     7.1 --- a/Server/ClientData.cs	Tue Sep 29 18:38:36 2015 +0200
     7.2 +++ b/Server/ClientData.cs	Fri Oct 30 16:45:33 2015 +0100
     7.3 @@ -4,7 +4,7 @@
     7.4  using System.Text;
     7.5  using System.Threading.Tasks;
     7.6  //
     7.7 -using SharpDisplay;
     7.8 +using SharpLib.Display;
     7.9  
    7.10  namespace SharpDisplayManager
    7.11  {
     8.1 --- a/Server/MainForm.cs	Tue Sep 29 18:38:36 2015 +0200
     8.2 +++ b/Server/MainForm.cs	Fri Oct 30 16:45:33 2015 +0100
     8.3 @@ -44,7 +44,7 @@
     8.4  using SharpDisplayClient;
     8.5  using SharpDisplay;
     8.6  using MiniDisplayInterop;
     8.7 -
     8.8 +using SharpLib.Display;
     8.9  
    8.10  namespace SharpDisplayManager
    8.11  {
     9.1 --- a/Server/Session.cs	Tue Sep 29 18:38:36 2015 +0200
     9.2 +++ b/Server/Session.cs	Fri Oct 30 16:45:33 2015 +0100
     9.3 @@ -24,7 +24,7 @@
     9.4  using System.Collections.Generic;
     9.5  using System.Linq;
     9.6  using System.Diagnostics;
     9.7 -using SharpDisplay;
     9.8 +using SharpLib.Display;
     9.9  
    9.10  namespace SharpDisplay
    9.11  {
    10.1 --- a/Server/SharpDisplayManager.csproj	Tue Sep 29 18:38:36 2015 +0200
    10.2 +++ b/Server/SharpDisplayManager.csproj	Fri Oct 30 16:45:33 2015 +0100
    10.3 @@ -103,7 +103,7 @@
    10.4      <StartupObject>SharpDisplayManager.Program</StartupObject>
    10.5    </PropertyGroup>
    10.6    <PropertyGroup>
    10.7 -    <ApplicationManifest>app.manifest</ApplicationManifest>
    10.8 +    <ApplicationManifest>Resources\app.manifest</ApplicationManifest>
    10.9    </PropertyGroup>
   10.10    <PropertyGroup>
   10.11      <TargetZone>LocalIntranet</TargetZone>
   10.12 @@ -122,6 +122,10 @@
   10.13        <SpecificVersion>False</SpecificVersion>
   10.14        <HintPath>..\packages\NAudio.1.7.3\lib\net35\NAudio.dll</HintPath>
   10.15      </Reference>
   10.16 +    <Reference Include="SharpLibDisplay, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
   10.17 +      <HintPath>..\packages\SharpLibDisplay.0.0.2\lib\net40\SharpLibDisplay.dll</HintPath>
   10.18 +      <Private>True</Private>
   10.19 +    </Reference>
   10.20      <Reference Include="SharpLibHid">
   10.21        <HintPath>..\packages\SharpLibHid.1.2.1\lib\net20\SharpLibHid.dll</HintPath>
   10.22        <Private>True</Private>
   10.23 @@ -197,7 +201,7 @@
   10.24        <DependentUpon>Resources.resx</DependentUpon>
   10.25        <DesignTime>True</DesignTime>
   10.26      </Compile>
   10.27 -    <None Include="app.manifest">
   10.28 +    <None Include="Resources\app.manifest">
   10.29        <SubType>Designer</SubType>
   10.30      </None>
   10.31      <None Include="packages.config" />
   10.32 @@ -214,17 +218,13 @@
   10.33      <None Include="SharpDisplayManager_TemporaryKey.pfx" />
   10.34    </ItemGroup>
   10.35    <ItemGroup>
   10.36 -    <None Include="App.config" />
   10.37 +    <None Include="Resources\App.config" />
   10.38    </ItemGroup>
   10.39    <ItemGroup>
   10.40      <ProjectReference Include="..\Client\SharpDisplayClient.csproj">
   10.41        <Project>{7ee64074-8cdb-4448-b40c-81b75d6b31cd}</Project>
   10.42        <Name>SharpDisplayClient</Name>
   10.43      </ProjectReference>
   10.44 -    <ProjectReference Include="..\Interface\SharpDisplayInterface.csproj">
   10.45 -      <Project>{88eee0dc-abbc-4738-bad6-7e08cf7f50f9}</Project>
   10.46 -      <Name>SharpDisplayInterface</Name>
   10.47 -    </ProjectReference>
   10.48      <ProjectReference Include="..\PowerManager\PowerManager.vcxproj">
   10.49        <Project>{c174f23d-3055-49bc-b6b0-563011af624d}</Project>
   10.50        <Name>PowerManager</Name>
    11.1 --- a/Server/packages.config	Tue Sep 29 18:38:36 2015 +0200
    11.2 +++ b/Server/packages.config	Fri Oct 30 16:45:33 2015 +0100
    11.3 @@ -2,6 +2,7 @@
    11.4  <packages>
    11.5    <package id="LibMiniDisplay" version="1.1.8" targetFramework="net46" />
    11.6    <package id="NAudio" version="1.7.3" targetFramework="net45" />
    11.7 +  <package id="SharpLibDisplay" version="0.0.2" targetFramework="net46" />
    11.8    <package id="SharpLibHid" version="1.2.1" targetFramework="net45" />
    11.9    <package id="SharpLibWin32" version="0.0.7" targetFramework="net45" />
   11.10  </packages>
   11.11 \ No newline at end of file
    12.1 --- a/Setup/Setup.vdproj	Tue Sep 29 18:38:36 2015 +0200
    12.2 +++ b/Setup/Setup.vdproj	Fri Oct 30 16:45:33 2015 +0100
    12.3 @@ -82,19 +82,13 @@
    12.4          "Entry"
    12.5          {
    12.6          "MsmKey" = "8:_9F004B0F8506B523869FACB14EFF064D"
    12.7 -        "OwnerKey" = "8:_8CD29D0F38634408AC33359D27B44035"
    12.8 +        "OwnerKey" = "8:_9A642A9E3FEC4B88888C4B96086D59E8"
    12.9          "MsmSig" = "8:_UNDEFINED"
   12.10          }
   12.11          "Entry"
   12.12          {
   12.13          "MsmKey" = "8:_9F004B0F8506B523869FACB14EFF064D"
   12.14 -        "OwnerKey" = "8:_9A642A9E3FEC4B88888C4B96086D59E8"
   12.15 -        "MsmSig" = "8:_UNDEFINED"
   12.16 -        }
   12.17 -        "Entry"
   12.18 -        {
   12.19 -        "MsmKey" = "8:_A8CD4C9EB63D487F8E718093F92404DB"
   12.20 -        "OwnerKey" = "8:_UNDEFINED"
   12.21 +        "OwnerKey" = "8:_8CD29D0F38634408AC33359D27B44035"
   12.22          "MsmSig" = "8:_UNDEFINED"
   12.23          }
   12.24          "Entry"
   12.25 @@ -118,13 +112,49 @@
   12.26          "Entry"
   12.27          {
   12.28          "MsmKey" = "8:_UNDEFINED"
   12.29 -        "OwnerKey" = "8:_A8CD4C9EB63D487F8E718093F92404DB"
   12.30 +        "OwnerKey" = "8:_9F004B0F8506B523869FACB14EFF064D"
   12.31          "MsmSig" = "8:_UNDEFINED"
   12.32          }
   12.33          "Entry"
   12.34          {
   12.35          "MsmKey" = "8:_UNDEFINED"
   12.36 -        "OwnerKey" = "8:_8CD29D0F38634408AC33359D27B44035"
   12.37 +        "OwnerKey" = "8:_0BDF79321B394EC0E77BF680C3F40422"
   12.38 +        "MsmSig" = "8:_UNDEFINED"
   12.39 +        }
   12.40 +        "Entry"
   12.41 +        {
   12.42 +        "MsmKey" = "8:_UNDEFINED"
   12.43 +        "OwnerKey" = "8:_C2E6C8EB1D62D3C8FA1D1C243958D2D5"
   12.44 +        "MsmSig" = "8:_UNDEFINED"
   12.45 +        }
   12.46 +        "Entry"
   12.47 +        {
   12.48 +        "MsmKey" = "8:_UNDEFINED"
   12.49 +        "OwnerKey" = "8:_3EF5004CB20A413815D0A2588A19CDD4"
   12.50 +        "MsmSig" = "8:_UNDEFINED"
   12.51 +        }
   12.52 +        "Entry"
   12.53 +        {
   12.54 +        "MsmKey" = "8:_UNDEFINED"
   12.55 +        "OwnerKey" = "8:_334B309CE72870CC620EAB7737749CDB"
   12.56 +        "MsmSig" = "8:_UNDEFINED"
   12.57 +        }
   12.58 +        "Entry"
   12.59 +        {
   12.60 +        "MsmKey" = "8:_UNDEFINED"
   12.61 +        "OwnerKey" = "8:_295C95460CE37C9B5A2F236412BA3C46"
   12.62 +        "MsmSig" = "8:_UNDEFINED"
   12.63 +        }
   12.64 +        "Entry"
   12.65 +        {
   12.66 +        "MsmKey" = "8:_UNDEFINED"
   12.67 +        "OwnerKey" = "8:_7010B5ED2C1B4E82D3DBE2B590A4FC8E"
   12.68 +        "MsmSig" = "8:_UNDEFINED"
   12.69 +        }
   12.70 +        "Entry"
   12.71 +        {
   12.72 +        "MsmKey" = "8:_UNDEFINED"
   12.73 +        "OwnerKey" = "8:_63DC5055504D8E8030D07BDDC074A009"
   12.74          "MsmSig" = "8:_UNDEFINED"
   12.75          }
   12.76          "Entry"
   12.77 @@ -136,49 +166,7 @@
   12.78          "Entry"
   12.79          {
   12.80          "MsmKey" = "8:_UNDEFINED"
   12.81 -        "OwnerKey" = "8:_63DC5055504D8E8030D07BDDC074A009"
   12.82 -        "MsmSig" = "8:_UNDEFINED"
   12.83 -        }
   12.84 -        "Entry"
   12.85 -        {
   12.86 -        "MsmKey" = "8:_UNDEFINED"
   12.87 -        "OwnerKey" = "8:_7010B5ED2C1B4E82D3DBE2B590A4FC8E"
   12.88 -        "MsmSig" = "8:_UNDEFINED"
   12.89 -        }
   12.90 -        "Entry"
   12.91 -        {
   12.92 -        "MsmKey" = "8:_UNDEFINED"
   12.93 -        "OwnerKey" = "8:_295C95460CE37C9B5A2F236412BA3C46"
   12.94 -        "MsmSig" = "8:_UNDEFINED"
   12.95 -        }
   12.96 -        "Entry"
   12.97 -        {
   12.98 -        "MsmKey" = "8:_UNDEFINED"
   12.99 -        "OwnerKey" = "8:_334B309CE72870CC620EAB7737749CDB"
  12.100 -        "MsmSig" = "8:_UNDEFINED"
  12.101 -        }
  12.102 -        "Entry"
  12.103 -        {
  12.104 -        "MsmKey" = "8:_UNDEFINED"
  12.105 -        "OwnerKey" = "8:_3EF5004CB20A413815D0A2588A19CDD4"
  12.106 -        "MsmSig" = "8:_UNDEFINED"
  12.107 -        }
  12.108 -        "Entry"
  12.109 -        {
  12.110 -        "MsmKey" = "8:_UNDEFINED"
  12.111 -        "OwnerKey" = "8:_C2E6C8EB1D62D3C8FA1D1C243958D2D5"
  12.112 -        "MsmSig" = "8:_UNDEFINED"
  12.113 -        }
  12.114 -        "Entry"
  12.115 -        {
  12.116 -        "MsmKey" = "8:_UNDEFINED"
  12.117 -        "OwnerKey" = "8:_0BDF79321B394EC0E77BF680C3F40422"
  12.118 -        "MsmSig" = "8:_UNDEFINED"
  12.119 -        }
  12.120 -        "Entry"
  12.121 -        {
  12.122 -        "MsmKey" = "8:_UNDEFINED"
  12.123 -        "OwnerKey" = "8:_9F004B0F8506B523869FACB14EFF064D"
  12.124 +        "OwnerKey" = "8:_8CD29D0F38634408AC33359D27B44035"
  12.125          "MsmSig" = "8:_UNDEFINED"
  12.126          }
  12.127      }
  12.128 @@ -199,6 +187,14 @@
  12.129          "PrivateKeyFile" = "8:"
  12.130          "TimeStampServer" = "8:"
  12.131          "InstallerBootstrapper" = "3:2"
  12.132 +            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
  12.133 +            {
  12.134 +            "Enabled" = "11:TRUE"
  12.135 +            "PromptEnabled" = "11:TRUE"
  12.136 +            "PrerequisitesLocation" = "2:1"
  12.137 +            "Url" = "8:"
  12.138 +            "ComponentsUrl" = "8:"
  12.139 +            }
  12.140          }
  12.141          "Release"
  12.142          {
  12.143 @@ -215,6 +211,14 @@
  12.144          "PrivateKeyFile" = "8:"
  12.145          "TimeStampServer" = "8:"
  12.146          "InstallerBootstrapper" = "3:2"
  12.147 +            "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
  12.148 +            {
  12.149 +            "Enabled" = "11:TRUE"
  12.150 +            "PromptEnabled" = "11:TRUE"
  12.151 +            "PrerequisitesLocation" = "2:1"
  12.152 +            "Url" = "8:"
  12.153 +            "ComponentsUrl" = "8:"
  12.154 +            }
  12.155          }
  12.156      }
  12.157      "Deployable"
  12.158 @@ -251,11 +255,6 @@
  12.159              "AssemblyAsmDisplayName" = "8:SharpDisplayClient, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86"
  12.160                  "ScatterAssemblies"
  12.161                  {
  12.162 -                    "_0BDF79321B394EC0E77BF680C3F40422"
  12.163 -                    {
  12.164 -                    "Name" = "8:SharpDisplayClient.exe"
  12.165 -                    "Attributes" = "3:512"
  12.166 -                    }
  12.167                  }
  12.168              "SourcePath" = "8:SharpDisplayClient.exe"
  12.169              "TargetName" = "8:"
  12.170 @@ -282,11 +281,6 @@
  12.171              "AssemblyAsmDisplayName" = "8:SharpLibHid, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86"
  12.172                  "ScatterAssemblies"
  12.173                  {
  12.174 -                    "_295C95460CE37C9B5A2F236412BA3C46"
  12.175 -                    {
  12.176 -                    "Name" = "8:SharpLibHid.dll"
  12.177 -                    "Attributes" = "3:512"
  12.178 -                    }
  12.179                  }
  12.180              "SourcePath" = "8:SharpLibHid.dll"
  12.181              "TargetName" = "8:"
  12.182 @@ -313,11 +307,6 @@
  12.183              "AssemblyAsmDisplayName" = "8:SharpLibWin32, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86"
  12.184                  "ScatterAssemblies"
  12.185                  {
  12.186 -                    "_334B309CE72870CC620EAB7737749CDB"
  12.187 -                    {
  12.188 -                    "Name" = "8:SharpLibWin32.dll"
  12.189 -                    "Attributes" = "3:512"
  12.190 -                    }
  12.191                  }
  12.192              "SourcePath" = "8:SharpLibWin32.dll"
  12.193              "TargetName" = "8:"
  12.194 @@ -344,11 +333,6 @@
  12.195              "AssemblyAsmDisplayName" = "8:NAudio, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL"
  12.196                  "ScatterAssemblies"
  12.197                  {
  12.198 -                    "_3EF5004CB20A413815D0A2588A19CDD4"
  12.199 -                    {
  12.200 -                    "Name" = "8:NAudio.dll"
  12.201 -                    "Attributes" = "3:512"
  12.202 -                    }
  12.203                  }
  12.204              "SourcePath" = "8:NAudio.dll"
  12.205              "TargetName" = "8:"
  12.206 @@ -375,11 +359,6 @@
  12.207              "AssemblyAsmDisplayName" = "8:System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
  12.208                  "ScatterAssemblies"
  12.209                  {
  12.210 -                    "_63DC5055504D8E8030D07BDDC074A009"
  12.211 -                    {
  12.212 -                    "Name" = "8:System.Xml.Serialization.dll"
  12.213 -                    "Attributes" = "3:512"
  12.214 -                    }
  12.215                  }
  12.216              "SourcePath" = "8:System.Xml.Serialization.dll"
  12.217              "TargetName" = "8:"
  12.218 @@ -406,11 +385,6 @@
  12.219              "AssemblyAsmDisplayName" = "8:LibCecSharp, Version=2.2.0.0, Culture=neutral, processorArchitecture=x86"
  12.220                  "ScatterAssemblies"
  12.221                  {
  12.222 -                    "_7010B5ED2C1B4E82D3DBE2B590A4FC8E"
  12.223 -                    {
  12.224 -                    "Name" = "8:LibCecSharp.dll"
  12.225 -                    "Attributes" = "3:512"
  12.226 -                    }
  12.227                  }
  12.228              "SourcePath" = "8:LibCecSharp.dll"
  12.229              "TargetName" = "8:"
  12.230 @@ -437,11 +411,6 @@
  12.231              "AssemblyAsmDisplayName" = "8:SharpDisplayInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86"
  12.232                  "ScatterAssemblies"
  12.233                  {
  12.234 -                    "_9F004B0F8506B523869FACB14EFF064D"
  12.235 -                    {
  12.236 -                    "Name" = "8:SharpDisplayInterface.dll"
  12.237 -                    "Attributes" = "3:512"
  12.238 -                    }
  12.239                  }
  12.240              "SourcePath" = "8:SharpDisplayInterface.dll"
  12.241              "TargetName" = "8:"
  12.242 @@ -468,11 +437,6 @@
  12.243              "AssemblyAsmDisplayName" = "8:MiniDisplayInterop, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
  12.244                  "ScatterAssemblies"
  12.245                  {
  12.246 -                    "_C2E6C8EB1D62D3C8FA1D1C243958D2D5"
  12.247 -                    {
  12.248 -                    "Name" = "8:MiniDisplayInterop.dll"
  12.249 -                    "Attributes" = "3:512"
  12.250 -                    }
  12.251                  }
  12.252              "SourcePath" = "8:MiniDisplayInterop.dll"
  12.253              "TargetName" = "8:"
  12.254 @@ -499,11 +463,6 @@
  12.255              "AssemblyAsmDisplayName" = "8:PowerManager, Version=1.0.5750.26884, Culture=neutral, processorArchitecture=x86"
  12.256                  "ScatterAssemblies"
  12.257                  {
  12.258 -                    "_FE5CFB2A37C82C1C9824F67FFE127C01"
  12.259 -                    {
  12.260 -                    "Name" = "8:PowerManager.dll"
  12.261 -                    "Attributes" = "3:512"
  12.262 -                    }
  12.263                  }
  12.264              "SourcePath" = "8:PowerManager.dll"
  12.265              "TargetName" = "8:"
  12.266 @@ -1222,34 +1181,6 @@
  12.267                  {
  12.268                  }
  12.269              }
  12.270 -            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A8CD4C9EB63D487F8E718093F92404DB"
  12.271 -            {
  12.272 -            "SourcePath" = "8:..\\bin\\x86\\Release\\obj\\x86\\Release\\SharpDisplayInterface.dll"
  12.273 -            "TargetName" = "8:"
  12.274 -            "Tag" = "8:"
  12.275 -            "Folder" = "8:_E283B42AF1634497931184D1A685745A"
  12.276 -            "Condition" = "8:"
  12.277 -            "Transitive" = "11:FALSE"
  12.278 -            "Vital" = "11:TRUE"
  12.279 -            "ReadOnly" = "11:FALSE"
  12.280 -            "Hidden" = "11:FALSE"
  12.281 -            "System" = "11:FALSE"
  12.282 -            "Permanent" = "11:FALSE"
  12.283 -            "SharedLegacy" = "11:FALSE"
  12.284 -            "PackageAs" = "3:1"
  12.285 -            "Register" = "3:1"
  12.286 -            "Exclude" = "11:FALSE"
  12.287 -            "IsDependency" = "11:FALSE"
  12.288 -            "IsolateTo" = "8:"
  12.289 -            "ProjectOutputGroupRegister" = "3:1"
  12.290 -            "OutputConfiguration" = "8:"
  12.291 -            "OutputGroupCanonicalName" = "8:Built"
  12.292 -            "OutputProjectGuid" = "8:{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}"
  12.293 -            "ShowKeyOutput" = "11:TRUE"
  12.294 -                "ExcludeFilters"
  12.295 -                {
  12.296 -                }
  12.297 -            }
  12.298              "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_F8D21A6176DE48AB9A10DB85A3DEEB49"
  12.299              {
  12.300              "SourcePath" = "8:"
    13.1 --- a/SharpDisplayManager.sln	Tue Sep 29 18:38:36 2015 +0200
    13.2 +++ b/SharpDisplayManager.sln	Fri Oct 30 16:45:33 2015 +0100
    13.3 @@ -7,8 +7,6 @@
    13.4  EndProject
    13.5  Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDisplayClient", "Client\SharpDisplayClient.csproj", "{7EE64074-8CDB-4448-B40C-81B75D6B31CD}"
    13.6  EndProject
    13.7 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDisplayInterface", "Interface\SharpDisplayInterface.csproj", "{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}"
    13.8 -EndProject
    13.9  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PowerManager", "PowerManager\PowerManager.vcxproj", "{C174F23D-3055-49BC-B6B0-563011AF624D}"
   13.10  EndProject
   13.11  Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup", "Setup\Setup.vdproj", "{22C920A9-2352-4DC9-91E2-035EBD712866}"
   13.12 @@ -47,18 +45,6 @@
   13.13  		{7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|x64.Build.0 = Release|Any CPU
   13.14  		{7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|x86.ActiveCfg = Release|x86
   13.15  		{7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|x86.Build.0 = Release|x86
   13.16 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
   13.17 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
   13.18 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|x64.ActiveCfg = Debug|Any CPU
   13.19 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|x64.Build.0 = Debug|Any CPU
   13.20 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|x86.ActiveCfg = Debug|x86
   13.21 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|x86.Build.0 = Debug|x86
   13.22 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
   13.23 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|Any CPU.Build.0 = Release|Any CPU
   13.24 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|x64.ActiveCfg = Release|Any CPU
   13.25 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|x64.Build.0 = Release|Any CPU
   13.26 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|x86.ActiveCfg = Release|x86
   13.27 -		{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|x86.Build.0 = Release|x86
   13.28  		{C174F23D-3055-49BC-B6B0-563011AF624D}.Debug|Any CPU.ActiveCfg = Debug|Win32
   13.29  		{C174F23D-3055-49BC-B6B0-563011AF624D}.Debug|x64.ActiveCfg = Debug|x64
   13.30  		{C174F23D-3055-49BC-B6B0-563011AF624D}.Debug|x64.Build.0 = Debug|x64