From: <mis...@us...> - 2007-03-05 22:26:10
|
Revision: 24 http://svn.sourceforge.net/mp-webinterface/?rev=24&view=rev Author: misterd_sf Date: 2007-03-05 14:26:02 -0800 (Mon, 05 Mar 2007) Log Message: ----------- Initial version of web server, windows service and monitor for version 2 of MPW Added Paths: ----------- trunk/Version2/MPW.sln trunk/Version2/Monitor/ trunk/Version2/Monitor/Monitor.csproj trunk/Version2/Monitor/Program.cs trunk/Version2/Monitor/Properties/ trunk/Version2/Monitor/Properties/AssemblyInfo.cs trunk/Version2/Monitor/ServiceControl.Designer.cs trunk/Version2/Monitor/ServiceControl.cs trunk/Version2/Monitor/ServiceControl.resx trunk/Version2/Monitor/mp.ico trunk/Version2/Setup/ trunk/Version2/Setup/LICENSE.rtf trunk/Version2/Setup/Setup.vdproj trunk/Version2/WebServer/AssemblyInfo.cs trunk/Version2/WebServer/ByteParser.cs trunk/Version2/WebServer/ByteString.cs trunk/Version2/WebServer/Connection.cs trunk/Version2/WebServer/Host.cs trunk/Version2/WebServer/Messages.cs trunk/Version2/WebServer/Properties/ trunk/Version2/WebServer/Properties/AssemblyInfo.cs trunk/Version2/WebServer/RemoteServer.snk trunk/Version2/WebServer/Request.cs trunk/Version2/WebServer/Server.cs trunk/Version2/WebServer/ServerConfiguration.cs trunk/Version2/WebServer/WebServer.csproj trunk/Version2/WindowsService/ trunk/Version2/WindowsService/Configuration.xml trunk/Version2/WindowsService/DebugServiceControlForm.Designer.cs trunk/Version2/WindowsService/DebugServiceControlForm.cs trunk/Version2/WindowsService/DebugServiceControlForm.resx trunk/Version2/WindowsService/LoggingConfiguration.xml trunk/Version2/WindowsService/Program.cs trunk/Version2/WindowsService/ProjectInstaller.Designer.cs trunk/Version2/WindowsService/ProjectInstaller.cs trunk/Version2/WindowsService/ProjectInstaller.resx trunk/Version2/WindowsService/Properties/ trunk/Version2/WindowsService/Properties/AssemblyInfo.cs trunk/Version2/WindowsService/Properties/Resources.Designer.cs trunk/Version2/WindowsService/Properties/Resources.resx trunk/Version2/WindowsService/Resources/ trunk/Version2/WindowsService/Resources/Error.bmp trunk/Version2/WindowsService/Resources/Message.bmp trunk/Version2/WindowsService/Resources/NotFound.bmp trunk/Version2/WindowsService/Resources/Warning.bmp trunk/Version2/WindowsService/Service.Designer.cs trunk/Version2/WindowsService/Service.cs trunk/Version2/WindowsService/Service.resx trunk/Version2/WindowsService/WindowsService.csproj trunk/Version2/WindowsService/app.config trunk/Version2/WindowsService/mp.ico trunk/Version2/lib/ trunk/Version2/lib/log4net.dll Added: trunk/Version2/MPW.sln =================================================================== --- trunk/Version2/MPW.sln (rev 0) +++ trunk/Version2/MPW.sln 2007-03-05 22:26:02 UTC (rev 24) @@ -0,0 +1,78 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebServer", "WebServer\WebServer.csproj", "{4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Monitor", "Monitor\Monitor.csproj", "{8B650819-E843-488A-89CF-E629A389D4DA}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsService", "WindowsService\WindowsService.csproj", "{23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup", "Setup\Setup.vdproj", "{8258A5A9-36D2-4917-90CC-D5A83C429F37}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|.NET.ActiveCfg = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|.NET.ActiveCfg = Release|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Any CPU.Build.0 = Release|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|.NET.ActiveCfg = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|.NET.ActiveCfg = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Any CPU.Build.0 = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|.NET.ActiveCfg = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|.NET.ActiveCfg = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Any CPU.Build.0 = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|.NET.ActiveCfg = Debug + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|Any CPU.ActiveCfg = Debug + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|Mixed Platforms.ActiveCfg = Debug + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|.NET.ActiveCfg = Release + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|Any CPU.ActiveCfg = Release + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|Mixed Platforms.ActiveCfg = Release + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Added: trunk/Version2/Monitor/Monitor.csproj =================================================================== --- trunk/Version2/Monitor/Monitor.csproj (rev 0) +++ trunk/Version2/Monitor/Monitor.csproj 2007-03-05 22:26:02 UTC (rev 24) @@ -0,0 +1,81 @@ +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{8B650819-E843-488A-89CF-E629A389D4DA}</ProjectGuid> + <OutputType>WinExe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>MPW.Monitor</RootNamespace> + <AssemblyName>MPW Monitor</AssemblyName> + <ApplicationIcon>mp.ico</ApplicationIcon> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Data" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.ServiceProcess" /> + <Reference Include="System.Web" /> + <Reference Include="System.Web.Mobile" /> + <Reference Include="System.Web.RegularExpressions" /> + <Reference Include="System.Web.Services" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Program.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="ServiceControl.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="ServiceControl.Designer.cs"> + <DependentUpon>ServiceControl.cs</DependentUpon> + </Compile> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\WebServer\WebServer.csproj"> + <Project>{4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}</Project> + <Name>WebServer</Name> + <Private>True</Private> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="ServiceControl.resx"> + <SubType>Designer</SubType> + <DependentUpon>ServiceControl.cs</DependentUpon> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <Content Include="mp.ico" /> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PostBuildEvent> + </PostBuildEvent> + </PropertyGroup> +</Project> \ No newline at end of file Added: trunk/Version2/Monitor/Program.cs =================================================================== --- trunk/Version2/Monitor/Program.cs (rev 0) +++ trunk/Version2/Monitor/Program.cs 2007-03-05 22:26:02 UTC (rev 24) @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace MPW.Monitor { + static class Program { + /// <summary> + /// Der Haupteinstiegspunkt für die Anwendung. + /// </summary> + [STAThread] + static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new ServiceControl()); + } + } +} \ No newline at end of file Added: trunk/Version2/Monitor/Properties/AssemblyInfo.cs =================================================================== --- trunk/Version2/Monitor/Properties/AssemblyInfo.cs (rev 0) +++ trunk/Version2/Monitor/Properties/AssemblyInfo.cs 2007-03-05 22:26:02 UTC (rev 24) @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die mit einer Assembly verknüpft sind. +[assembly: AssemblyTitle("MPW - Monitor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("-")] +[assembly: AssemblyProduct("MPW - Monitor")] +[assembly: AssemblyCopyright("Copyright © - 2007")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("1d6554bd-ef37-4566-bbec-5abd522f2034")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] Added: trunk/Version2/Monitor/ServiceControl.Designer.cs =================================================================== --- trunk/Version2/Monitor/ServiceControl.Designer.cs (rev 0) +++ trunk/Version2/Monitor/ServiceControl.Designer.cs 2007-03-05 22:26:02 UTC (rev 24) @@ -0,0 +1,249 @@ +namespace MPW.Monitor { + partial class ServiceControl { + /// <summary> + /// Erforderliche Designervariable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Verwendete Ressourcen bereinigen. + /// </summary> + /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param> + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Vom Windows Form-Designer generierter Code + + /// <summary> + /// Erforderliche Methode für die Designerunterstützung. + /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. + /// </summary> + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServiceControl)); + this.start = new System.Windows.Forms.Button(); + this.stop = new System.Windows.Forms.Button(); + this.systray = new System.Windows.Forms.NotifyIcon(this.components); + this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.restoreContext = new System.Windows.Forms.ToolStripMenuItem(); + this.startContext = new System.Windows.Forms.ToolStripMenuItem(); + this.stopContext = new System.Windows.Forms.ToolStripMenuItem(); + this.exitContext = new System.Windows.Forms.ToolStripMenuItem(); + this.exit = new System.Windows.Forms.Button(); + this.serviceStatusLabel = new System.Windows.Forms.Label(); + this.serviceStatus = new System.Windows.Forms.Label(); + this.pause = new System.Windows.Forms.Button(); + this.conitnueButton = new System.Windows.Forms.Button(); + this.customCommandLabel = new System.Windows.Forms.Label(); + this.refreshButton = new System.Windows.Forms.Button(); + this.customCommand = new System.Windows.Forms.ComboBox(); + this.execute = new System.Windows.Forms.Button(); + this.contextMenu.SuspendLayout(); + this.SuspendLayout(); + // + // start + // + this.start.Location = new System.Drawing.Point(11, 42); + this.start.Name = "start"; + this.start.Size = new System.Drawing.Size(75, 23); + this.start.TabIndex = 0; + this.start.Text = "Start"; + this.start.UseVisualStyleBackColor = true; + this.start.Click += new System.EventHandler(this.start_Click); + // + // stop + // + this.stop.Location = new System.Drawing.Point(92, 42); + this.stop.Name = "stop"; + this.stop.Size = new System.Drawing.Size(75, 23); + this.stop.TabIndex = 7; + this.stop.Text = "Stop"; + this.stop.UseVisualStyleBackColor = true; + this.stop.Click += new System.EventHandler(this.stop_Click); + // + // systray + // + this.systray.ContextMenuStrip = this.contextMenu; + this.systray.Icon = ((System.Drawing.Icon)(resources.GetObject("systray.Icon"))); + this.systray.Text = "MPW"; + this.systray.Visible = true; + // + // contextMenu + // + this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.restoreContext, + this.startContext, + this.stopContext, + this.exitContext}); + this.contextMenu.Name = "contextMenu"; + this.contextMenu.Size = new System.Drawing.Size(124, 92); + // + // restoreContext + // + this.restoreContext.Name = "restoreContext"; + this.restoreContext.Size = new System.Drawing.Size(123, 22); + this.restoreContext.Text = "Restore"; + this.restoreContext.Click += new System.EventHandler(this.restoreContext_Click); + // + // startContext + // + this.startContext.Name = "startContext"; + this.startContext.Size = new System.Drawing.Size(123, 22); + this.startContext.Text = "Start"; + this.startContext.Click += new System.EventHandler(this.startContext_Click); + // + // stopContext + // + this.stopContext.Name = "stopContext"; + this.stopContext.Size = new System.Drawing.Size(123, 22); + this.stopContext.Text = "Stop"; + this.stopContext.Click += new System.EventHandler(this.stopContext_Click); + // + // exitContext + // + this.exitContext.Name = "exitContext"; + this.exitContext.Size = new System.Drawing.Size(123, 22); + this.exitContext.Text = "Exit"; + this.exitContext.Click += new System.EventHandler(this.exitContext_Click); + // + // exit + // + this.exit.Location = new System.Drawing.Point(233, 141); + this.exit.Name = "exit"; + this.exit.Size = new System.Drawing.Size(75, 23); + this.exit.TabIndex = 11; + this.exit.Text = "Exit"; + this.exit.UseVisualStyleBackColor = true; + this.exit.Click += new System.EventHandler(this.exit_Click); + // + // serviceStatusLabel + // + this.serviceStatusLabel.AutoSize = true; + this.serviceStatusLabel.Location = new System.Drawing.Point(9, 17); + this.serviceStatusLabel.Name = "serviceStatusLabel"; + this.serviceStatusLabel.Size = new System.Drawing.Size(77, 13); + this.serviceStatusLabel.TabIndex = 12; + this.serviceStatusLabel.Text = "Service status:"; + // + // serviceStatus + // + this.serviceStatus.AutoSize = true; + this.serviceStatus.Location = new System.Drawing.Point(92, 17); + this.serviceStatus.Name = "serviceStatus"; + this.serviceStatus.Size = new System.Drawing.Size(47, 13); + this.serviceStatus.TabIndex = 13; + this.serviceStatus.Text = "Stopped"; + // + // pause + // + this.pause.Location = new System.Drawing.Point(11, 71); + this.pause.Name = "pause"; + this.pause.Size = new System.Drawing.Size(75, 23); + this.pause.TabIndex = 14; + this.pause.Text = "Pause"; + this.pause.UseVisualStyleBackColor = true; + this.pause.Click += new System.EventHandler(this.pause_Click); + // + // conitnueButton + // + this.conitnueButton.Location = new System.Drawing.Point(92, 71); + this.conitnueButton.Name = "conitnueButton"; + this.conitnueButton.Size = new System.Drawing.Size(75, 23); + this.conitnueButton.TabIndex = 15; + this.conitnueButton.Text = "Continue"; + this.conitnueButton.UseVisualStyleBackColor = true; + this.conitnueButton.Click += new System.EventHandler(this.conitnueButton_Click); + // + // customCommandLabel + // + this.customCommandLabel.AutoSize = true; + this.customCommandLabel.Location = new System.Drawing.Point(8, 108); + this.customCommandLabel.Name = "customCommandLabel"; + this.customCommandLabel.Size = new System.Drawing.Size(92, 13); + this.customCommandLabel.TabIndex = 16; + this.customCommandLabel.Text = "CustomCommand:"; + // + // refreshButton + // + this.refreshButton.Location = new System.Drawing.Point(234, 12); + this.refreshButton.Name = "refreshButton"; + this.refreshButton.Size = new System.Drawing.Size(75, 23); + this.refreshButton.TabIndex = 17; + this.refreshButton.Text = "Refresh"; + this.refreshButton.UseVisualStyleBackColor = true; + this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click); + // + // customCommand + // + this.customCommand.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.customCommand.FormattingEnabled = true; + this.customCommand.Items.AddRange(new object[] { + "ReloadConfiguration", + "Reinit Logging"}); + this.customCommand.Location = new System.Drawing.Point(106, 105); + this.customCommand.Name = "customCommand"; + this.customCommand.Size = new System.Drawing.Size(121, 21); + this.customCommand.TabIndex = 18; + // + // execute + // + this.execute.Location = new System.Drawing.Point(233, 103); + this.execute.Name = "execute"; + this.execute.Size = new System.Drawing.Size(75, 23); + this.execute.TabIndex = 19; + this.execute.Text = "Execute"; + this.execute.UseVisualStyleBackColor = true; + this.execute.Click += new System.EventHandler(this.execute_Click); + // + // ServiceControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(321, 182); + this.Controls.Add(this.execute); + this.Controls.Add(this.customCommand); + this.Controls.Add(this.refreshButton); + this.Controls.Add(this.customCommandLabel); + this.Controls.Add(this.conitnueButton); + this.Controls.Add(this.pause); + this.Controls.Add(this.serviceStatus); + this.Controls.Add(this.serviceStatusLabel); + this.Controls.Add(this.exit); + this.Controls.Add(this.stop); + this.Controls.Add(this.start); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ServiceControl"; + this.Text = "ServiceControl"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ServiceControl_FormClosing); + this.contextMenu.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button start; + private System.Windows.Forms.Button stop; + private System.Windows.Forms.NotifyIcon systray; + private System.Windows.Forms.ContextMenuStrip contextMenu; + private System.Windows.Forms.ToolStripMenuItem restoreContext; + private System.Windows.Forms.ToolStripMenuItem startContext; + private System.Windows.Forms.ToolStripMenuItem stopContext; + private System.Windows.Forms.ToolStripMenuItem exitContext; + private System.Windows.Forms.Button exit; + private System.Windows.Forms.Label serviceStatusLabel; + private System.Windows.Forms.Label serviceStatus; + private System.Windows.Forms.Button pause; + private System.Windows.Forms.Button conitnueButton; + private System.Windows.Forms.Label customCommandLabel; + private System.Windows.Forms.Button refreshButton; + private System.Windows.Forms.ComboBox customCommand; + private System.Windows.Forms.Button execute; + } +} \ No newline at end of file Added: trunk/Version2/Monitor/ServiceControl.cs =================================================================== --- trunk/Version2/Monitor/ServiceControl.cs (rev 0) +++ trunk/Version2/Monitor/ServiceControl.cs 2007-03-05 22:26:02 UTC (rev 24) @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Threading; +using System.ServiceProcess; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace MPW.Monitor { + public partial class ServiceControl : Form { + private ServiceController serviceController; + private bool exitRequest; + + public ServiceControl() { + InitializeComponent(); + exitRequest = false; + serviceController = new ServiceController("MPW"); + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void port_KeyPress(object sender, KeyPressEventArgs e) { + if (!Char.IsNumber(e.KeyChar) && !Char.IsControl(e.KeyChar)) { + e.Handled = true; + } + } + + private void start_Click(object sender, EventArgs e) { + serviceController.Refresh(); + if (serviceController.Status == ServiceControllerStatus.Stopped) { + serviceController.Start(); + } + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void stop_Click(object sender, EventArgs e) { + serviceController.Refresh(); + if (serviceController.Status == ServiceControllerStatus.Running) { + serviceController.Stop(); + } + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void ServiceControl_FormClosing(object sender, FormClosingEventArgs e) { + if (!exitRequest) { + e.Cancel = true; + this.WindowState = System.Windows.Forms.FormWindowState.Minimized; + systray.Visible = true; + this.ShowInTaskbar = false; + } + } + + private void restoreContext_Click(object sender, EventArgs e) { + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + systray.Visible = false; + this.ShowInTaskbar = true; + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void startContext_Click(object sender, EventArgs e) { + serviceController.Refresh(); + if (serviceController.Status == ServiceControllerStatus.Stopped) { + serviceController.Start(); + } + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void stopContext_Click(object sender, EventArgs e) { + serviceController.Refresh(); + if (serviceController.Status == ServiceControllerStatus.Running) { + serviceController.Stop(); + } + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void exitContext_Click(object sender, EventArgs e) { + exitRequest = true; + this.Close(); + } + + private void exit_Click(object sender, EventArgs e) { + exitRequest = true; + this.Close(); + } + + private void refreshButton_Click(object sender, EventArgs e) { + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void pause_Click(object sender, EventArgs e) { + serviceController.Refresh(); + if (serviceController.Status == ServiceControllerStatus.Running) { + serviceController.Pause(); + } + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void conitnueButton_Click(object sender, EventArgs e) { + serviceController.Refresh(); + if (serviceController.Status == ServiceControllerStatus.Paused) { + serviceController.Continue(); + } + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + + private void execute_Click(object sender, EventArgs e) { + serviceController.Refresh(); + if (serviceController.Status == ServiceControllerStatus.Running) { + serviceController.ExecuteCommand(customCommand.SelectedIndex); + } + serviceController.Refresh(); + serviceStatus.Text = serviceController.Status.ToString(); + } + } +} \ No newline at end of file Added: trunk/Version2/Monitor/ServiceControl.resx =================================================================== --- trunk/Version2/Monitor/ServiceControl.resx (rev 0) +++ trunk/Version2/Monitor/ServiceControl.resx 2007-03-05 22:26:02 UTC (rev 24) @@ -0,0 +1,9179 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="systray.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="contextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>103, 17</value> + </metadata> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="systray.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + AAABAA8AAAAAAAEACAAoJAEA9gAAADAwAAABAAgAqA4AAB4lAQAgIAAAAQAIAKgIAADGMwEAGBgAAAEA + CADIBgAAbjwBABAQAAABAAgAaAUAADZDAQAAAAAAAQAgACggBACeSAEAgIAAAAEAIAAoCAEAxmgFAGBg + AAABACAAqJQAAO5wBgBQUAAAAQAgAOhnAACWBQcASEgAAAEAIACIVAAAfm0HAEBAAAABACAAKEIAAAbC + BwAwMAAAAQAgAKglAAAuBAgAICAAAAEAIACoEAAA1ikIABgYAAABACAAiAkAAH46CAAQEAAAAQAgAGgE + AAAGRAgAKAAAAAABAAAAAgAAAQAIAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAEAAAAAAACLjIwAjY2NAI+Q + kACRkZEAk5SUAJWVlQCXmJgAmZmZAJucnACdnZ0An6CgAKGhoQCjpKQApaamAKaoqACpqqoAq6ysAK2t + rQCvsLAAsbGxALO0tAC1tbUAt7i4ALi5uQC7vLwAvb6+AL/AwADBwcEAw8TEAMXFxQDHyMgAycnJAMvM + zADNzc0Az9DQANHR0QDT1NQA1dXVANfY2ADY2dkA29zcAN3d3QDf4OAA4eHhAOPk5ADl5uYA5+joAOjp + 6QDr7OwA7O3tAO/w8ADx8fEA8/T0APX19QD5+fkA/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA... [truncated message content] |
From: <mas...@us...> - 2007-03-07 21:34:34
|
Revision: 27 http://svn.sourceforge.net/mp-webinterface/?rev=27&view=rev Author: maschine Date: 2007-03-07 13:34:30 -0800 (Wed, 07 Mar 2007) Log Message: ----------- Initial commit of the MPW Control Center. Modified Paths: -------------- trunk/Version2/MPW.sln trunk/Version2/Setup/Setup.vdproj Modified: trunk/Version2/MPW.sln =================================================================== --- trunk/Version2/MPW.sln 2007-03-07 21:25:44 UTC (rev 26) +++ trunk/Version2/MPW.sln 2007-03-07 21:34:30 UTC (rev 27) @@ -7,7 +7,7 @@ Release.AspNetCompiler.Debug = "False" EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Monitor", "Monitor\Monitor.csproj", "{8B650819-E843-488A-89CF-E629A389D4DA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Control Center", "Control Center\Control Center.csproj", "{8B650819-E843-488A-89CF-E629A389D4DA}" ProjectSection(WebsiteProperties) = preProject Debug.AspNetCompiler.Debug = "True" Release.AspNetCompiler.Debug = "False" Modified: trunk/Version2/Setup/Setup.vdproj =================================================================== --- trunk/Version2/Setup/Setup.vdproj 2007-03-07 21:25:44 UTC (rev 26) +++ trunk/Version2/Setup/Setup.vdproj 2007-03-07 21:34:30 UTC (rev 27) @@ -15,62 +15,62 @@ { "Entry" { - "MsmKey" = "8:_05D805932CC71752C28FA767F3678305" - "OwnerKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" + "MsmKey" = "8:_0F712DF68ED348C597086DD86FC56227" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_05D805932CC71752C28FA767F3678305" - "OwnerKey" = "8:_EA8F7A80D3473F41C3549F182E1199AB" + "MsmKey" = "8:_3306E9F964F5FB2F9C11CD8F2ADE103C" + "OwnerKey" = "8:_0F712DF68ED348C597086DD86FC56227" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_05D805932CC71752C28FA767F3678305" - "OwnerKey" = "8:_0F712DF68ED348C597086DD86FC56227" + "MsmKey" = "8:_3306E9F964F5FB2F9C11CD8F2ADE103C" + "OwnerKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_05D805932CC71752C28FA767F3678305" - "OwnerKey" = "8:_B21808006FD74A33B7D97E8F41C2A72E" + "MsmKey" = "8:_38708A2E22BC4439A7DFB5A5CC780498" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_0F712DF68ED348C597086DD86FC56227" - "OwnerKey" = "8:_UNDEFINED" + "MsmKey" = "8:_5AA324D14C7A0BEB13CF3C6839DE8AF7" + "OwnerKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_38708A2E22BC4439A7DFB5A5CC780498" - "OwnerKey" = "8:_UNDEFINED" + "MsmKey" = "8:_5AA324D14C7A0BEB13CF3C6839DE8AF7" + "OwnerKey" = "8:_3306E9F964F5FB2F9C11CD8F2ADE103C" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" - "OwnerKey" = "8:_UNDEFINED" + "MsmKey" = "8:_5AA324D14C7A0BEB13CF3C6839DE8AF7" + "OwnerKey" = "8:_0F712DF68ED348C597086DD86FC56227" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_B21808006FD74A33B7D97E8F41C2A72E" - "OwnerKey" = "8:_UNDEFINED" + "MsmKey" = "8:_5AA324D14C7A0BEB13CF3C6839DE8AF7" + "OwnerKey" = "8:_B21808006FD74A33B7D97E8F41C2A72E" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_EA8F7A80D3473F41C3549F182E1199AB" - "OwnerKey" = "8:_0F712DF68ED348C597086DD86FC56227" + "MsmKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_EA8F7A80D3473F41C3549F182E1199AB" - "OwnerKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" + "MsmKey" = "8:_B21808006FD74A33B7D97E8F41C2A72E" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -82,19 +82,19 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_EA8F7A80D3473F41C3549F182E1199AB" + "OwnerKey" = "8:_3306E9F964F5FB2F9C11CD8F2ADE103C" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_05D805932CC71752C28FA767F3678305" + "OwnerKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" + "OwnerKey" = "8:_5AA324D14C7A0BEB13CF3C6839DE8AF7" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -249,23 +249,23 @@ } "File" { - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_05D805932CC71752C28FA767F3678305" + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3306E9F964F5FB2F9C11CD8F2ADE103C" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL" + "AssemblyAsmDisplayName" = "8:WebServer, Version=1.2.0.0, Culture=neutral, PublicKeyToken=6a8f2e8c25e1b4e0, processorArchitecture=MSIL" "ScatterAssemblies" { - "_05D805932CC71752C28FA767F3678305" + "_3306E9F964F5FB2F9C11CD8F2ADE103C" { - "Name" = "8:log4net.dll" + "Name" = "8:WebServer.dll" "Attributes" = "3:512" } } - "SourcePath" = "8:log4net.dll" + "SourcePath" = "8:WebServer.dll" "TargetName" = "8:" "Tag" = "8:" - "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" + "Folder" = "8:_4AF64E14F05F48C6B6561E3A84C622CC" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -300,23 +300,23 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_EA8F7A80D3473F41C3549F182E1199AB" + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5AA324D14C7A0BEB13CF3C6839DE8AF7" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:WebServer, Version=1.2.0.0, Culture=neutral, PublicKeyToken=6a8f2e8c25e1b4e0, processorArchitecture=MSIL" + "AssemblyAsmDisplayName" = "8:log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL" "ScatterAssemblies" { - "_EA8F7A80D3473F41C3549F182E1199AB" + "_5AA324D14C7A0BEB13CF3C6839DE8AF7" { - "Name" = "8:WebServer.dll" + "Name" = "8:log4net.dll" "Attributes" = "3:512" } } - "SourcePath" = "8:WebServer.dll" + "SourcePath" = "8:log4net.dll" "TargetName" = "8:" "Tag" = "8:" - "Folder" = "8:_4AF64E14F05F48C6B6561E3A84C622CC" + "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -541,7 +541,7 @@ { "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_13A365B1690A409EB9E87ABAF5DDA181" { - "Name" = "8:MPW Monitor" + "Name" = "8:MPW Control Center" "Arguments" = "8:" "Description" = "8:" "ShowCmd" = "3:1" @@ -580,7 +580,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B1584998A09F427082BCF46718C0C570" { "Sequence" = "3:100" - "DisplayName" = "8:Fertig" + "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid" @@ -611,7 +611,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_94D03F977132429FBBD6418777261174" { "Sequence" = "3:300" - "DisplayName" = "8:Installation bestätigen" + "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid" @@ -633,7 +633,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E05C4005485D47439C17C7AC1A1EAC65" { "Sequence" = "3:200" - "DisplayName" = "8:Installationsordner" + "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid" @@ -655,7 +655,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_EBE473BDD5F8412DBB37D16CCA223DFF" { "Sequence" = "3:100" - "DisplayName" = "8:Willkommen" + "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid" @@ -712,7 +712,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_BED07783EE9947B297A58A9FAEEF6827" { "Sequence" = "3:100" - "DisplayName" = "8:Status" + "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid" @@ -762,7 +762,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_BEB2FE317C50407D87F081FB69A4FD9E" { "Sequence" = "3:100" - "DisplayName" = "8:Status" + "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid" @@ -806,7 +806,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D99336E17C9749B0944FC73E4CFE2CDD" { "Sequence" = "3:100" - "DisplayName" = "8:Fertig" + "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid" @@ -856,7 +856,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2503CF60970443588CDBC79F581A5BD4" { "Sequence" = "3:100" - "DisplayName" = "8:Willkommen" + "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid" @@ -904,7 +904,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A16E4C3A15EF4A8990691556F34BE558" { "Sequence" = "3:400" - "DisplayName" = "8:Installation bestätigen" + "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid" @@ -926,7 +926,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A58153D0871E4939901D4247BA51B655" { "Sequence" = "3:300" - "DisplayName" = "8:Installationsordner" + "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid" @@ -961,7 +961,7 @@ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E643D62580F74973B53C88C67DCF9D77" { "Sequence" = "3:200" - "DisplayName" = "8:Lizenzvertrag" + "DisplayName" = "8:License Agreement" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:<VsdDialogDir>\\VsdLicenseDlg.wid" @@ -1043,7 +1043,7 @@ } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_0F712DF68ED348C597086DD86FC56227" { - "SourcePath" = "8:..\\Monitor\\obj\\Release\\MPW Monitor.exe" + "SourcePath" = "8:..\\Control Center\\obj\\Release\\MPW Monitor.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" @@ -1126,8 +1126,5 @@ } } } - "VJSharpPlugin" - { - } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2007-03-07 21:45:17
|
Revision: 29 http://svn.sourceforge.net/mp-webinterface/?rev=29&view=rev Author: maschine Date: 2007-03-07 13:45:15 -0800 (Wed, 07 Mar 2007) Log Message: ----------- 2nd try: initial commit of the MPW Control Center ;-) Added Paths: ----------- trunk/Version2/Control Center/ trunk/Version2/Control Center/Control Center.cs trunk/Version2/Control Center/Control Center.csproj trunk/Version2/Control Center/Control_Center_App.Designer.cs trunk/Version2/Control Center/Control_Center_App.cs trunk/Version2/Control Center/Control_Center_App.resx trunk/Version2/Control Center/Properties/ trunk/Version2/Control Center/Properties/AssemblyInfo.cs trunk/Version2/Control Center/mp.ico Added: trunk/Version2/Control Center/Control Center.cs =================================================================== --- trunk/Version2/Control Center/Control Center.cs (rev 0) +++ trunk/Version2/Control Center/Control Center.cs 2007-03-07 21:45:15 UTC (rev 29) @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace MPW.Control_Center +{ + static class Control_Center + { + /// <summary> + /// The main entry point for the MPW Control Center. + /// </summary> + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Control_Center_App()); + } + } +} \ No newline at end of file Added: trunk/Version2/Control Center/Control Center.csproj =================================================================== --- trunk/Version2/Control Center/Control Center.csproj (rev 0) +++ trunk/Version2/Control Center/Control Center.csproj 2007-03-07 21:45:15 UTC (rev 29) @@ -0,0 +1,81 @@ +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{8B650819-E843-488A-89CF-E629A389D4DA}</ProjectGuid> + <OutputType>WinExe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>MPW.Control_Center</RootNamespace> + <AssemblyName>MPW Control Center</AssemblyName> + <ApplicationIcon>mp.ico</ApplicationIcon> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Data" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.ServiceProcess" /> + <Reference Include="System.Web" /> + <Reference Include="System.Web.Mobile" /> + <Reference Include="System.Web.RegularExpressions" /> + <Reference Include="System.Web.Services" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Control Center.cs" /> + <Compile Include="Control_Center_App.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Control_Center_App.Designer.cs"> + <DependentUpon>Control_Center_App.cs</DependentUpon> + </Compile> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\WebServer\WebServer.csproj"> + <Project>{4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}</Project> + <Name>WebServer</Name> + <Private>True</Private> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Control_Center_App.resx"> + <DependentUpon>Control_Center_App.cs</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <Content Include="mp.ico" /> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PostBuildEvent> + </PostBuildEvent> + </PropertyGroup> +</Project> \ No newline at end of file Added: trunk/Version2/Control Center/Control_Center_App.Designer.cs =================================================================== --- trunk/Version2/Control Center/Control_Center_App.Designer.cs (rev 0) +++ trunk/Version2/Control Center/Control_Center_App.Designer.cs 2007-03-07 21:45:15 UTC (rev 29) @@ -0,0 +1,382 @@ +namespace MPW.Control_Center +{ + partial class Control_Center_App + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Control_Center_App)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.statusMPWServerConn = new System.Windows.Forms.Label(); + this.statusTVService = new System.Windows.Forms.Label(); + this.statusTVServerConn = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.saveButton = new System.Windows.Forms.Button(); + this.bindIPBox = new System.Windows.Forms.TextBox(); + this.accessModeDropDown = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.label7 = new System.Windows.Forms.Label(); + this.portBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.startstopButton = new System.Windows.Forms.Button(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.button1 = new System.Windows.Forms.Button(); + this.trayIcon = new System.Windows.Forms.NotifyIcon(this.components); + this.trayContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.trayStart = new System.Windows.Forms.ToolStripMenuItem(); + this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.trayContextMenu.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.statusMPWServerConn); + this.groupBox1.Controls.Add(this.statusTVService); + this.groupBox1.Controls.Add(this.statusTVServerConn); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(300, 139); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Status information"; + // + // statusMPWServerConn + // + this.statusMPWServerConn.AutoSize = true; + this.statusMPWServerConn.Location = new System.Drawing.Point(139, 102); + this.statusMPWServerConn.Name = "statusMPWServerConn"; + this.statusMPWServerConn.Size = new System.Drawing.Size(86, 13); + this.statusMPWServerConn.TabIndex = 7; + this.statusMPWServerConn.Text = "Not checked yet"; + // + // statusTVService + // + this.statusTVService.AutoSize = true; + this.statusTVService.Location = new System.Drawing.Point(139, 35); + this.statusTVService.Name = "statusTVService"; + this.statusTVService.Size = new System.Drawing.Size(86, 13); + this.statusTVService.TabIndex = 6; + this.statusTVService.Text = "Not checked yet"; + // + // statusTVServerConn + // + this.statusTVServerConn.AutoSize = true; + this.statusTVServerConn.Location = new System.Drawing.Point(139, 67); + this.statusTVServerConn.Name = "statusTVServerConn"; + this.statusTVServerConn.Size = new System.Drawing.Size(86, 13); + this.statusTVServerConn.TabIndex = 5; + this.statusTVServerConn.Text = "Not checked yet"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 102); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(92, 13); + this.label3.TabIndex = 2; + this.label3.Text = "MPW Webserver:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 67); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(127, 13); + this.label2.TabIndex = 1; + this.label2.Text = "Connection to TV Server:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 35); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(63, 13); + this.label1.TabIndex = 0; + this.label1.Text = "TV Service:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(6, 118); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(92, 13); + this.label6.TabIndex = 4; + this.label6.Text = "MPW Homepage:"; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(104, 118); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(166, 13); + this.linkLabel1.TabIndex = 3; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "http://www.mp-webinterface.com"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.saveButton); + this.groupBox2.Controls.Add(this.bindIPBox); + this.groupBox2.Controls.Add(this.accessModeDropDown); + this.groupBox2.Controls.Add(this.label9); + this.groupBox2.Controls.Add(this.label8); + this.groupBox2.Controls.Add(this.linkLabel2); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.portBox); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Location = new System.Drawing.Point(318, 12); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(300, 283); + this.groupBox2.TabIndex = 1; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "MPW Webserver setup"; + // + // saveButton + // + this.saveButton.Location = new System.Drawing.Point(126, 132); + this.saveButton.Name = "saveButton"; + this.saveButton.Size = new System.Drawing.Size(115, 23); + this.saveButton.TabIndex = 10; + this.saveButton.Text = "Save Configuration"; + this.saveButton.UseVisualStyleBackColor = true; + this.saveButton.Click += new System.EventHandler(this.saveButton_Click); + // + // bindIPBox + // + this.bindIPBox.Location = new System.Drawing.Point(126, 59); + this.bindIPBox.Name = "bindIPBox"; + this.bindIPBox.Size = new System.Drawing.Size(115, 20); + this.bindIPBox.TabIndex = 9; + // + // accessModeDropDown + // + this.accessModeDropDown.FormattingEnabled = true; + this.accessModeDropDown.Items.AddRange(new object[] { + "Local", + "Global", + "Restricted"}); + this.accessModeDropDown.Location = new System.Drawing.Point(126, 94); + this.accessModeDropDown.Name = "accessModeDropDown"; + this.accessModeDropDown.Size = new System.Drawing.Size(115, 21); + this.accessModeDropDown.TabIndex = 8; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(6, 102); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(74, 13); + this.label9.TabIndex = 7; + this.label9.Text = "Access mode:"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(6, 67); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(81, 13); + this.label8.TabIndex = 6; + this.label8.Text = "Bind to local IP:"; + // + // linkLabel2 + // + this.linkLabel2.AutoSize = true; + this.linkLabel2.Location = new System.Drawing.Point(82, 262); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(0, 13); + this.linkLabel2.TabIndex = 5; + this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(9, 263); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(66, 13); + this.label7.TabIndex = 4; + this.label7.Text = "Server URL:"; + // + // portBox + // + this.portBox.Location = new System.Drawing.Point(126, 32); + this.portBox.Name = "portBox"; + this.portBox.Size = new System.Drawing.Size(115, 20); + this.portBox.TabIndex = 1; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(6, 35); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(114, 13); + this.label4.TabIndex = 0; + this.label4.Text = "MPW Webserver Port:"; + // + // startstopButton + // + this.startstopButton.Location = new System.Drawing.Point(9, 37); + this.startstopButton.Name = "startstopButton"; + this.startstopButton.Size = new System.Drawing.Size(100, 23); + this.startstopButton.TabIndex = 3; + this.startstopButton.Text = "Start"; + this.startstopButton.UseVisualStyleBackColor = true; + this.startstopButton.Click += new System.EventHandler(this.startstopButton_Click); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.button1); + this.groupBox3.Controls.Add(this.label6); + this.groupBox3.Controls.Add(this.linkLabel1); + this.groupBox3.Controls.Add(this.startstopButton); + this.groupBox3.Location = new System.Drawing.Point(12, 157); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(300, 138); + this.groupBox3.TabIndex = 2; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "MPW Webserver Control"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(142, 37); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(83, 23); + this.button1.TabIndex = 5; + this.button1.Text = "Refresh status"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // trayIcon + // + this.trayIcon.ContextMenuStrip = this.trayContextMenu; + this.trayIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("trayIcon.Icon"))); + this.trayIcon.Text = "MPW"; + this.trayIcon.Visible = true; + this.trayIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.trayIcon_MouseDoubleClick); + // + // trayContextMenu + // + this.trayContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.trayStart, + this.stopToolStripMenuItem, + this.exitToolStripMenuItem}); + this.trayContextMenu.Name = "trayContextMenu"; + this.trayContextMenu.Size = new System.Drawing.Size(110, 70); + this.trayContextMenu.Text = "MPW"; + // + // trayStart + // + this.trayStart.Name = "trayStart"; + this.trayStart.Size = new System.Drawing.Size(109, 22); + this.trayStart.Text = "Start"; + this.trayStart.Click += new System.EventHandler(this.trayStart_Click); + // + // stopToolStripMenuItem + // + this.stopToolStripMenuItem.Name = "stopToolStripMenuItem"; + this.stopToolStripMenuItem.Size = new System.Drawing.Size(109, 22); + this.stopToolStripMenuItem.Text = "Stop"; + this.stopToolStripMenuItem.Click += new System.EventHandler(this.stopToolStripMenuItem_Click); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(109, 22); + this.exitToolStripMenuItem.Text = "Exit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + // + // Control_Center_App + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(632, 307); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "Control_Center_App"; + this.Text = "MPW Control Center"; + this.Resize += new System.EventHandler(this.Control_Center_App_Resize); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Control_Center_App_FormClosing); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.trayContextMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox portBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button startstopButton; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.LinkLabel linkLabel2; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label statusTVServerConn; + private System.Windows.Forms.Label statusMPWServerConn; + private System.Windows.Forms.Label statusTVService; + private System.Windows.Forms.ComboBox accessModeDropDown; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox bindIPBox; + private System.Windows.Forms.Button saveButton; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.NotifyIcon trayIcon; + private System.Windows.Forms.ContextMenuStrip trayContextMenu; + private System.Windows.Forms.ToolStripMenuItem trayStart; + private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.Button button1; + } +} + Added: trunk/Version2/Control Center/Control_Center_App.cs =================================================================== --- trunk/Version2/Control Center/Control_Center_App.cs (rev 0) +++ trunk/Version2/Control Center/Control_Center_App.cs 2007-03-07 21:45:15 UTC (rev 29) @@ -0,0 +1,226 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.ServiceProcess; +using System.Xml; + +namespace MPW.Control_Center +{ + public partial class Control_Center_App : Form + { + //Service Controllers + private ServiceController TVServiceController = new ServiceController("TVService"); + private ServiceController MPWServiceController = new ServiceController("MPW"); + + //MPW Webserver settings + private String appPath; + private String port; + private String bindIP; + private int accesMode; + + private String file = System.AppDomain.CurrentDomain.BaseDirectory + "Configuration.xml"; + + public Control_Center_App() + { + InitializeComponent(); + RefreshControllers(); + LoadSettings(); + } + + private void RefreshControllers() + { + //MPW Webserver + MPWServiceController.Refresh(); + try + { + statusMPWServerConn.Text = MPWServiceController.Status.ToString(); + } + catch + { + statusMPWServerConn.Text = "Error: Service not found!"; + startstopButton.Enabled = false; + } + if (statusMPWServerConn.Text == "Running") + { + statusMPWServerConn.ForeColor = Color.Green; + startstopButton.Enabled = true; + } + else + { + statusMPWServerConn.ForeColor = Color.Red; + startstopButton.Enabled = false; + } + + //TV Server + TVServiceController.Refresh(); + try + { + statusTVService.Text = TVServiceController.Status.ToString(); + } + catch + { + statusTVService.Text = "Error: Service not found!"; + } + if (statusTVService.Text == "Running") + statusTVService.ForeColor = Color.Green; + else + statusTVService.ForeColor = Color.Red; + } + + private void startstopButton_Click(object sender, EventArgs e) + { + if (startstopButton.Text == "Start") + Start(); + else + Stop(); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + System.Diagnostics.Process.Start(linkLabel1.Text); + } + + private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + System.Diagnostics.Process.Start(linkLabel2.Text); + } + + //Start the server + private void Start() + { + RefreshControllers(); + try + { + MPWServiceController.Start(); + startstopButton.Text = "Stop"; + } + catch + { + statusMPWServerConn.Text = "Error, could not start Service."; + } + RefreshControllers(); + } + + //Stop the server + private void Stop() + { + RefreshControllers(); + if (statusMPWServerConn.Text == "Running") + { + MPWServiceController.Stop(); + startstopButton.Text = "Start"; + } + RefreshControllers(); + } + + //Build a String with the server URL + private String ConstructServerURL() + { + String url = "http://"; + url += bindIP; + url += ":" + port; + url += "/"; + return url; + } + + //Load the configuration + private void LoadSettings() + { + XmlDocument doc = new XmlDocument(); + doc.Load(file); + XmlNode node = doc.DocumentElement.SelectSingleNode("/configuration/bindAddress"); + bindIP = node.InnerText; + node = doc.DocumentElement.SelectSingleNode("/configuration/port"); + port = node.InnerText; + node = doc.DocumentElement.SelectSingleNode("/configuration/allowedAccesMode"); + accesMode = int.Parse(node.InnerText); + + //Set the read values to the various TextBoxes + portBox.Text = port; + bindIPBox.Text = bindIP; + accessModeDropDown.SelectedIndex = accesMode; + linkLabel2.Text = ConstructServerURL(); + } + + //Save the configuration + private void SaveSettings() + { + XmlDocument doc = new XmlDocument(); + doc.Load(file); + + XmlNode node = doc.DocumentElement.SelectSingleNode("/configuration/bindAddress"); + node.InnerText = bindIP; + node = doc.DocumentElement.SelectSingleNode("/configuration/port"); + node.InnerText = port; + node = doc.DocumentElement.SelectSingleNode("/configuration/allowedAccesMode"); + node.InnerText = accesMode.ToString(); + + doc.Save(file); + } + + private void saveButton_Click(object sender, EventArgs e) + { + port = portBox.Text; + bindIP = bindIPBox.Text; + accesMode = accessModeDropDown.SelectedIndex; + SaveSettings(); + if (statusMPWServerConn.Text == "Running") + MPWServiceController.ExecuteCommand(0); //ReloadConfiguration + linkLabel2.Text = ConstructServerURL(); + } + + //Restore by double-clicking the tray icon + private void trayIcon_MouseDoubleClick(object sender, MouseEventArgs e) + { + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + trayIcon.Visible = true; + this.ShowInTaskbar = true; + RefreshControllers(); + } + + //Minimize to tray on closing + private void Control_Center_App_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = true; + this.WindowState = System.Windows.Forms.FormWindowState.Minimized; + this.ShowInTaskbar = false; + } + + //Tray menu action "Exit" + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + trayIcon.Dispose(); + this.Dispose(); + } + + //Tray menu action "Stop" + private void stopToolStripMenuItem_Click(object sender, EventArgs e) + { + Start(); + } + + //Tray menu action "Start" + private void trayStart_Click(object sender, EventArgs e) + { + Stop(); + } + + //Status refreh button + private void button1_Click(object sender, EventArgs e) + { + RefreshControllers(); + } + + private void Control_Center_App_Resize(object sender, EventArgs e) + { + if (this.WindowState == FormWindowState.Minimized) + this.ShowInTaskbar = false; + } + + } +} \ No newline at end of file Added: trunk/Version2/Control Center/Control_Center_App.resx =================================================================== --- trunk/Version2/Control Center/Control_Center_App.resx (rev 0) +++ trunk/Version2/Control Center/Control_Center_App.resx 2007-03-07 21:45:15 UTC (rev 29) @@ -0,0 +1,18231 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="trayIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="trayContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>110, 17</value> + </metadata> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="trayIcon.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + AAABAA8AAAAAAAEACAAoJAEA9gAAADAwAAABAAgAqA4AAB4lAQAgIAAAAQAIAKgIAADGMwEAGBgAAAEA + CADIBgAAbjwBABAQAAABAAgAaAUAADZDAQAAAAAAAQAgACggBACeSAEAgIAAAAEAIAAoCAEAxmgFAGBg + AAABACAAqJQAAO5wBgBQUAAAAQAgAOhnAACWBQcASEgAAAEAIACIVAAAfm0HAEBAAAABACAAKEIAAAbC + BwAwMAAAAQAgAKglAAAuBAgAICAAAAEAIACoEAAA1ikIABgYAAABACAAiAkAAH46CAAQEAAAAQAgAGgE + AAAGRAgAKAAAAAABAAAAAgAAAQAIAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAEAAAAAAACLjIwAjY2NAI+Q + kACRkZEAk5SUAJWVlQCXmJgAmZmZAJucnACdnZ0An6CgAKGhoQCjpKQApaamAKaoqACpqqoAq6ysAK2t + rQCvsLAAsbGxALO0tAC1tbUAt7i4ALi5uQC7vLwAvb6+AL/AwADBwcEAw8TEAMXFxQDHyMgAycnJAMvM + zADNzc0Az9DQANHR0QDT1NQA1dXVANfY2ADY2dkA29zcAN3d3QDf4OAA4eHhAOPk5ADl5uYA5+joAOjp + 6QDr7OwA7O3tAO/w8ADx8fEA8/T0APX19QD5+fkA/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA... [truncated message content] |
From: <mas...@us...> - 2007-03-08 12:13:10
|
Revision: 30 http://svn.sourceforge.net/mp-webinterface/?rev=30&view=rev Author: maschine Date: 2007-03-08 04:13:06 -0800 (Thu, 08 Mar 2007) Log Message: ----------- -Fixed bug with startstopButton -Set physical path on save settings -Added TestPage Modified Paths: -------------- trunk/Version2/Control Center/Control_Center_App.cs trunk/Version2/Setup/Setup.vdproj Added Paths: ----------- trunk/Version2/TestPage/ trunk/Version2/TestPage/Test.htm Modified: trunk/Version2/Control Center/Control_Center_App.cs =================================================================== --- trunk/Version2/Control Center/Control_Center_App.cs 2007-03-07 21:45:15 UTC (rev 29) +++ trunk/Version2/Control Center/Control_Center_App.cs 2007-03-08 12:13:06 UTC (rev 30) @@ -18,16 +18,16 @@ private ServiceController MPWServiceController = new ServiceController("MPW"); //MPW Webserver settings - private String appPath; private String port; private String bindIP; private int accesMode; - private String file = System.AppDomain.CurrentDomain.BaseDirectory + "Configuration.xml"; + private String file; public Control_Center_App() { InitializeComponent(); + file = System.AppDomain.CurrentDomain.BaseDirectory + "Configuration.xml"; RefreshControllers(); LoadSettings(); } @@ -48,12 +48,12 @@ if (statusMPWServerConn.Text == "Running") { statusMPWServerConn.ForeColor = Color.Green; - startstopButton.Enabled = true; + startstopButton.Text = "Stop"; } else { statusMPWServerConn.ForeColor = Color.Red; - startstopButton.Enabled = false; + startstopButton.Text = "Start"; } //TV Server @@ -159,6 +159,8 @@ node.InnerText = port; node = doc.DocumentElement.SelectSingleNode("/configuration/allowedAccesMode"); node.InnerText = accesMode.ToString(); + node = doc.DocumentElement.SelectSingleNode("/configuration/physicalPath"); + node.InnerText = System.AppDomain.CurrentDomain.BaseDirectory + @"wwwroot\"; doc.Save(file); } @@ -169,8 +171,17 @@ bindIP = bindIPBox.Text; accesMode = accessModeDropDown.SelectedIndex; SaveSettings(); - if (statusMPWServerConn.Text == "Running") - MPWServiceController.ExecuteCommand(0); //ReloadConfiguration + try + { + if (MPWServiceController.Status == ServiceControllerStatus.Running) + MPWServiceController.ExecuteCommand(0); //ReloadConfiguration + else + MessageBox.Show("You will need to restart the server to use the new configuration!"); + } + catch + { + MessageBox.Show("Error setting the new configuration."); + } linkLabel2.Text = ConstructServerURL(); } Modified: trunk/Version2/Setup/Setup.vdproj =================================================================== --- trunk/Version2/Setup/Setup.vdproj 2007-03-07 21:45:15 UTC (rev 29) +++ trunk/Version2/Setup/Setup.vdproj 2007-03-08 12:13:06 UTC (rev 30) @@ -21,18 +21,6 @@ } "Entry" { - "MsmKey" = "8:_3306E9F964F5FB2F9C11CD8F2ADE103C" - "OwnerKey" = "8:_0F712DF68ED348C597086DD86FC56227" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_3306E9F964F5FB2F9C11CD8F2ADE103C" - "OwnerKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_38708A2E22BC4439A7DFB5A5CC780498" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -46,7 +34,7 @@ "Entry" { "MsmKey" = "8:_5AA324D14C7A0BEB13CF3C6839DE8AF7" - "OwnerKey" = "8:_3306E9F964F5FB2F9C11CD8F2ADE103C" + "OwnerKey" = "8:_F7CBCAAB235DF8EE243AD47CE5AE60AD" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -75,6 +63,24 @@ } "Entry" { + "MsmKey" = "8:_DB1EB6A709194CA9A153A70E56357E20" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F7CBCAAB235DF8EE243AD47CE5AE60AD" + "OwnerKey" = "8:_0F712DF68ED348C597086DD86FC56227" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F7CBCAAB235DF8EE243AD47CE5AE60AD" + "OwnerKey" = "8:_7CD9E17A5A2443F381DBF7313078D211" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_B21808006FD74A33B7D97E8F41C2A72E" "MsmSig" = "8:_UNDEFINED" @@ -82,7 +88,7 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_3306E9F964F5FB2F9C11CD8F2ADE103C" + "OwnerKey" = "8:_F7CBCAAB235DF8EE243AD47CE5AE60AD" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -249,23 +255,43 @@ } "File" { - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3306E9F964F5FB2F9C11CD8F2ADE103C" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_38708A2E22BC4439A7DFB5A5CC780498" { + "SourcePath" = "8:LICENSE.rtf" + "TargetName" = "8:LICENSE.rtf" + "Tag" = "8:" + "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5AA324D14C7A0BEB13CF3C6839DE8AF7" + { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:WebServer, Version=1.2.0.0, Culture=neutral, PublicKeyToken=6a8f2e8c25e1b4e0, processorArchitecture=MSIL" + "AssemblyAsmDisplayName" = "8:log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL" "ScatterAssemblies" { - "_3306E9F964F5FB2F9C11CD8F2ADE103C" + "_5AA324D14C7A0BEB13CF3C6839DE8AF7" { - "Name" = "8:WebServer.dll" + "Name" = "8:log4net.dll" "Attributes" = "3:512" } } - "SourcePath" = "8:WebServer.dll" + "SourcePath" = "8:log4net.dll" "TargetName" = "8:" "Tag" = "8:" - "Folder" = "8:_4AF64E14F05F48C6B6561E3A84C622CC" + "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -280,12 +306,12 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_38708A2E22BC4439A7DFB5A5CC780498" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DB1EB6A709194CA9A153A70E56357E20" { - "SourcePath" = "8:LICENSE.rtf" - "TargetName" = "8:LICENSE.rtf" + "SourcePath" = "8:..\\TestPage\\Test.htm" + "TargetName" = "8:Test.htm" "Tag" = "8:" - "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" + "Folder" = "8:_630010CA5B27470EBA4BEB29C8484993" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -300,23 +326,23 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5AA324D14C7A0BEB13CF3C6839DE8AF7" + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F7CBCAAB235DF8EE243AD47CE5AE60AD" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL" + "AssemblyAsmDisplayName" = "8:WebServer, Version=1.2.0.0, Culture=neutral, PublicKeyToken=6a8f2e8c25e1b4e0, processorArchitecture=MSIL" "ScatterAssemblies" { - "_5AA324D14C7A0BEB13CF3C6839DE8AF7" + "_F7CBCAAB235DF8EE243AD47CE5AE60AD" { - "Name" = "8:log4net.dll" + "Name" = "8:WebServer.dll" "Attributes" = "3:512" } } - "SourcePath" = "8:log4net.dll" + "SourcePath" = "8:WebServer.dll" "TargetName" = "8:" "Tag" = "8:" - "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" + "Folder" = "8:_4AF64E14F05F48C6B6561E3A84C622CC" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -380,6 +406,17 @@ "Property" = "8:TARGETDIR" "Folders" { + "{9EF0B969-E518-4E46-987F-47570745A589}:_630010CA5B27470EBA4BEB29C8484993" + { + "Name" = "8:wwwroot" + "AlwaysCreate" = "11:TRUE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_2F2F0EE650724C609BA21DC3BA41CEC6" + "Folders" + { + } + } } } "{1525181F-901A-416C-8A58-119130FE478E}:_45AC748FDB2649E7871E48E65EC863D3" @@ -420,7 +457,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:MPW" "ProductCode" = "8:{FFA1A109-9C5B-4D11-9B85-9E8B4F5392E4}" - "PackageCode" = "8:{9B6BD622-B13D-4D05-B187-801B6D9E200D}" + "PackageCode" = "8:{91217F2D-1313-4C9F-B9B7-124AA41D22C3}" "UpgradeCode" = "8:{4F72B4EB-D91C-4E25-9ABE-C7669CDE4B98}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" @@ -1043,7 +1080,7 @@ } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_0F712DF68ED348C597086DD86FC56227" { - "SourcePath" = "8:..\\Control Center\\obj\\Release\\MPW Monitor.exe" + "SourcePath" = "8:..\\Control Center\\obj\\Release\\MPW Control Center.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" Added: trunk/Version2/TestPage/Test.htm =================================================================== --- trunk/Version2/TestPage/Test.htm (rev 0) +++ trunk/Version2/TestPage/Test.htm 2007-03-08 12:13:06 UTC (rev 30) @@ -0,0 +1 @@ +Hello World! \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2007-03-09 09:30:03
|
Revision: 31 http://svn.sourceforge.net/mp-webinterface/?rev=31&view=rev Author: maschine Date: 2007-03-09 01:30:00 -0800 (Fri, 09 Mar 2007) Log Message: ----------- -Added refresh Timer -Added SVN:ignore to bin/obj folders Modified Paths: -------------- trunk/Version2/Control Center/Control_Center_App.Designer.cs trunk/Version2/Control Center/Control_Center_App.cs trunk/Version2/Control Center/Control_Center_App.resx trunk/Version2/Setup/Setup.vdproj Added Paths: ----------- trunk/Version2/TestPage/Index.htm Removed Paths: ------------- trunk/Version2/TestPage/Test.htm Property Changed: ---------------- trunk/Version2/ trunk/Version2/Control Center/ trunk/Version2/Setup/ trunk/Version2/WebServer/ trunk/Version2/WindowsService/ Property changes on: trunk/Version2 ___________________________________________________________________ Name: svn:ignore + MPW.suo Property changes on: trunk/Version2/Control Center ___________________________________________________________________ Name: svn:ignore + obj bin Modified: trunk/Version2/Control Center/Control_Center_App.Designer.cs =================================================================== --- trunk/Version2/Control Center/Control_Center_App.Designer.cs 2007-03-08 12:13:06 UTC (rev 30) +++ trunk/Version2/Control Center/Control_Center_App.Designer.cs 2007-03-09 09:30:00 UTC (rev 31) @@ -57,6 +57,7 @@ this.trayStart = new System.Windows.Forms.ToolStripMenuItem(); this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.refreshTimer = new System.Windows.Forms.Timer(this.components); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); @@ -323,6 +324,12 @@ this.exitToolStripMenuItem.Text = "Exit"; this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // + // refreshTimer + // + this.refreshTimer.Enabled = true; + this.refreshTimer.Interval = 1000; + this.refreshTimer.Tick += new System.EventHandler(this.refreshTimer_Tick); + // // Control_Center_App // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -377,6 +384,7 @@ private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; private System.Windows.Forms.Button button1; + private System.Windows.Forms.Timer refreshTimer; } } Modified: trunk/Version2/Control Center/Control_Center_App.cs =================================================================== --- trunk/Version2/Control Center/Control_Center_App.cs 2007-03-08 12:13:06 UTC (rev 30) +++ trunk/Version2/Control Center/Control_Center_App.cs 2007-03-09 09:30:00 UTC (rev 31) @@ -227,11 +227,19 @@ RefreshControllers(); } + //Minimize to tray on minimize private void Control_Center_App_Resize(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) this.ShowInTaskbar = false; } + //Update the Service status + private void refreshTimer_Tick(object sender, EventArgs e) + { + if (this.WindowState != System.Windows.Forms.FormWindowState.Minimized) + RefreshControllers(); + } + } } \ No newline at end of file Modified: trunk/Version2/Control Center/Control_Center_App.resx =================================================================== --- trunk/Version2/Control Center/Control_Center_App.resx 2007-03-08 12:13:06 UTC (rev 30) +++ trunk/Version2/Control Center/Control_Center_App.resx 2007-03-09 09:30:00 UTC (rev 31) @@ -9176,6 +9176,9 @@ AAD//wAA//8AAA== </value> </data> + <metadata name="refreshTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>246, 17</value> + </metadata> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <value> AAABAA8AAAAAAAEACAAoJAEA9gAAADAwAAABAAgAqA4AAB4lAQAgIAAAAQAIAKgIAADGMwEAGBgAAAEA Property changes on: trunk/Version2/Setup ___________________________________________________________________ Name: svn:ignore + Debug Release Modified: trunk/Version2/Setup/Setup.vdproj =================================================================== --- trunk/Version2/Setup/Setup.vdproj 2007-03-08 12:13:06 UTC (rev 30) +++ trunk/Version2/Setup/Setup.vdproj 2007-03-09 09:30:00 UTC (rev 31) @@ -63,7 +63,7 @@ } "Entry" { - "MsmKey" = "8:_DB1EB6A709194CA9A153A70E56357E20" + "MsmKey" = "8:_CB8899743E654F4DA69502F65F066B34" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } @@ -306,12 +306,12 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DB1EB6A709194CA9A153A70E56357E20" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CB8899743E654F4DA69502F65F066B34" { - "SourcePath" = "8:..\\TestPage\\Test.htm" - "TargetName" = "8:Test.htm" + "SourcePath" = "8:..\\TestPage\\Index.htm" + "TargetName" = "8:Index.htm" "Tag" = "8:" - "Folder" = "8:_630010CA5B27470EBA4BEB29C8484993" + "Folder" = "8:_3AAF0448C26C4EFC8D390F14EF2EACFB" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -457,14 +457,14 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:MPW" "ProductCode" = "8:{FFA1A109-9C5B-4D11-9B85-9E8B4F5392E4}" - "PackageCode" = "8:{91217F2D-1313-4C9F-B9B7-124AA41D22C3}" + "PackageCode" = "8:{32952FCB-D143-40A8-8CAD-76D0E157BA34}" "UpgradeCode" = "8:{4F72B4EB-D91C-4E25-9ABE-C7669CDE4B98}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" "ProductVersion" = "8:0.1" - "Manufacturer" = "8:Team Mediaportal" + "Manufacturer" = "8:Team MediaPortal" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:" "Title" = "8:MPW" Added: trunk/Version2/TestPage/Index.htm =================================================================== --- trunk/Version2/TestPage/Index.htm (rev 0) +++ trunk/Version2/TestPage/Index.htm 2007-03-09 09:30:00 UTC (rev 31) @@ -0,0 +1 @@ +Hello World! \ No newline at end of file Deleted: trunk/Version2/TestPage/Test.htm =================================================================== --- trunk/Version2/TestPage/Test.htm 2007-03-08 12:13:06 UTC (rev 30) +++ trunk/Version2/TestPage/Test.htm 2007-03-09 09:30:00 UTC (rev 31) @@ -1 +0,0 @@ -Hello World! \ No newline at end of file Property changes on: trunk/Version2/WebServer ___________________________________________________________________ Name: svn:ignore + obj bin Property changes on: trunk/Version2/WindowsService ___________________________________________________________________ Name: svn:ignore + obj bin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mis...@us...> - 2007-03-09 14:19:10
|
Revision: 32 http://svn.sourceforge.net/mp-webinterface/?rev=32&view=rev Author: misterd_sf Date: 2007-03-09 06:19:08 -0800 (Fri, 09 Mar 2007) Log Message: ----------- Added two custom commands: Reload Configuration and Reinit Logging Modified Paths: -------------- trunk/Version2/WebServer/Server.cs trunk/Version2/WebServer/WebServer.csproj trunk/Version2/WindowsService/Service.Designer.cs trunk/Version2/WindowsService/Service.cs Added Paths: ----------- trunk/Version2/WebServer/CustomCommands.cs Added: trunk/Version2/WebServer/CustomCommands.cs =================================================================== --- trunk/Version2/WebServer/CustomCommands.cs (rev 0) +++ trunk/Version2/WebServer/CustomCommands.cs 2007-03-09 14:19:08 UTC (rev 32) @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace MPW.WebServer { + /// <summary> + /// Enumeration of known Custom Commands of the server and windows service + /// </summary> + public enum CustomCommands { + /// <summary> + /// Reloads the configuration and also filename from AppConfig. + /// </summary> + ReloadConfiguration=128, + /// <summary> + /// Reinits logging and reading the new config file name from AppConfig. + /// </summary> + ReinitLogging=129 + } +} Modified: trunk/Version2/WebServer/Server.cs =================================================================== --- trunk/Version2/WebServer/Server.cs 2007-03-09 09:30:00 UTC (rev 31) +++ trunk/Version2/WebServer/Server.cs 2007-03-09 14:19:08 UTC (rev 32) @@ -146,8 +146,16 @@ } finally { _host = null; log.Debug("Web server stopped."); + _shutdownInProgress = false; } } + public void Reload(ServerConfiguration configuration) { + Stop(); + _configuration = configuration; + String tempPhysicalPath = configuration.PhysicalPath; + _configuration.PhysicalPath = tempPhysicalPath.EndsWith("\\", StringComparison.Ordinal) ? tempPhysicalPath : tempPhysicalPath + "\\"; + Start(); + } #endregion #region event handling Modified: trunk/Version2/WebServer/WebServer.csproj =================================================================== --- trunk/Version2/WebServer/WebServer.csproj 2007-03-09 09:30:00 UTC (rev 31) +++ trunk/Version2/WebServer/WebServer.csproj 2007-03-09 14:19:08 UTC (rev 32) @@ -48,6 +48,7 @@ <ItemGroup> <Compile Include="ByteParser.cs" /> <Compile Include="ByteString.cs" /> + <Compile Include="CustomCommands.cs" /> <Compile Include="ServerConfiguration.cs" /> <Compile Include="Connection.cs" /> <Compile Include="Host.cs" /> Modified: trunk/Version2/WindowsService/Service.Designer.cs =================================================================== --- trunk/Version2/WindowsService/Service.Designer.cs 2007-03-09 09:30:00 UTC (rev 31) +++ trunk/Version2/WindowsService/Service.Designer.cs 2007-03-09 14:19:08 UTC (rev 32) @@ -26,7 +26,7 @@ this.eventLog = new System.Diagnostics.EventLog(); ((System.ComponentModel.ISupportInitialize)(this.eventLog)).BeginInit(); // - // MPW_Service + // Service // this.CanHandlePowerEvent = true; this.CanPauseAndContinue = true; Modified: trunk/Version2/WindowsService/Service.cs =================================================================== --- trunk/Version2/WindowsService/Service.cs 2007-03-09 09:30:00 UTC (rev 31) +++ trunk/Version2/WindowsService/Service.cs 2007-03-09 14:19:08 UTC (rev 32) @@ -115,6 +115,18 @@ /// </summary> /// <param name="command">Command code</param> protected override void OnCustomCommand(int command) { + CustomCommands custCommand = (CustomCommands)command; + switch (custCommand) { + case CustomCommands.ReloadConfiguration: + String configFile = System.AppDomain.CurrentDomain.BaseDirectory + "\\" + ConfigurationManager.AppSettings["ConfigurationFile"]; + _configuration = ServerConfiguration.readConfiguration(configFile); + _server.Reload(_configuration); + break; + case CustomCommands.ReinitLogging: + string loggingConfigFile = System.AppDomain.CurrentDomain.BaseDirectory + "\\" + ConfigurationManager.AppSettings["LoggingConfigurationFile"]; + XmlConfigurator.ConfigureAndWatch(new FileInfo(loggingConfigFile)); + break; + } base.OnCustomCommand(command); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mis...@us...> - 2007-03-09 17:45:39
|
Revision: 33 http://svn.sourceforge.net/mp-webinterface/?rev=33&view=rev Author: misterd_sf Date: 2007-03-09 09:45:37 -0800 (Fri, 09 Mar 2007) Log Message: ----------- Updated logging (Added AccessLog and reconfigured logging of the webserver) fixed a small bug when shutting down the server Modified Paths: -------------- trunk/Version2/WebServer/ByteParser.cs trunk/Version2/WebServer/Connection.cs trunk/Version2/WebServer/Host.cs trunk/Version2/WebServer/Request.cs trunk/Version2/WebServer/Server.cs trunk/Version2/WindowsService/LoggingConfiguration.xml Modified: trunk/Version2/WebServer/ByteParser.cs =================================================================== --- trunk/Version2/WebServer/ByteParser.cs 2007-03-09 14:19:08 UTC (rev 32) +++ trunk/Version2/WebServer/ByteParser.cs 2007-03-09 17:45:37 UTC (rev 33) @@ -16,12 +16,14 @@ #region variables private byte[] _bytes; private int _pos; + private Server _server; #endregion #region ctor - internal ByteParser(byte[] bytes) { + internal ByteParser(byte[] bytes, Server server) { _bytes = bytes; _pos = 0; + _server = server; } #endregion @@ -58,7 +60,7 @@ _pos = _bytes.Length; } catch (Exception e){ - Server.WriteErrorToLog("Error in ByteParser.\n", e); + _server.WriteErrorToLog("Error in ByteParser.\n", e); } return line; } Modified: trunk/Version2/WebServer/Connection.cs =================================================================== --- trunk/Version2/WebServer/Connection.cs 2007-03-09 14:19:08 UTC (rev 32) +++ trunk/Version2/WebServer/Connection.cs 2007-03-09 17:45:37 UTC (rev 33) @@ -93,7 +93,7 @@ #endregion #region private static methods - private static bool CheckLocalServerIP(string remoteIP) { + private bool CheckLocalServerIP(string remoteIP) { try { IPHostEntry hostEntry = Dns.GetHostEntry(Environment.MachineName); IPAddress localAddress; @@ -104,7 +104,7 @@ } } } catch (Exception e) { - Server.WriteErrorToLog("Error while checking Server IP.\n", e); + _server.WriteErrorToLog("Error while checking Server IP.\n", e); } return false; } @@ -155,7 +155,7 @@ _socket.Close(); } }catch(Exception e){ - Server.WriteErrorToLog("Could not close socket.\n", e); + _server.WriteErrorToLog("Could not close socket.\n", e); } finally { _socket = null; } @@ -190,7 +190,7 @@ return buffer; } catch (Exception e) { - Server.WriteErrorToLog("Could not read request bytes.\n", e); + _server.WriteErrorToLog("Could not read request bytes.\n", e); return null; } } @@ -203,7 +203,7 @@ try { _socket.Send(data, offset, length, SocketFlags.None); } catch (Exception e) { - Server.WriteErrorToLog("Could not write body.\n", e); + _server.WriteErrorToLog("Could not write body.\n", e); } } @@ -215,7 +215,7 @@ _socket.Send(Encoding.UTF8.GetBytes(headers + body)); } } catch (Exception e) { - Server.WriteErrorToLog("Could not write entire response from string.\n", e); + _server.WriteErrorToLog("Could not write entire response from string.\n", e); } finally { if (!keepAlive) { Close(); @@ -254,7 +254,7 @@ completed = true; } } catch (Exception e) { - Server.WriteErrorToLog("Could not write entire response from file.\n", e); + _server.WriteErrorToLog("Could not write entire response from file.\n", e); } finally { if (!keepAlive || !completed) Close(); @@ -290,7 +290,7 @@ availBytes = _socket.Available; } catch (Exception e) { - Server.WriteErrorToLog("Error while waiting for request bytes.\n", e); + _server.WriteErrorToLog("Error while waiting for request bytes.\n", e); } return availBytes; @@ -304,7 +304,7 @@ _socket.Send(Encoding.UTF8.GetBytes(headers)); } } catch (Exception e) { - Server.WriteErrorToLog("Could not write headers.\n", e); + _server.WriteErrorToLog("Could not write headers.\n", e); } } #endregion Modified: trunk/Version2/WebServer/Host.cs =================================================================== --- trunk/Version2/WebServer/Host.cs 2007-03-09 14:19:08 UTC (rev 32) +++ trunk/Version2/WebServer/Host.cs 2007-03-09 17:45:37 UTC (rev 33) @@ -70,7 +70,7 @@ Request request = new Request(_server, this, conn, _configuration); request.Process(); } catch (Exception e) { - Server.WriteErrorToLog("Could not process Request.\n", e); + _server.WriteErrorToLog("Could not process Request.\n", e); } finally { RemovePendingCall(); } Modified: trunk/Version2/WebServer/Request.cs =================================================================== --- trunk/Version2/WebServer/Request.cs 2007-03-09 14:19:08 UTC (rev 32) +++ trunk/Version2/WebServer/Request.cs 2007-03-09 17:45:37 UTC (rev 33) @@ -86,6 +86,7 @@ private int _responseStatus; private StringBuilder _responseHeadersBuilder; private ArrayList _responseBodyBytes; + private String remoteIP; #endregion #region static variables @@ -115,28 +116,33 @@ // 100 response to POST if (_verb == "POST" && _contentLength > 0 && _preloadedContentLength < _contentLength) { _connection.Write100Continue(); + _server.writeErrorAccessLog("Send Error 100 response for request from: " + remoteIP + " for " + this._path); } // special case for client script if (_isClientScriptPath) { _connection.WriteEntireResponseFromFile(_host.PhysicalClientScriptPath + _path.Substring(_host.NormalizedClientScriptPath.Length), false); + _server.writeInfoAccessLog("Send response from file for request from: " + remoteIP + " for " + this._path); return; } // deny access to code, bin, etc. if (IsRequestForRestrictedDirectory()) { _connection.WriteErrorAndClose(403); + _server.writeErrorAccessLog("Send error 403 (Restricted directory) for request from: " + remoteIP + " for " + this._path); return; } // special case for directory listing if (ProcessDirectoryListingRequest()) { + _server.writeInfoAccessLog("Send directory listing for request from: " + remoteIP + " for " + this._path); return; } PrepareResponse(); // Hand the processing over to HttpRuntime HttpRuntime.ProcessRequest(this); + _server.writeInfoAccessLog("Response send by HttpRuntime request for request from: " + remoteIP + " for " + this._path); } private bool checkSecurity() { @@ -145,6 +151,7 @@ if (!_connection.IsLocal) { _connection.WriteErrorAndClose(403); + _server.writeErrorAccessLog("Send error 403 (Acces Denied by configuration) for request from: " + remoteIP + " for " + this._path); return false; } @@ -158,6 +165,8 @@ } } if (!ipFound) { + _connection.WriteErrorAndClose(403); + _server.writeErrorAccessLog("Send error 403 (Acces Denied by configuration) for request from: " + remoteIP + " for " + this._path); return false; } } @@ -165,6 +174,7 @@ String uri = _path + _queryString; if (uri.Length > _configuration.MaxUriLength) { _connection.WriteErrorAndClose(403, "URI Exceeded Maximum Server Limit."); + _server.writeErrorAccessLog("Send error 403 (URI Exceeded Maximum Server Limit) for request from: " + remoteIP + " for " + this._path); return false; } List<String> vrbCollection = _configuration.HTTPMethods; @@ -177,6 +187,7 @@ if (!vrbFound) { _connection.WriteErrorAndClose(403); + _server.writeErrorAccessLog("Send error 403 (HTTP method not found) for request from: " + remoteIP + " for " + this._path); return false; } return true; @@ -263,16 +274,20 @@ } ParseRequestLine(); + remoteIP = _connection.RemoteIP; + _server.writeInfoAccessLog("Request from: " + remoteIP + " for " + this._path); // Check for bad path if (IsBadPath()) { _connection.WriteErrorAndClose(400); + _server.writeErrorAccessLog("Send error 400 (Bad Path) for request from: " + remoteIP + " for " + this._path); return false; } // Check if the path is not well formed or is not for the current app if (!_host.IsVirtualPathInApp(_path, out _isClientScriptPath)) { _connection.WriteErrorAndClose(404); + _server.writeErrorAccessLog("Send error 404 (Path is not well formed) for request from: " + remoteIP + " for " + this._path); return false; } // Check security @@ -314,7 +329,7 @@ _headerByteStrings = new ArrayList(); // find the end of headers - ByteParser parser = new ByteParser(_headerBytes); + ByteParser parser = new ByteParser(_headerBytes,_server); for (; ; ) { ByteString line = parser.ReadLine(); @@ -590,7 +605,7 @@ try { infos = (new DirectoryInfo(dirPathTranslated)).GetFileSystemInfos(); } catch (Exception e){ - Server.WriteErrorToLog("Could not get all files and subdirs.\n", e); + _server.WriteErrorToLog("Could not get all files and subdirs.\n", e); } // determine if parent is appropriate @@ -621,7 +636,7 @@ #endregion #region private static methods - private static string UrlEncodeRedirect(string path) { + private string UrlEncodeRedirect(string path) { // this method mimics the logic in HttpResponse.Redirect (which relies on internal methods) try { // count non-ascii characters @@ -659,7 +674,7 @@ path = path.Replace(" ", "%20"); } } catch (Exception e) { - Server.WriteErrorToLog("Error in URL Encode Redirect.\n", e); + _server.WriteErrorToLog("Error in URL Encode Redirect.\n", e); } return path; } @@ -947,7 +962,7 @@ _responseBodyBytes.Add(bytes); } } catch (Exception e) { - Server.WriteErrorToLog("Could not send response from memory.\n", e); + _server.WriteErrorToLog("Could not send response from memory.\n", e); } } @@ -961,7 +976,7 @@ f = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); SendResponseFromFileStream(f, offset, length); }catch(Exception e){ - Server.WriteErrorToLog("Could not send response from file (filename).\n", e); + _server.WriteErrorToLog("Could not send response from file (filename).\n", e); } finally { if (f != null) { f.Close(); @@ -980,7 +995,7 @@ f = new FileStream(sfh, FileAccess.Read); SendResponseFromFileStream(f, offset, length); } catch (Exception e) { - Server.WriteErrorToLog("Could not send response from file (Handle).\n", e); + _server.WriteErrorToLog("Could not send response from file (Handle).\n", e); } finally { if (f != null) { f.Close(); Modified: trunk/Version2/WebServer/Server.cs =================================================================== --- trunk/Version2/WebServer/Server.cs 2007-03-09 14:19:08 UTC (rev 32) +++ trunk/Version2/WebServer/Server.cs 2007-03-09 17:45:37 UTC (rev 33) @@ -17,12 +17,15 @@ using System.Threading; using System.Web; using System.Web.Hosting; +using log4net.Core; +using log4net; namespace MPW.WebServer { public sealed class Server : MarshalByRefObject { #region variables - private static readonly log4net.ILog log = log4net.LogManager.GetLogger("WebServer"); + private ILog log = LogManager.GetLogger("WebServer"); + private ILog accessLog = LogManager.GetLogger("WebServerAccess"); private ServerConfiguration _configuration; private WaitCallback _onStart; @@ -128,11 +131,11 @@ if (_socket != null) { _socket.Close(); } + Thread.Sleep(100); } catch { } finally { _socket = null; } - try { if (_host != null) { _host.Shutdown(); @@ -242,10 +245,16 @@ internal void HostStopped() { _host = null; } - internal static void WriteErrorToLog(String message, Exception e) { + internal void WriteErrorToLog(String message, Exception e) { log.Error(message, e); } - #endregion + internal void writeInfoAccessLog(String message) { + accessLog.Info(message); + } + internal void writeErrorAccessLog(String message) { + accessLog.Error(message); + } + #endregion } } Modified: trunk/Version2/WindowsService/LoggingConfiguration.xml =================================================================== --- trunk/Version2/WindowsService/LoggingConfiguration.xml 2007-03-09 14:19:08 UTC (rev 32) +++ trunk/Version2/WindowsService/LoggingConfiguration.xml 2007-03-09 17:45:37 UTC (rev 33) @@ -1,10 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> <log4net> - <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> - <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" /> - </appender> - <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > <applicationName value="MPW" /> <logName value="MPW Service"/> @@ -20,7 +16,7 @@ <eventLogEntryType value="Error" /> </mapping> <mapping> - <level value="WARNING" /> + <level value="WARN" /> <eventLogEntryType value="Warning" /> </mapping> <mapping> @@ -36,9 +32,17 @@ <file value="access.log" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> - <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> + <conversionPattern value="%date %-5level - %message%newline" /> </layout> </appender> + + <appender name="MPWFileAppender" type="log4net.Appender.FileAppender"> + <file value="mpw.log" /> + <appendToFile value="true" /> + <layout type="log4net.Layout.PatternLayout"> + <conversionPattern value="%date %-5level - %message%newline" /> + </layout> + </appender> <category name="MPW"> <level value="ALL" /> @@ -46,7 +50,7 @@ </category> <category name="WebServer"> <level value="ALL" /> - <appender-ref ref="ConsoleAppender" /> + <appender-ref ref="MPWFileAppender" /> <appender-ref ref="EventLogAppender" /> </category> <category name="WebServerAccess" additivity="false"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mis...@us...> - 2007-03-09 22:37:32
|
Revision: 34 http://svn.sourceforge.net/mp-webinterface/?rev=34&view=rev Author: misterd_sf Date: 2007-03-09 14:37:29 -0800 (Fri, 09 Mar 2007) Log Message: ----------- Commented WebServer and windows service Modified Paths: -------------- trunk/Version2/WebServer/ByteParser.cs trunk/Version2/WebServer/ByteString.cs trunk/Version2/WebServer/Connection.cs trunk/Version2/WebServer/Host.cs trunk/Version2/WebServer/Messages.cs trunk/Version2/WebServer/Request.cs trunk/Version2/WebServer/Server.cs trunk/Version2/WebServer/ServerConfiguration.cs trunk/Version2/WebServer/WebServer.csproj trunk/Version2/WindowsService/DebugServiceControlForm.Designer.cs trunk/Version2/WindowsService/DebugServiceControlForm.cs trunk/Version2/WindowsService/Program.cs trunk/Version2/WindowsService/ProjectInstaller.Designer.cs trunk/Version2/WindowsService/ProjectInstaller.cs trunk/Version2/WindowsService/Service.Designer.cs trunk/Version2/WindowsService/Service.cs trunk/Version2/WindowsService/WindowsService.csproj Modified: trunk/Version2/WebServer/ByteParser.cs =================================================================== --- trunk/Version2/WebServer/ByteParser.cs 2007-03-09 17:45:37 UTC (rev 33) +++ trunk/Version2/WebServer/ByteParser.cs 2007-03-09 22:37:29 UTC (rev 34) @@ -11,15 +11,31 @@ using System.Text; namespace MPW.WebServer { - + /// <summary> + /// Internal class for byte parsing + /// </summary> internal class ByteParser { #region variables + /// <summary> + /// Bytes + /// </summary> private byte[] _bytes; + /// <summary> + /// Position + /// </summary> private int _pos; + /// <summary> + /// Server + /// </summary> private Server _server; #endregion #region ctor + /// <summary> + /// Constructor + /// </summary> + /// <param name="bytes">Bytes to parse</param> + /// <param name="server">Server object</param> internal ByteParser(byte[] bytes, Server server) { _bytes = bytes; _pos = 0; @@ -28,6 +44,9 @@ #endregion #region properties + /// <summary> + /// Gets the current offset + /// </summary> internal int CurrentOffset { get { @@ -37,6 +56,10 @@ #endregion #region internal methods + /// <summary> + /// Read a line from the byte array + /// </summary> + /// <returns>Byte string</returns> internal ByteString ReadLine() { ByteString line = null; Modified: trunk/Version2/WebServer/ByteString.cs =================================================================== --- trunk/Version2/WebServer/ByteString.cs 2007-03-09 17:45:37 UTC (rev 33) +++ trunk/Version2/WebServer/ByteString.cs 2007-03-09 22:37:29 UTC (rev 34) @@ -11,15 +11,32 @@ using System.Text; namespace MPW.WebServer { - + /// <summary> + /// Internal class for a byte string + /// </summary> internal class ByteString { #region variables + /// <summary> + /// Bytes + /// </summary> private byte[] _bytes; + /// <summary> + /// Offset + /// </summary> private int _offset; + /// <summary> + /// Length + /// </summary> private int _length; #endregion #region ctor + /// <summary> + /// Constructor + /// </summary> + /// <param name="bytes">Bytes</param> + /// <param name="offset">Offset</param> + /// <param name="length">Length</param> public ByteString(byte[] bytes, int offset, int length) { _bytes = bytes; _offset = offset; @@ -28,30 +45,47 @@ #endregion #region properties + /// <summary> + /// Gets the bytes of the bytestring + /// </summary> public byte[] Bytes { get { return _bytes; } } + /// <summary> + /// Is Byte string empty? + /// </summary> public bool IsEmpty { get { return (_bytes == null || _length == 0); } } + /// <summary> + /// Length of the byte string + /// </summary> public int Length { get { return _length; } } - + + /// <summary> + /// Gets the offset of the byte string + /// </summary> public int Offset { get { return _offset; } } + /// <summary> + /// Gets a single byte of the byte string + /// </summary> + /// <param name="index">Index of the byte</param> + /// <returns>Single byte of the byte string</returns> public byte this[int index] { get { return _bytes[_offset+index]; @@ -60,10 +94,19 @@ #endregion #region public methods + /// <summary> + /// Returns the String of the byte string + /// </summary> + /// <returns>String of the byte string (UTF-8 encoding)</returns> public String GetString() { return GetString(Encoding.UTF8); } + /// <summary> + /// Returns the String of the byte string in the given encoding + /// </summary> + /// <param name="enc">Encoding of the String</param> + /// <returns>String of the byte string in the given encoding</returns> public String GetString(Encoding enc) { if (IsEmpty) { return String.Empty; @@ -71,6 +114,10 @@ return enc.GetString(_bytes, _offset, _length); } + /// <summary> + /// Returns a copy of the byte array + /// </summary> + /// <returns>Byte array copy</returns> public byte[] GetBytes() { byte[] bytes = new byte[_length]; if (_length > 0) { @@ -79,10 +126,21 @@ return bytes; } + /// <summary> + /// Index of a single character + /// </summary> + /// <param name="ch">Character</param> + /// <returns>Index of the character</returns> public int IndexOf(char ch) { return IndexOf(ch, 0); } + /// <summary> + /// Index of a single character + /// </summary> + /// <param name="ch">Character</param> + /// <param name="offset">Offset</param> + /// <returns>Index of the character</returns> public int IndexOf(char ch, int offset) { for (int i = offset; i < _length; i++) { if (this[i] == (byte)ch) { @@ -93,14 +151,30 @@ return -1; } + /// <summary> + /// Returns a sub(byte)string + /// </summary> + /// <param name="offset">Offset</param> + /// <returns>Sub(byte)string</returns> public ByteString Substring(int offset) { return Substring(offset, _length-offset); } + /// <summary> + /// Returns a sub(byte)string + /// </summary> + /// <param name="offset">Offset</param> + /// <param name="len">Length</param> + /// <returns>Sub(byte)string</returns> public ByteString Substring(int offset, int len) { return new ByteString(_bytes, _offset+offset, len); } + /// <summary> + /// Splits the byte string + /// </summary> + /// <param name="sep">Seperator character</param> + /// <returns>Array of the byte string</returns> public ByteString[] Split(char sep) { ArrayList list = new ArrayList(); Modified: trunk/Version2/WebServer/Connection.cs =================================================================== --- trunk/Version2/WebServer/Connection.cs 2007-03-09 17:45:37 UTC (rev 33) +++ trunk/Version2/WebServer/Connection.cs 2007-03-09 22:37:29 UTC (rev 34) @@ -20,16 +20,36 @@ using System.Web.Hosting; namespace MPW.WebServer { - + /// <summary> + /// Connection class, that handles all socket related operations + /// </summary> internal class Connection : MarshalByRefObject { #region variables + /// <summary> + /// Web Server + /// </summary> private Server _server; + /// <summary> + /// Socket connection to client + /// </summary> private Socket _socket; + /// <summary> + /// Server configuration + /// </summary> private ServerConfiguration _configuration; + /// <summary> + /// ContentType mapping + /// </summary> private Dictionary<String, String> _contentTypes; #endregion #region ctor + /// <summary> + /// Constructor + /// </summary> + /// <param name="server">Web Server</param> + /// <param name="socket">Socket connection to client</param> + /// <param name="configuration">Server Configuration</param> internal Connection(Server server, Socket socket, ServerConfiguration configuration) { _server = server; _socket = socket; @@ -39,6 +59,10 @@ #endregion #region overrides + /// <summary> + /// Init the lifetime service + /// </summary> + /// <returns></returns> public override object InitializeLifetimeService() { // never expire the license return null; @@ -46,12 +70,21 @@ #endregion #region properties + /// <summary> + /// Status of the socket connection + /// </summary> internal bool Connected { get { - return _socket.Connected; + if (_socket != null) { + return _socket.Connected; + } + return false; } } + /// <summary> + /// Is local connection? + /// </summary> internal bool IsLocal { get { string remoteIP = RemoteIP; @@ -64,6 +97,9 @@ } } + /// <summary> + /// Returns the local IP + /// </summary> internal string LocalIP { get { IPEndPoint endPoint = (IPEndPoint)_socket.LocalEndPoint; @@ -75,6 +111,9 @@ } } + /// <summary> + /// Returns the remote ip + /// </summary> internal string RemoteIP { get { IPEndPoint endPoint = (IPEndPoint)_socket.RemoteEndPoint; @@ -93,21 +132,14 @@ #endregion #region private static methods - private bool CheckLocalServerIP(string remoteIP) { - try { - IPHostEntry hostEntry = Dns.GetHostEntry(Environment.MachineName); - IPAddress localAddress; - for (int i = 0; i < hostEntry.AddressList.Length; i++) { - localAddress = hostEntry.AddressList[i]; - if (remoteIP.Equals(localAddress.ToString())) { - return true; - } - } - } catch (Exception e) { - _server.WriteErrorToLog("Error while checking Server IP.\n", e); - } - return false; - } + /// <summary> + /// Generates the response http header + /// </summary> + /// <param name="statusCode">State headers</param> + /// <param name="moreHeaders">Additional Headers</param> + /// <param name="contentLength">Length of the content</param> + /// <param name="keepAlive">Keep the connection alive</param> + /// <returns>Response header</returns> private static String MakeResponseHeaders(int statusCode, String moreHeaders, int contentLength, bool keepAlive) { StringBuilder sb = new StringBuilder(); @@ -127,6 +159,32 @@ #endregion #region private methods + /// <summary> + /// Checks if the remote IP is a local server IP + /// </summary> + /// <param name="remoteIP">Remote IP</param> + /// <returns>true, if the remote ip is a local server IP; false otherwise</returns> + private bool CheckLocalServerIP(string remoteIP) { + try { + IPHostEntry hostEntry = Dns.GetHostEntry(Environment.MachineName); + IPAddress localAddress; + for (int i = 0; i < hostEntry.AddressList.Length; i++) { + localAddress = hostEntry.AddressList[i]; + if (remoteIP.Equals(localAddress.ToString())) { + return true; + } + } + } catch (Exception e) { + _server.WriteErrorToLog("Error while checking Server IP.\n", e); + } + return false; + } + + /// <summary> + /// Generates the content type header + /// </summary> + /// <param name="fileName">FileName</param> + /// <returns>Content type header</returns> private String MakeContentTypeHeader(String fileName) { Debug.Assert(File.Exists(fileName)); @@ -138,6 +196,12 @@ return null; } + /// <summary> + /// Generates the error response body + /// </summary> + /// <param name="statusCode">Status code of the error</param> + /// <param name="message">Error message</param> + /// <returns>Body of the error response</returns> private string GetErrorResponseBody(int statusCode, string message) { string body = Messages.FormatErrorMessageBody(statusCode, _server.VirtualPath); if (message != null && message.Length > 0) { @@ -148,6 +212,9 @@ #endregion #region internal methods + /// <summary> + /// Close the socket connection + /// </summary> internal void Close() { try { if (_socket != null) { @@ -161,6 +228,11 @@ } } + /// <summary> + /// Reads the request bytes + /// </summary> + /// <param name="maxBytes">Maximum bytes</param> + /// <returns>Request bytes</returns> internal byte[] ReadRequestBytes(int maxBytes) { try { if (WaitForRequestBytes() == 0) { @@ -195,10 +267,19 @@ } } + /// <summary> + /// Writes 100 error response + /// </summary> internal void Write100Continue() { WriteEntireResponseFromString(100, null, null, true); } + /// <summary> + /// Writes Body of the response + /// </summary> + /// <param name="data">Data to send</param> + /// <param name="offset">Offset in the byte array</param> + /// <param name="length">Length to send</param> internal void WriteBody(byte[] data, int offset, int length) { try { _socket.Send(data, offset, length, SocketFlags.None); @@ -207,6 +288,13 @@ } } + /// <summary> + /// Writes Response from String + /// </summary> + /// <param name="statusCode">Status code of the response</param> + /// <param name="extraHeaders">Additional headers</param> + /// <param name="body">Body</param> + /// <param name="keepAlive">Keep the connection alive?</param> internal void WriteEntireResponseFromString(int statusCode, String extraHeaders, String body, bool keepAlive) { try { int bodyLength = (body != null) ? Encoding.UTF8.GetByteCount(body) : 0; @@ -223,6 +311,11 @@ } } + /// <summary> + /// Writes Response from file + /// </summary> + /// <param name="fileName">Filename of the response</param> + /// <param name="keepAlive">Keep the connection alive?</param> internal void WriteEntireResponseFromFile(String fileName, bool keepAlive) { if (!File.Exists(fileName)) { WriteErrorAndClose(404); @@ -264,18 +357,36 @@ } } + /// <summary> + /// Writes the error response and close connection + /// </summary> + /// <param name="statusCode">Status code</param> + /// <param name="message">Error message</param> internal void WriteErrorAndClose(int statusCode, string message) { WriteEntireResponseFromString(statusCode, null, GetErrorResponseBody(statusCode, message), false); } + /// <summary> + /// Writes the error response and close connection + /// </summary> + /// <param name="statusCode">Status code</param> internal void WriteErrorAndClose(int statusCode) { WriteErrorAndClose(statusCode, null); } + /// <summary> + /// Writes error message with additional headers + /// </summary> + /// <param name="statusCode">Status code</param> + /// <param name="extraHeaders">Additional headers</param> internal void WriteErrorWithExtraHeadersAndKeepAlive(int statusCode, string extraHeaders) { WriteEntireResponseFromString(statusCode, extraHeaders, GetErrorResponseBody(statusCode, null), true); } - + + /// <summary> + /// Wait for request bytes + /// </summary> + /// <returns>Available bytes</returns> internal int WaitForRequestBytes() { int availBytes = 0; @@ -296,6 +407,11 @@ return availBytes; } + /// <summary> + /// Writes all headers + /// </summary> + /// <param name="statusCode">Status code</param> + /// <param name="extraHeaders">Additional headers</param> internal void WriteHeaders(int statusCode, String extraHeaders) { string headers = MakeResponseHeaders(statusCode, extraHeaders, -1, false); Modified: trunk/Version2/WebServer/Host.cs =================================================================== --- trunk/Version2/WebServer/Host.cs 2007-03-09 17:45:37 UTC (rev 33) +++ trunk/Version2/WebServer/Host.cs 2007-03-09 22:37:29 UTC (rev 34) @@ -23,27 +23,62 @@ using log4net; namespace MPW.WebServer { - + /// <summary> + /// Hosting environment of the web server + /// </summary> internal class Host : MarshalByRefObject, IRegisteredObject { #region variables + /// <summary> + /// Server + /// </summary> private Server _server; + + /// <summary> + /// Server configuration + /// </summary> private ServerConfiguration _configuration; + /// <summary> + /// Pending calls + /// </summary> private volatile int _pendingCallsCount; + + /// <summary> + /// Virtual path (lower case) + /// </summary> private string _lowerCasedVirtualPath; + + /// <summary> + /// Virtaul path with trailing slash (lower case) + /// </summary> private string _lowerCasedVirtualPathWithTrailingSlash; + + /// <summary> + /// Physical Client script path + /// </summary> private string _physicalClientScriptPath; + + /// <summary> + /// Client script path with trailing slash (lower case) + /// </summary> private string _lowerCasedClientScriptPathWithTrailingSlash; #endregion #region ctor + /// <summary> + /// Constructor and register this object as hosting environment + /// </summary> public Host() { HostingEnvironment.RegisterObject(this); } #endregion #region overrides + /// <summary> + /// Never expire the license + /// </summary> + /// <returns></returns> public override object InitializeLifetimeService() { // never expire the license return null; @@ -51,6 +86,11 @@ #endregion #region public methods + /// <summary> + /// Configure the hosting environment + /// </summary> + /// <param name="server">Server</param> + /// <param name="configuration">Server configuration</param> public void Configure(Server server, ServerConfiguration configuration) { _server = server; _configuration = configuration; @@ -62,6 +102,10 @@ _lowerCasedClientScriptPathWithTrailingSlash = CultureInfo.InvariantCulture.TextInfo.ToLower(HttpRuntime.AspClientScriptVirtualPath + "/"); } + /// <summary> + /// Process request + /// </summary> + /// <param name="conn">Connection of the request</param> public void ProcessRequest(Connection conn) { // Add a pending call to make sure our thread doesn't get killed AddPendingCall(); @@ -76,15 +120,29 @@ } } + /// <summary> + /// Shutdown the hosting environment + /// </summary> public void Shutdown() { HostingEnvironment.InitiateShutdown(); } + /// <summary> + /// Is virtual path in application path + /// </summary> + /// <param name="path">Virtual path</param> + /// <returns>true, if in virutal path; false otherwise</returns> public bool IsVirtualPathInApp(String path) { bool isClientScriptPath; return IsVirtualPathInApp(path, out isClientScriptPath); } + /// <summary> + /// Is virtual path in application path + /// </summary> + /// <param name="path">Virtual path</param> + /// <param name="isClientScriptPath">Output, if is client script path</param> + /// <returns>true, if in virutal path; false otherwise</returns> public bool IsVirtualPathInApp(String path, out bool isClientScriptPath) { isClientScriptPath = false; @@ -116,6 +174,11 @@ return false; } + /// <summary> + /// Is virtual path a application path + /// </summary> + /// <param name="path">Virtual path</param> + /// <returns>true, if a application path; false otherwise</returns> public bool IsVirtualPathAppPath(String path) { if (path == null) { return false; @@ -128,6 +191,9 @@ #endregion #region private methods + /// <summary> + /// Wait for pending calls to finish + /// </summary> private void WaitForPendingCallsToFinish() { for (; ; ) { if (_pendingCallsCount <= 0) @@ -137,18 +203,28 @@ } } + /// <summary> + /// Adds a pending call + /// </summary> private void AddPendingCall() { #pragma warning disable 0420 Interlocked.Increment(ref _pendingCallsCount); #pragma warning restore 0420 } + /// <summary> + /// Removes a pending call + /// </summary> private void RemovePendingCall() { #pragma warning disable 0420 Interlocked.Decrement(ref _pendingCallsCount); #pragma warning restore 0420 } + /// <summary> + /// Stop hosting envieronment + /// </summary> + /// <param name="immediate">Stop immediately</param> void IRegisteredObject.Stop(bool immediate) { // Unhook the Host so Server will process the requests in the new appdomain. if (_server != null) { @@ -163,36 +239,54 @@ #endregion #region properties + /// <summary> + /// Gets the normalized client script path + /// </summary> public string NormalizedClientScriptPath { get { return _lowerCasedClientScriptPathWithTrailingSlash; } } + /// <summary> + /// Gets the normalized virtual path + /// </summary> public string NormalizedVirtualPath { get { return _lowerCasedVirtualPathWithTrailingSlash; } } + /// <summary> + /// Gets the physical client script path + /// </summary> public string PhysicalClientScriptPath { get { return _physicalClientScriptPath; } } + /// <summary> + /// Gets the physical path + /// </summary> public string PhysicalPath { get { return _configuration.PhysicalPath; } } + /// <summary> + /// Gets the configuration port + /// </summary> public int Port { get { return _configuration.Port; } } + /// <summary> + /// Gets the virtual path + /// </summary> public string VirtualPath { get { return _configuration.VirtualPath; Modified: trunk/Version2/WebServer/Messages.cs =================================================================== --- trunk/Version2/WebServer/Messages.cs 2007-03-09 17:45:37 UTC (rev 33) +++ trunk/Version2/WebServer/Messages.cs 2007-03-09 22:37:29 UTC (rev 34) @@ -16,19 +16,32 @@ namespace MPW.WebServer { - // - // Internal class provides helpers for string formatting of HTTP responses - // + /// <summary> + /// Internal class provides helpers for string formatting of HTTP responses + /// </summary> internal static class Messages { #region variables and constants + /// <summary> + /// HTTP Error format 1 + /// </summary> private const String _httpErrorFormat1 = @"<html> <head> <title>{0}</title> "; + /// <summary> + /// Version String + /// </summary> + public static String VersionString = typeof(Server).Assembly.GetName().Version.ToString(); - public static String VersionString = typeof(Server).Assembly.GetName().Version.ToString(); + /// <summary> + /// Server name + /// </summary> public static String ServerName = typeof(Server).Assembly.GetName().Name; + + /// <summary> + /// HTTP style + /// </summary> private const String _httpStyle = @" <style> body {font-family:""Verdana"";font-weight:normal;font-size: 8pt;color:black;} @@ -43,7 +56,9 @@ .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; } </style> "; - + /// <summary> + /// HTTP Error format 2 + /// </summary> private static String _httpErrorFormat2 = @" </head> <body bgcolor=""white""> @@ -61,13 +76,18 @@ </body> </html> "; - + /// <summary> + /// Directory listing format 1 + /// </summary> private const String _dirListingFormat1 = @"<html> <head> <title>Directory Listing -- {0}</title> "; + /// <summary> + /// Directory listing format 2 + /// </summary> private const String _dirListingFormat2 = @" </head> <body bgcolor=""white""> @@ -79,6 +99,9 @@ <PRE> "; + /// <summary> + /// Directory listing tail + /// </summary> private static String _dirListingTail = @"</PRE> <hr width=100% size=1 color=silver> @@ -91,15 +114,24 @@ </html> "; + /// <summary> + /// Directory listing parent format + /// </summary> private const String _dirListingParentFormat = @"<A href=""{0}"">[To Parent Directory]</A> "; + /// <summary> + /// Directory listing file format + /// </summary> private const String _dirListingFileFormat = @"{0,38:dddd, MMMM dd, yyyy hh:mm tt} {1,12:n0} <A href=""{2}"">{3}</A> "; + /// <summary> + /// Directory listing directory format + /// </summary> private const String _dirListingDirFormat = @"{0,38:dddd, MMMM dd, yyyy hh:mm tt} <dir> <A href=""{1}/"">{2}</A> "; @@ -107,6 +139,12 @@ #endregion #region public static methods + /// <summary> + /// Formats a body of an error message + /// </summary> + /// <param name="statusCode">Status code</param> + /// <param name="appName">Application name</param> + /// <returns>Formated response body of an error message</returns> public static String FormatErrorMessageBody(int statusCode, String appName) { String desc = HttpWorkerRequest.GetStatusDescription(statusCode); @@ -115,6 +153,13 @@ + String.Format(_httpErrorFormat2, appName, statusCode, desc); } + /// <summary> + /// Formats a body for a directory listing + /// </summary> + /// <param name="dirPath">Path of the directory</param> + /// <param name="parentPath">Parent Path</param> + /// <param name="elements">Elements of the directory</param> + /// <returns></returns> public static String FormatDirectoryListing(String dirPath, String parentPath, FileSystemInfo[] elements) { StringBuilder sb = new StringBuilder(); Modified: trunk/Version2/WebServer/Request.cs =================================================================== --- trunk/Version2/WebServer/Request.cs 2007-03-09 17:45:37 UTC (rev 33) +++ trunk/Version2/WebServer/Request.cs 2007-03-09 22:37:29 UTC (rev 34) @@ -26,12 +26,25 @@ namespace MPW.WebServer { - + /// <summary> + /// Request representation. Handles the request + /// Based on the SimpleWorkerRequest of .NET Framework + /// </summary> internal class Request : SimpleWorkerRequest { #region variables + /// <summary> + /// All bad Path characters + /// </summary> private static char[] badPathChars = new char[] { '%', '>', '<', ':', '\\' }; + + /// <summary> + /// List of default documents + /// </summary> private List<String> _defaultDocuments; + /// <summary> + /// Array of all restricted directory + /// </summary> private static string[] restrictedDirs = new string[] { "/bin", "/app_browsers", @@ -40,62 +53,190 @@ "/app_localresources", "/app_globalresources", "/app_webreferences" }; + + /// <summary> + /// Maximum chunk length + /// </summary> private const int MaxChunkLength = 64 * 1024; + /// <summary> + /// Web server + /// </summary> private Server _server; + + /// <summary> + /// Corresponding host environment + /// </summary> private Host _host; + + /// <summary> + /// Corresponding connection + /// </summary> private Connection _connection; + + /// <summary> + /// Corresponding configuration + /// </summary> private ServerConfiguration _configuration; - // security permission to Assert remoting calls to _connection + /// <summary> + /// security permission to Assert remoting calls to _connection + /// </summary> private IStackWalk _connectionPermission = new PermissionSet(PermissionState.Unrestricted); - // raw request data + /// <summary> + /// raw request data + /// </summary> private const int maxHeaderBytes = 32 * 1024; + + /// <summary> + /// Header bytes + /// </summary> private byte[] _headerBytes; + + /// <summary> + /// Start header offset + /// </summary> private int _startHeadersOffset; + + /// <summary> + /// End header offset + /// </summary> private int _endHeadersOffset; + + /// <summary> + /// Header byte string + /// </summary> private ArrayList _headerByteStrings; - // parsed request data - + /// <summary> + /// Is client script path + /// </summary> private bool _isClientScriptPath; + /// <summary> + /// HTTP method + /// </summary> private string _verb; + + /// <summary> + /// URL + /// </summary> private string _url; + + /// <summary> + /// Protocol + /// </summary> private string _prot; + /// <summary> + /// Path + /// </summary> private string _path; + + /// <summary> + /// File path + /// </summary> private string _filePath; + + /// <summary> + /// Path information + /// </summary> private string _pathInfo; + + /// <summary> + /// Translated Path + /// </summary> private string _pathTranslated; + + /// <summary> + /// Query string + /// </summary> private string _queryString; + + /// <summary> + /// Query string in byte array + /// </summary> private byte[] _queryStringBytes; + /// <summary> + /// Length of content + /// </summary> private int _contentLength; + + /// <summary> + /// Length of content preload + /// </summary> private int _preloadedContentLength; + + /// <summary> + /// Content preload + /// </summary> private byte[] _preloadedContent; + /// <summary> + /// All headers in raw format + /// </summary> private string _allRawHeaders; + + /// <summary> + /// Unknown request headers + /// </summary> private string[][] _unknownRequestHeaders; + + /// <summary> + /// Known request headers + /// </summary> private string[] _knownRequestHeaders; + + /// <summary> + /// + /// </summary> private bool _specialCaseStaticFileHeaders; - // cached response + /// <summary> + /// Indicates, if header is sent + /// </summary> private bool _headersSent; + + /// <summary> + /// Status of the response + /// </summary> private int _responseStatus; + + /// <summary> + /// Response headers + /// </summary> private StringBuilder _responseHeadersBuilder; + + /// <summary> + /// Reponse Body bytes + /// </summary> private ArrayList _responseBodyBytes; + + /// <summary> + /// Remote IP + /// </summary> private String remoteIP; #endregion #region static variables + /// <summary> + /// Int to hex character array + /// </summary> private static char[] IntToHex = new char[16] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; #endregion #region ctor + /// <summary> + /// Constructor + /// </summary> + /// <param name="server">Server</param> + /// <param name="host">Host</param> + /// <param name="connection">Connection</param> + /// <param name="configuration">Server configuration</param> public Request(Server server, Host host, Connection connection,ServerConfiguration configuration) : base(String.Empty, String.Empty, null) { _server = server; @@ -107,6 +248,9 @@ #endregion #region public methods + /// <summary> + /// Process the request + /// </summary> public void Process() { // read the request if (!TryParseRequest()) { @@ -144,7 +288,13 @@ HttpRuntime.ProcessRequest(this); _server.writeInfoAccessLog("Response send by HttpRuntime request for request from: " + remoteIP + " for " + this._path); } + #endregion + #region private methods + /// <summary> + /// Checks for all secuirty options. If access is denied than an error will be sent + /// </summary> + /// <returns>true, if request is allowed; false otherwise</returns> private bool checkSecurity() { if (_configuration.AllowedAccessMode != AccessMode.Global) { if (_configuration.AllowedAccessMode == AccessMode.Local) { @@ -165,7 +315,7 @@ } } if (!ipFound) { - _connection.WriteErrorAndClose(403); + _connection.WriteErrorAndClose(403); _server.writeErrorAccessLog("Send error 403 (Acces Denied by configuration) for request from: " + remoteIP + " for " + this._path); return false; } @@ -192,9 +342,13 @@ } return true; } - #endregion - - #region private methods + + /// <summary> + /// Sends a response from a file stream + /// </summary> + /// <param name="f">Filestream</param> + /// <param name="offset">Offset</param> + /// <param name="length">Length</param> private void SendResponseFromFileStream(FileStream f, long offset, long length) { long fileSize = f.Length; @@ -233,6 +387,9 @@ } } + /// <summary> + /// Reset the request + /// </summary> private void Reset() { _headerBytes = null; _startHeadersOffset = 0; @@ -262,6 +419,10 @@ _specialCaseStaticFileHeaders = false; } + /// <summary> + /// Tries to parse the request. If request couldn't be parsed than an error will be sent + /// </summary> + /// <returns>true, if request can be parsed;false otherwise</returns> private bool TryParseRequest() { Reset(); @@ -302,6 +463,10 @@ return true; } + /// <summary> + /// Tries to read all headers from the request + /// </summary> + /// <returns>true, if everything can be parsed; false otherwise</returns> private bool TryReadAllHeaders() { // read the first packet (up to 32K) byte[] headerBytes = _connection.ReadRequestBytes(maxHeaderBytes); @@ -353,6 +518,9 @@ return true; } + /// <summary> + /// Reads all request headers + /// </summary> private void ReadAllHeaders() { _headerBytes = null; @@ -365,6 +533,9 @@ while (_endHeadersOffset < 0); // found \r\n\r\n } + /// <summary> + /// Parse a request line + /// </summary> private void ParseRequestLine() { ByteString requestLine = (ByteString)_headerByteStrings[0]; ByteString[] elems = requestLine.Split(' '); @@ -433,6 +604,10 @@ _pathTranslated = MapPath(_filePath); } + /// <summary> + /// Checks if the path is not allowed + /// </summary> + /// <returns>true, if it is a bad path; false otherwise</returns> private bool IsBadPath() { if (_path.IndexOfAny(badPathChars) >= 0) { return true; @@ -449,6 +624,9 @@ return false; } + /// <summary> + /// Parse the request headers + /// </summary> private void ParseHeaders() { _knownRequestHeaders = new string[RequestHeaderMaximum]; @@ -496,6 +674,9 @@ } } + /// <summary> + /// Parse posted content in the request + /// </summary> private void ParsePostedContent() { _contentLength = 0; _preloadedContentLength = 0; @@ -522,6 +703,9 @@ } } + /// <summary> + /// Skips all posted content + /// </summary> private void SkipAllPostedContent() { if (_contentLength > 0 && _preloadedContentLength < _contentLength) { int bytesRemaining = (_contentLength - _preloadedContentLength); @@ -536,6 +720,10 @@ } } + /// <summary> + /// Checks if this is a request for a restricted directory + /// </summary> + /// <returns>true, if it is a request for a restricted directory; false otherwise</returns> private bool IsRequestForRestrictedDirectory() { String p = CultureInfo.InvariantCulture.TextInfo.ToLower(_path); @@ -554,6 +742,10 @@ return false; } + /// <summary> + /// Process a directory listing request + /// </summary> + /// <returns>true, if request could be handled; false otherwise</returns> private bool ProcessDirectoryListingRequest() { if (_verb != "GET") { return false; @@ -626,6 +818,9 @@ return true; } + /// <summary> + /// Prepares the response + /// </summary> private void PrepareResponse() { _headersSent = false; _responseStatus = 200; @@ -636,6 +831,11 @@ #endregion #region private static methods + /// <summary> + /// Encodes a url redirect + /// </summary> + /// <param name="path">Path</param> + /// <returns>encoded url redirect</returns> private string UrlEncodeRedirect(string path) { // this method mimics the logic in HttpResponse.Redirect (which relies on internal methods) try { @@ -682,6 +882,10 @@ #endregion #region Implementation of HttpWorkerRequest + /// <summary> + /// Flushs the response + /// </summary> + /// <param name="finalFlush">Do a final flush? (Close connection)</param> public override void FlushResponse(bool finalFlush) { _connectionPermission.Assert(); @@ -702,6 +906,9 @@ } } + /// <summary> + /// Handles end of request + /// </summary> public override void EndOfRequest() { Connection conn = _connection; @@ -710,44 +917,85 @@ _connection = null; } } + + /// <summary> + /// Gets uri path + /// </summary> + /// <returns>Uri path</returns> public override string GetUriPath() { return _path; } + /// <summary> + /// Gets query string + /// </summary> + /// <returns>Query string</returns> public override string GetQueryString() { return _queryString; } + /// <summary> + /// Gets query string as raw bytes + /// </summary> + /// <returns>query string as raw bytes</returns> public override byte[] GetQueryStringRawBytes() { return _queryStringBytes; } + /// <summary> + /// Gets raw url + /// </summary> + /// <returns>Raw url</returns> public override string GetRawUrl() { return _url; } + /// <summary> + /// Gets http method + /// </summary> + /// <returns>Http method</returns> public override string GetHttpVerbName() { return _verb; } + /// <summary> + /// Gets http protocol + /// </summary> + /// <returns>Http protocol</returns> public override string GetHttpVersion() { return _prot; } + /// <summary> + /// Gets remote IP/address + /// </summary> + /// <returns>Remote IP/address</returns> public override string GetRemoteAddress() { _connectionPermission.Assert(); return _connection.RemoteIP; } + /// <summary> + /// Gets remote port + /// </summary> + /// <returns>Remote port</returns> public override int GetRemotePort() { return 0; } + /// <summary> + /// Gets local address + /// </summary> + /// <returns>Local address</returns> public override string GetLocalAddress() { _connectionPermission.Assert(); return _connection.LocalIP; } + /// <summary> + /// Gets server name + /// </summary> + /// <returns>Server name</returns> public override string GetServerName() { string localAddress = GetLocalAddress(); if (localAddress.Equals("127.0.0.1")) { @@ -756,38 +1004,76 @@ return localAddress; } + /// <summary> + /// Gets local port + /// </summary> + /// <returns>Local port</returns> public override int GetLocalPort() { return _host.Port; } + /// <summary> + /// Gets file path + /// </summary> + /// <returns>File path</returns> public override string GetFilePath() { return _filePath; } + /// <summary> + /// Gets translated file path + /// </summary> + /// <returns>Translated file path</returns> public override string GetFilePathTranslated() { return _pathTranslated; } + /// <summary> + /// Gets Path information + /// </summary> + /// <returns>Path infroamtion</returns> public override string GetPathInfo() { return _pathInfo; } + /// <summary> + /// Gets application path + /// </summary> + /// <returns>Application Path</returns> public override string GetAppPath() { return _host.VirtualPath; } + /// <summary> + /// Gets translated application path + /// </summary> + /// <returns>Translated application path</returns> public override string GetAppPathTranslated() { return _host.PhysicalPath; } + /// <summary> + /// Gets preload entity body + /// </summary> + /// <returns>Preload entity body</returns> public override byte[] GetPreloadedEntityBody() { return _preloadedContent; } + /// <summary> + /// Returns a value indicating whether all request data is available and no further reads from the client are required + /// </summary> + /// <returns>true, if all request data is available; false otherwise</returns> public override bool IsEntireEntityBodyIsPreloaded() { return (_contentLength == _preloadedContentLength); } + /// <summary> + /// Reads entity body + /// </summary> + /// <param name="buffer">Buffer</param> + /// <param name="size">Size of buffer</param> + /// <returns>Number of read bytes</returns> public override int ReadEntityBody(byte[] buffer, int size) { int bytesRead = 0; @@ -802,10 +1088,20 @@ return bytesRead; } + /// <summary> + /// Gets known request headers with given index + /// </summary> + /// <param name="index">Index of the header</param> + /// <returns>Request header</returns> public override string GetKnownRequestHeader(int index) { return _knownRequestHeaders[index]; } + /// <summary> + /// Gets unknown request header with the given name + /// </summary> + /// <param name="name">Name of the header</param> + /// <returns>Request header</returns> public override string GetUnknownRequestHeader(string name) { int n = _unknownRequestHeaders.Length; @@ -818,10 +1114,19 @@ return null; } + /// <summary> + /// Gets all unknown request headers + /// </summary> + /// <returns>All unknown request headers</returns> public override string[][] GetUnknownRequestHeaders() { return _unknownRequestHeaders; } + /// <summary> + /// Gets server variable + /// </summary> + /// <param name="name">Name of the server variable</param> + /// <returns>Value of the server variable</returns> public override string GetServerVariable(string name) { string s = String.Empty; @@ -842,6 +1147,11 @@ return s; } + /// <summary> + /// Maps a path from virutal to physical + /// </summary> + /// <param name="path">Virtual path</param> + /// <returns>Physical path</returns> public override string MapPath(string path) { string mappedPath = String.Empty; bool isClientScriptPath = false; @@ -883,10 +1193,20 @@ return mappedPath; } + /// <summary> + /// Sends status + /// </summary> + /// <param name="statusCode">Statuscode</param> + /// <param name="statusDescription">Descritption</param> public override void SendStatus(int statusCode, string statusDescription) { _responseStatus = statusCode; } + /// <summary> + /// Sends known response header + /// </summary> + /// <param name="index">Index of the response header</param> + /// <param name="value">Value of the response header</param> public override void SendKnownResponseHeader(int index, string value) { if (_headersSent) { return; @@ -921,6 +1241,11 @@ _responseHeadersBuilder.Append("\r\n"); } + /// <summary> + /// Sends unknown response header + /// </summary> + /// <param name="name">Name of the response header</param> + /// <param name="value">Value of the response header</param> public override void SendUnknownResponseHeader(string name, string value) { if (_headersSent) return; @@ -931,6 +1256,10 @@ _responseHeadersBuilder.Append("\r\n"); } + /// <summary> + /// Sends calculated content length + /// </summary> + /// <param name="contentLength">Content Length</param> public override void SendCalculatedContentLength(int contentLength) { if (!_headersSent) { _responseHeadersBuilder.Append("Content-Length: "); @@ -939,20 +1268,36 @@ } } + /// <summary> + /// Returns if the headers are sent + /// </summary> + /// <returns>true, if the headers are sent;false otherwise</returns> public override bool HeadersSent() { return _headersSent; } + /// <summary> + /// Checks, if the client is connected + /// </summary> + /// <returns>true, if client is connected; false otherwise</returns> public override bool IsClientConnected() { _connectionPermission.Assert(); return _connection.Connected; } + /// <summary> + /// Closes the connection + /// </summary> public override void CloseConnection() { _connectionPermission.Assert(); _connection.Close(); } + /// <summary> + /// Sends response from memory + /// </summary> + /// <param name="data">Data to send</param> + /// <param name="length">Length of the data</param> public override void SendResponseFromMemory(byte[] data, int length) { try { if (length > 0) { @@ -966,6 +1311,12 @@ } } + /// <summary> + /// Sends a response from file + /// </summary> + /// <param name="filename">Filename</param> + /// <param name="offset">Offset</param> + /// <param name="length">Length</param> public override void SendResponseFromFile(string filename, long offset, long length) { if (length == 0) { return; @@ -984,6 +1335,12 @@ } } + /// <summary> + /// Sends a response from file + /// </summary> + /// <param name="handle">Handle of the file</param> + /// <param name="offset">Offset</param> + /// <param name="length">Length</param> public override void SendResponseFromFile(IntPtr handle, long offset, long length) { if (length == 0) { return; Modified: trunk/Version2/WebServer/Server.cs =================================================================== --- trunk/Version2/WebServer/Server.cs 2007-03-09 17:45:37 UTC (rev 33) +++ trunk/Version2/WebServer/Server.cs 2007-03-09 22:37:29 UTC (rev 34) @@ -21,27 +21,67 @@ using log4net; namespace MPW.WebServer { - + /// <summary> + /// Main class of the web server + /// </summary> public sealed class Server : MarshalByRefObject { #region variables + /// <summary> + /// Global web server log + /// </summary> private ILog log = LogManager.GetLogger("WebServer"); + + /// <summary> + /// Log of all access + /// </summary> private ILog accessLog = LogManager.GetLogger("WebServerAccess"); + + /// <summary> + /// Configuration of the server + /// </summary> private ServerConfiguration _configuration; + /// <summary> + /// Callback on start + /// </summary> private WaitCallback _onStart; + + /// <summary> + /// Callback on socket accept + /// </summary> private WaitCallback _onSocketAccept; + /// <summary> + /// Indicates, if shutdown is in progress + /// </summary> private bool _shutdownInProgress; + /// <summary> + /// Indicates, if server is pause + /// </summary> private bool _pause; + /// <summary> + /// Application Manager + /// </summary> private ApplicationManager _appManager; + /// <summary> + /// Server socket + /// </summary> private Socket _socket; + + /// <summary> + /// Hosting environment + /// </summary> private Host _host; #endregion #region ctor + /// <summary> + /// Constructor + /// </summary> + /// <param name="configuration">Server configuration</param> public Server(ServerConfiguration configuration) { _configuration = configuration; String tempPhysicalPath = configuration.PhysicalPath; @@ -56,6 +96,10 @@ #endregion #region overrides + /// <summary> + /// Never expire the license + /// </summary> + /// <returns>Object</returns> public override object InitializeLifetimeService() { // never expire the license return null; @@ -63,24 +107,36 @@ #endregion #region prroperties + /// <summary> + /// Gets the virtual Path + /// </summary> public string VirtualPath { get { return _configuration.VirtualPath; } } + /// <summary> + /// Gets the physical path + /// </summary> public string PhysicalPath { get { return _configuration.PhysicalPath; } } + /// <summary> + /// Gets the port + /// </summary> public int Port { get { return _configuration.Port; } } + /// <summary> + /// Gets the root url + /// </summary> public string RootUrl { get { if (_configuration.Port != 80) { @@ -91,10 +147,17 @@ } } + /// <summary> + /// Gets/Sets if the server is paused + /// </summary> public bool Pause { get { return _pause; } set { _pause = value; } } + + /// <summary> + /// Gets the bind address + /// </summary> public String BindAdress { get { return _configuration.BindAddress; @@ -103,9 +166,9 @@ #endregion #region public methods - // - // Socket listening - // + /// <summary> + /// Starts the server and listen on the socket + /// </summary> public void Start() { _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _socket.ExclusiveAddressUse = true; @@ -124,6 +187,9 @@ log.Debug("Web server started. Listening on: " + _configuration.BindAddress + ":" + _configuration.Port); } + /// <summary> + /// Stops the server, all connections and the hosting environment + /// </summary> public void Stop() { _shutdownInProgress = true; @@ -152,6 +218,11 @@ _shutdownInProgress = false; } } + + /// <summary> + /// Reloads the web server with a new configuration + /// </summary> + /// <param name="configuration">New configuration</param> public void Reload(ServerConfiguration configuration) { Stop(); _configuration = configuration; @@ -162,6 +233,10 @@ #endregion #region event handling + /// <summary> + /// Handles on socket accept event and process the new request + /// </summary> + /// <param name="acceptedSocket">New socket</param> private void OnSocketAccept(object acceptedSocket) { if (!_shutdownInProgress) { Connection conn = new Connection(this, (Socket)acceptedSocket, _configuration); @@ -192,14 +267,21 @@ } } - // called at the end of request processing - // to disconnect the remoting proxy for Connection object - // and allow GC to pick it up + /// <summary> + /// called at the end of request processing + /// to disconnect the remoting proxy for Connection object + /// and allow GC to pick it up + /// </summary> + /// <param name="conn">Corresponding connection</param> internal void OnRequestEnd(Connection conn) { RemotingServices.Disconnect(conn); //accessLog.Info("Request from: " + conn.RemoteIP + " done."); } + /// <summary> + /// Handles the on start event and listens on the socket + /// </summary> + /// <param name="unused"></param> private void OnStart(Object unused) { while (!_shutdownInProgress) { try { @@ -213,6 +295,10 @@ #endregion #region private methods + /// <summary> + /// Generates the hosting environment + /// </summary> + /// <returns>Hosting environment, if possible</returns> private Host GetHost() { if (_shutdownInProgress) return null; @@ -242,15 +328,34 @@ #endregion #region internal methods + /// <summary> + /// Called, when host is stopped. Sets internal variable to null + /// </summary> internal void HostStopped() { _host = null; } + + /// <summary> + /// Writes an error to log + /// </summary> + /// <param name="message">Error message</param> + /// <param name="e">Corresponding Exception</param> internal void WriteErrorToLog(String message, Exception e) { log.Error(message, e); } + + /// <summary> + /// Writes an access information to the access log + /// </summary> + ... [truncated message content] |
From: <mis...@us...> - 2007-03-18 22:09:30
|
Revision: 36 http://svn.sourceforge.net/mp-webinterface/?rev=36&view=rev Author: misterd_sf Date: 2007-03-18 10:33:15 -0700 (Sun, 18 Mar 2007) Log Message: ----------- Added possibility to bind to any interface Added Table for allowed IPs for restricted access mode Fixed Start/Stop Buttons of Systray Fixed Reload of the web server Changed read/write of configuration file to web server methods Modified Paths: -------------- trunk/Version2/Control Center/Control_Center_App.Designer.cs trunk/Version2/Control Center/Control_Center_App.cs trunk/Version2/Control Center/Control_Center_App.resx trunk/Version2/WebServer/Server.cs Modified: trunk/Version2/Control Center/Control_Center_App.Designer.cs =================================================================== --- trunk/Version2/Control Center/Control_Center_App.Designer.cs 2007-03-11 10:11:22 UTC (rev 35) +++ trunk/Version2/Control Center/Control_Center_App.Designer.cs 2007-03-18 17:33:15 UTC (rev 36) @@ -40,8 +40,8 @@ this.LblMPWWebsiteLink = new System.Windows.Forms.Label(); this.LLblMPWWebsiteLink = new System.Windows.Forms.LinkLabel(); this.gBxMPWWebServerSetup = new System.Windows.Forms.GroupBox(); + this.bindIPAddressDropDown = new System.Windows.Forms.ComboBox(); this.saveButton = new System.Windows.Forms.Button(); - this.bindIPBox = new System.Windows.Forms.TextBox(); this.accessModeDropDown = new System.Windows.Forms.ComboBox(); this.LblSetupAccessMode = new System.Windows.Forms.Label(); this.LblSetupBindLocalIP = new System.Windows.Forms.Label(); @@ -69,6 +69,9 @@ this.gBxLogs = new System.Windows.Forms.GroupBox(); this.CmdOpenAccessLog = new System.Windows.Forms.Button(); this.CmdOpenEventViewer = new System.Windows.Forms.Button(); + this.LblallowedIPs = new System.Windows.Forms.Label(); + this.allowedIPs = new System.Windows.Forms.DataGridView(); + this.allowedIP = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.gBxStatus.SuspendLayout(); this.gBxMPWWebServerSetup.SuspendLayout(); this.gBxMPWWebServer.SuspendLayout(); @@ -76,6 +79,7 @@ this.gBxAboutMPW.SuspendLayout(); this.gBxVersion.SuspendLayout(); this.gBxLogs.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.allowedIPs)).BeginInit(); this.SuspendLayout(); // // gBxStatus @@ -169,8 +173,10 @@ // // gBxMPWWebServerSetup // + this.gBxMPWWebServerSetup.Controls.Add(this.allowedIPs); + this.gBxMPWWebServerSetup.Controls.Add(this.LblallowedIPs); + this.gBxMPWWebServerSetup.Controls.Add(this.bindIPAddressDropDown); this.gBxMPWWebServerSetup.Controls.Add(this.saveButton); - this.gBxMPWWebServerSetup.Controls.Add(this.bindIPBox); this.gBxMPWWebServerSetup.Controls.Add(this.accessModeDropDown); this.gBxMPWWebServerSetup.Controls.Add(this.LblSetupAccessMode); this.gBxMPWWebServerSetup.Controls.Add(this.LblSetupBindLocalIP); @@ -178,14 +184,23 @@ this.gBxMPWWebServerSetup.Controls.Add(this.LblSetupWebserverPort); this.gBxMPWWebServerSetup.Location = new System.Drawing.Point(318, 12); this.gBxMPWWebServerSetup.Name = "gBxMPWWebServerSetup"; - this.gBxMPWWebServerSetup.Size = new System.Drawing.Size(300, 314); + this.gBxMPWWebServerSetup.Size = new System.Drawing.Size(325, 314); this.gBxMPWWebServerSetup.TabIndex = 1; this.gBxMPWWebServerSetup.TabStop = false; this.gBxMPWWebServerSetup.Text = "MPW Webserver setup"; // + // bindIPAddressDropDown + // + this.bindIPAddressDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.bindIPAddressDropDown.FormattingEnabled = true; + this.bindIPAddressDropDown.Location = new System.Drawing.Point(126, 58); + this.bindIPAddressDropDown.Name = "bindIPAddressDropDown"; + this.bindIPAddressDropDown.Size = new System.Drawing.Size(193, 21); + this.bindIPAddressDropDown.TabIndex = 11; + // // saveButton // - this.saveButton.Location = new System.Drawing.Point(126, 132); + this.saveButton.Location = new System.Drawing.Point(169, 279); this.saveButton.Name = "saveButton"; this.saveButton.Size = new System.Drawing.Size(115, 23); this.saveButton.TabIndex = 10; @@ -193,29 +208,24 @@ this.saveButton.UseVisualStyleBackColor = true; this.saveButton.Click += new System.EventHandler(this.saveButton_Click); // - // bindIPBox - // - this.bindIPBox.Location = new System.Drawing.Point(126, 59); - this.bindIPBox.Name = "bindIPBox"; - this.bindIPBox.Size = new System.Drawing.Size(115, 20); - this.bindIPBox.TabIndex = 9; - // // accessModeDropDown // + this.accessModeDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.accessModeDropDown.FormattingEnabled = true; this.accessModeDropDown.Items.AddRange(new object[] { "Local", "Global", "Restricted"}); - this.accessModeDropDown.Location = new System.Drawing.Point(126, 94); + this.accessModeDropDown.Location = new System.Drawing.Point(126, 85); this.accessModeDropDown.Name = "accessModeDropDown"; - this.accessModeDropDown.Size = new System.Drawing.Size(115, 21); + this.accessModeDropDown.Size = new System.Drawing.Size(193, 21); this.accessModeDropDown.TabIndex = 8; + this.accessModeDropDown.SelectedIndexChanged += new System.EventHandler(this.accessModeDropDown_SelectedIndexChanged); // // LblSetupAccessMode // this.LblSetupAccessMode.AutoSize = true; - this.LblSetupAccessMode.Location = new System.Drawing.Point(6, 102); + this.LblSetupAccessMode.Location = new System.Drawing.Point(6, 88); this.LblSetupAccessMode.Name = "LblSetupAccessMode"; this.LblSetupAccessMode.Size = new System.Drawing.Size(74, 13); this.LblSetupAccessMode.TabIndex = 7; @@ -224,7 +234,7 @@ // LblSetupBindLocalIP // this.LblSetupBindLocalIP.AutoSize = true; - this.LblSetupBindLocalIP.Location = new System.Drawing.Point(6, 67); + this.LblSetupBindLocalIP.Location = new System.Drawing.Point(6, 61); this.LblSetupBindLocalIP.Name = "LblSetupBindLocalIP"; this.LblSetupBindLocalIP.Size = new System.Drawing.Size(81, 13); this.LblSetupBindLocalIP.TabIndex = 6; @@ -234,8 +244,9 @@ // this.portBox.Location = new System.Drawing.Point(126, 32); this.portBox.Name = "portBox"; - this.portBox.Size = new System.Drawing.Size(115, 20); + this.portBox.Size = new System.Drawing.Size(193, 20); this.portBox.TabIndex = 1; + this.portBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.portBox_KeyPress); // // LblSetupWebserverPort // @@ -312,27 +323,27 @@ this.stopToolStripMenuItem, this.exitToolStripMenuItem}); this.trayContextMenu.Name = "trayContextMenu"; - this.trayContextMenu.Size = new System.Drawing.Size(99, 70); + this.trayContextMenu.Size = new System.Drawing.Size(110, 70); this.trayContextMenu.Text = "MPW"; // // trayStart // this.trayStart.Name = "trayStart"; - this.trayStart.Size = new System.Drawing.Size(98, 22); + this.trayStart.Size = new System.Drawing.Size(109, 22); this.trayStart.Text = "Start"; this.trayStart.Click += new System.EventHandler(this.trayStart_Click); // // stopToolStripMenuItem // this.stopToolStripMenuItem.Name = "stopToolStripMenuItem"; - this.stopToolStripMenuItem.Size = new System.Drawing.Size(98, 22); + this.stopToolStripMenuItem.Size = new System.Drawing.Size(109, 22); this.stopToolStripMenuItem.Text = "Stop"; this.stopToolStripMenuItem.Click += new System.EventHandler(this.stopToolStripMenuItem_Click); // // exitToolStripMenuItem // this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(98, 22); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(109, 22); this.exitToolStripMenuItem.Text = "Exit"; this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // @@ -348,7 +359,7 @@ this.gBxAboutMPW.Controls.Add(this.LblMPWWebsiteLink); this.gBxAboutMPW.Location = new System.Drawing.Point(12, 332); this.gBxAboutMPW.Name = "gBxAboutMPW"; - this.gBxAboutMPW.Size = new System.Drawing.Size(606, 38); + this.gBxAboutMPW.Size = new System.Drawing.Size(631, 38); this.gBxAboutMPW.TabIndex = 3; this.gBxAboutMPW.TabStop = false; this.gBxAboutMPW.Text = "About MPW"; @@ -453,11 +464,39 @@ this.CmdOpenEventViewer.UseVisualStyleBackColor = true; this.CmdOpenEventViewer.Click += new System.EventHandler(this.CmdOpenEventViewer_Click); // + // LblallowedIPs + // + this.LblallowedIPs.AutoSize = true; + this.LblallowedIPs.Location = new System.Drawing.Point(6, 115); + this.LblallowedIPs.Name = "LblallowedIPs"; + this.LblallowedIPs.Size = new System.Drawing.Size(65, 13); + this.LblallowedIPs.TabIndex = 12; + this.LblallowedIPs.Text = "Allowed IPs:"; + // + // allowedIPs + // + this.allowedIPs.AllowUserToResizeColumns = false; + this.allowedIPs.AllowUserToResizeRows = false; + this.allowedIPs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.allowedIPs.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.allowedIP}); + this.allowedIPs.Location = new System.Drawing.Point(126, 112); + this.allowedIPs.Name = "allowedIPs"; + this.allowedIPs.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; + this.allowedIPs.Size = new System.Drawing.Size(193, 161); + this.allowedIPs.TabIndex = 13; + // + // allowedIP + // + this.allowedIP.HeaderText = "IP"; + this.allowedIP.Name = "allowedIP"; + this.allowedIP.Width = 150; + // // Control_Center_App // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(632, 384); + this.ClientSize = new System.Drawing.Size(655, 384); this.Controls.Add(this.gBxLogs); this.Controls.Add(this.gBxAboutMPW); this.Controls.Add(this.gBxMPWWebServer); @@ -482,6 +521,7 @@ this.gBxVersion.ResumeLayout(false); this.gBxVersion.PerformLayout(); this.gBxLogs.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.allowedIPs)).EndInit(); this.ResumeLayout(false); } @@ -505,8 +545,7 @@ private System.Windows.Forms.Label statusTVService; private System.Windows.Forms.ComboBox accessModeDropDown; private System.Windows.Forms.Label LblSetupAccessMode; - private System.Windows.Forms.Label LblSetupBindLocalIP; - private System.Windows.Forms.TextBox bindIPBox; + private System.Windows.Forms.Label LblSetupBindLocalIP; private System.Windows.Forms.Button saveButton; private System.Windows.Forms.GroupBox gBxMPWWebServer; private System.Windows.Forms.NotifyIcon trayIcon; @@ -527,6 +566,10 @@ private System.Windows.Forms.GroupBox gBxLogs; private System.Windows.Forms.Button CmdOpenEventViewer; private System.Windows.Forms.Button CmdOpenAccessLog; + private System.Windows.Forms.ComboBox bindIPAddressDropDown; + private System.Windows.Forms.DataGridView allowedIPs; + private System.Windows.Forms.Label LblallowedIPs; + private System.Windows.Forms.DataGridViewTextBoxColumn allowedIP; } } Modified: trunk/Version2/Control Center/Control_Center_App.cs =================================================================== --- trunk/Version2/Control Center/Control_Center_App.cs 2007-03-11 10:11:22 UTC (rev 35) +++ trunk/Version2/Control Center/Control_Center_App.cs 2007-03-18 17:33:15 UTC (rev 36) @@ -8,388 +8,373 @@ using System.IO; using System.ServiceProcess; using System.Xml; +using System.Net; +using System.Net.NetworkInformation; +using MPW.WebServer; -namespace MPW.Control_Center -{ - public partial class Control_Center_App : Form - { - //Service Controllers - private ServiceController TVServiceController = new ServiceController("TVService"); - private ServiceController MPWServiceController = new ServiceController("MPW"); - - //MPW Webserver settings - private int port; - private String bindIP; - private int accesMode; - - private String configFile; +namespace MPW.Control_Center { + public partial class Control_Center_App : Form { + //Service Controllers + private ServiceController TVServiceController = new ServiceController("TVService"); + private ServiceController MPWServiceController = new ServiceController("MPW"); - private bool exitRequested; + //MPW Webserver settings + private ServerConfiguration configuration; - public Control_Center_App() - { - InitializeComponent(); - configFile = System.AppDomain.CurrentDomain.BaseDirectory + "Configuration.xml"; - RefreshControllers(); - LoadSettings(); + private String configFile; - LoadVersionInfo(); - } + private bool exitRequested; - /// <summary> - /// gets version info for MPW components and puts it on labels on form - /// </summary> - private void LoadVersionInfo() - { - LblMPWCCVersion.Text = System.Reflection.Assembly.GetCallingAssembly().GetName().Version.ToString(); - - string fileName; + private List<string> ipAddresses; - try - { - fileName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "WebServer.dll"); - LblMPWWebserverVersion.Text = System.Diagnostics.FileVersionInfo.GetVersionInfo(fileName).ProductVersion; - } - catch - { } + public Control_Center_App() { + InitializeComponent(); + configFile = System.AppDomain.CurrentDomain.BaseDirectory + "Configuration.xml"; + RefreshControllers(); + InitializeIPList(); + LoadSettings(); - try - { - fileName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "MPW Service.exe"); - LblMPWServiceVersion.Text = System.Diagnostics.FileVersionInfo.GetVersionInfo(fileName).ProductVersion; - } - catch - { } - - } + LoadVersionInfo(); + } - /// <summary> - /// refreshes the status indicators for MPW webserver and TV services - /// </summary> - private void RefreshControllers() - { - //MPW Webserver - MPWServiceController.Refresh(); - try - { - statusMPWServerConn.Text = MPWServiceController.Status.ToString(); - - if (MPWServiceController.Status == ServiceControllerStatus.Running) - { - statusMPWServerConn.ForeColor = Color.Green; - startstopButton.Text = "Stop"; + /// <summary> + /// Initialize the dropdown list with all available IPs + /// </summary> + private void InitializeIPList() { + ipAddresses = new List<string>(); + bindIPAddressDropDown.Items.Add("0.0.0.0 - All interfaces"); + ipAddresses.Add("0.0.0.0"); + bindIPAddressDropDown.Items.Add("127.0.0.1 - Loopback interface"); + ipAddresses.Add("127.0.0.1"); + IPHostEntry local = Dns.GetHostEntry(Environment.MachineName); + foreach (IPAddress ipaddress in local.AddressList) { + bindIPAddressDropDown.Items.Add(ipaddress.ToString()); + ipAddresses.Add(ipaddress.ToString()); + } } - else - { - statusMPWServerConn.ForeColor = Color.Red; - startstopButton.Text = "Start"; - } - } - catch - { - statusMPWServerConn.Text = "Error: Service not found!"; - startstopButton.Enabled = false; - } - - //TV Server - TVServiceController.Refresh(); - try - { - statusTVService.Text = TVServiceController.Status.ToString(); - if (TVServiceController.Status == ServiceControllerStatus.Running) - statusTVService.ForeColor = Color.Green; - else - statusTVService.ForeColor = Color.Red; - } - catch - { - statusTVService.Text = "Error: Service not found!"; - } - } + /// <summary> + /// gets version info for MPW components and puts it on labels on form + /// </summary> + private void LoadVersionInfo() { + LblMPWCCVersion.Text = System.Reflection.Assembly.GetCallingAssembly().GetName().Version.ToString(); - private void startstopButton_Click(object sender, EventArgs e) - { - if (startstopButton.Text == "Start") - Start(); - else - Stop(); - } + string fileName; - private void LLblMPWWebsiteLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - System.Diagnostics.Process.Start(LLblMPWWebsiteLink.Text); - } + try { + fileName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "WebServer.dll"); + LblMPWWebserverVersion.Text = System.Diagnostics.FileVersionInfo.GetVersionInfo(fileName).ProductVersion; + } catch { } - private void LLblMPWServerURL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - System.Diagnostics.Process.Start(LLblMPWServerURL.Text); - } + try { + fileName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "MPW Service.exe"); + LblMPWServiceVersion.Text = System.Diagnostics.FileVersionInfo.GetVersionInfo(fileName).ProductVersion; + } catch { } - /// <summary> - /// Start the server - /// </summary> - private void Start() - { - RefreshControllers(); - try - { - MPWServiceController.Start(); - startstopButton.Text = "Stop"; - } - catch - { - statusMPWServerConn.Text = "Error, could not start Service."; - } - RefreshControllers(); - } + } - /// <summary> - /// Stop the server - /// </summary> - private void Stop() - { - RefreshControllers(); - if (MPWServiceController.Status == ServiceControllerStatus.Running) - { - MPWServiceController.Stop(); - startstopButton.Text = "Start"; - } - RefreshControllers(); - } + /// <summary> + /// refreshes the status indicators for MPW webserver and TV services + /// </summary> + private void RefreshControllers() { + //MPW Webserver + MPWServiceController.Refresh(); + try { + statusMPWServerConn.Text = MPWServiceController.Status.ToString(); - /// <summary> - /// Build a string with the server URL - /// </summary> - /// <returns>server URL</returns> - private String ConstructServerURL() - { - String url = "http://"; - url += bindIP; - url += ":" + port.ToString(); - url += "/"; - return url; - } + if (MPWServiceController.Status == ServiceControllerStatus.Running) { + statusMPWServerConn.ForeColor = Color.Green; + startstopButton.Text = "Stop"; + } else { + statusMPWServerConn.ForeColor = Color.Red; + startstopButton.Text = "Start"; + } + } catch { + statusMPWServerConn.Text = "Error: Service not found!"; + startstopButton.Enabled = false; + } - /// <summary> - /// Load the configuration - /// </summary> - /// <returns>true if settings loaded successfully</returns> - private bool LoadSettings() - { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(configFile); - XmlNode node = doc.DocumentElement.SelectSingleNode("/configuration/bindAddress"); - bindIP = node.InnerText; - node = doc.DocumentElement.SelectSingleNode("/configuration/port"); - port = int.Parse(node.InnerText); - node = doc.DocumentElement.SelectSingleNode("/configuration/allowedAccesMode"); - accesMode = int.Parse(node.InnerText); + //TV Server + TVServiceController.Refresh(); + try { + statusTVService.Text = TVServiceController.Status.ToString(); + + if (TVServiceController.Status == ServiceControllerStatus.Running) + statusTVService.ForeColor = Color.Green; + else + statusTVService.ForeColor = Color.Red; + } catch { + statusTVService.Text = "Error: Service not found!"; + } } - catch (Exception ex) - { - MessageBox.Show("An error occurred when trying to load the settings." + Environment.NewLine + Environment.NewLine + ex.ToString(), "Error when loading settings", MessageBoxButtons.OK, MessageBoxIcon.Error); - return false; + + private void startstopButton_Click(object sender, EventArgs e) { + if (startstopButton.Text == "Start") + Start(); + else + Stop(); } - //Set the read values to the various TextBoxes - portBox.Text = port.ToString(); - bindIPBox.Text = bindIP; - accessModeDropDown.SelectedIndex = accesMode; - LLblMPWServerURL.Text = ConstructServerURL(); + private void LLblMPWWebsiteLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { + System.Diagnostics.Process.Start(LLblMPWWebsiteLink.Text); + } - return true; - } + private void LLblMPWServerURL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { + System.Diagnostics.Process.Start(LLblMPWServerURL.Text); + } - /// <summary> - /// save server configuration settings - /// </summary> - /// <returns>true if configuration settings were successfully saved.</returns> - private bool SaveSettings() - { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(configFile); + /// <summary> + /// Start the server + /// </summary> + private void Start() { + RefreshControllers(); + try { + MPWServiceController.Start(); + startstopButton.Text = "Stop"; + } catch { + statusMPWServerConn.Text = "Error, could not start Service."; + } + RefreshControllers(); + } - XmlNode node = doc.DocumentElement.SelectSingleNode("/configuration/bindAddress"); - node.InnerText = bindIP; - node = doc.DocumentElement.SelectSingleNode("/configuration/port"); - node.InnerText = port.ToString(); - node = doc.DocumentElement.SelectSingleNode("/configuration/allowedAccesMode"); - node.InnerText = accesMode.ToString(); - node = doc.DocumentElement.SelectSingleNode("/configuration/physicalPath"); - node.InnerText = System.AppDomain.CurrentDomain.BaseDirectory + @"wwwroot\"; + /// <summary> + /// Stop the server + /// </summary> + private void Stop() { + RefreshControllers(); + if (MPWServiceController.Status == ServiceControllerStatus.Running) { + MPWServiceController.Stop(); + startstopButton.Text = "Start"; + } + RefreshControllers(); + } - doc.Save(configFile); + /// <summary> + /// Build a string with the server URL + /// </summary> + /// <returns>server URL</returns> + private String ConstructServerURL() { + String url = "http://"; + url += configuration.BindAddress; + url += ":" + configuration.Port.ToString(); + url += "/"; + return url; } - catch (Exception ex) - { - MessageBox.Show("An error occurred when trying to save the settings." + Environment.NewLine + Environment.NewLine + ex.ToString(), "Error when saving settings", MessageBoxButtons.OK, MessageBoxIcon.Error); - return false; + + /// <summary> + /// Load the configuration + /// </summary> + /// <returns>true if settings loaded successfully</returns> + private bool LoadSettings() { + try { + configuration = ServerConfiguration.readConfiguration(configFile); + } catch (Exception ex) { + MessageBox.Show("An error occurred when trying to load the settings." + Environment.NewLine + Environment.NewLine + ex.ToString(), "Error when loading settings", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + //Set the read values to the various TextBoxes + portBox.Text = configuration.Port.ToString(); + if (ipAddresses.Contains(configuration.BindAddress)) { + bindIPAddressDropDown.SelectedIndex = ipAddresses.IndexOf(configuration.BindAddress); + } else { + bindIPAddressDropDown.SelectedIndex = 0; + } + accessModeDropDown.SelectedIndex = (int)configuration.AllowedAccessMode; + foreach(String allowedAddress in configuration.AllowedIP){ + allowedIPs.Rows.Add(allowedAddress); + } + LLblMPWServerURL.Text = ConstructServerURL(); + + return true; } - return true; - } + /// <summary> + /// save server configuration settings + /// </summary> + /// <returns>true if configuration settings were successfully saved.</returns> + private bool SaveSettings() { + try { + configuration.PhysicalPath = System.AppDomain.CurrentDomain.BaseDirectory + @"wwwroot\"; + ServerConfiguration.writeConfiguration(configFile, configuration); - /// <summary> - /// save configuration changes and reload configuration for server - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void saveButton_Click(object sender, EventArgs e) - { - //data validation - if (!int.TryParse(portBox.Text,out port)) - { - MessageBox.Show("The port number must be numerical only.", "Invalid port number", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); - return; + } catch (Exception ex) { + MessageBox.Show("An error occurred when trying to save the settings." + Environment.NewLine + Environment.NewLine + ex.ToString(), "Error when saving settings", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + return true; } - System.Net.IPAddress bindIPAddress; - if (!System.Net.IPAddress.TryParse(bindIPBox.Text, out bindIPAddress)) - { - MessageBox.Show("The bind IP address is not valid. It must be in the form of xxx.xxx.xxx.xxx, where x is a number.", "Invalid bind IP address", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); - return; + /// <summary> + /// save configuration changes and reload configuration for server + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void saveButton_Click(object sender, EventArgs e) { + //data validation + int port; + if (!int.TryParse(portBox.Text, out port)) { + MessageBox.Show("The port number must be numerical only.", "Invalid port number", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + return; + } + + configuration.BindAddress = ipAddresses[bindIPAddressDropDown.SelectedIndex]; + configuration.Port = port; + configuration.AllowedAccessMode = (AccessMode)accessModeDropDown.SelectedIndex; + List<String> newAllowedIP = new List<String>(); + object value; + String ipString; + IPAddress testAddress; + foreach (DataGridViewRow row in allowedIPs.Rows) { + value = row.Cells[0].Value; + if (value != null) { + ipString = value.ToString(); + if (IPAddress.TryParse(ipString, out testAddress)) { + newAllowedIP.Add(ipString); + } + } + } + configuration.AllowedIP = newAllowedIP; + SaveSettings(); + try { + if (MPWServiceController.Status == ServiceControllerStatus.Running) + MPWServiceController.ExecuteCommand((int)CustomCommands.ReloadConfiguration); //ReloadConfiguration + else + MessageBox.Show("You will need to restart the server to use the new configuration!"); + } catch { + MessageBox.Show("Error setting the new configuration."); + } + LLblMPWServerURL.Text = ConstructServerURL(); } - //port = portBox.Text; //already set if valid from TryParse - bindIP = bindIPBox.Text; - accesMode = accessModeDropDown.SelectedIndex; - SaveSettings(); - try - { - if (MPWServiceController.Status == ServiceControllerStatus.Running) - MPWServiceController.ExecuteCommand(0); //ReloadConfiguration - else - MessageBox.Show("You will need to restart the server to use the new configuration!"); - } - catch - { - MessageBox.Show("Error setting the new configuration."); - } - LLblMPWServerURL.Text = ConstructServerURL(); - } + /// <summary> + /// Restore by double-clicking the tray icon + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void trayIcon_MouseDoubleClick(object sender, MouseEventArgs e) { + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + trayIcon.Visible = true; + this.ShowInTaskbar = true; + RefreshControllers(); + } - /// <summary> - /// Restore by double-clicking the tray icon - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void trayIcon_MouseDoubleClick(object sender, MouseEventArgs e) - { - this.WindowState = System.Windows.Forms.FormWindowState.Normal; - trayIcon.Visible = true; - this.ShowInTaskbar = true; - RefreshControllers(); - } + /// <summary> + /// Minimize to tray on closing + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void Control_Center_App_FormClosing(object sender, FormClosingEventArgs e) { + if (!exitRequested) { + e.Cancel = true; + this.WindowState = System.Windows.Forms.FormWindowState.Minimized; + this.ShowInTaskbar = false; + } + } - /// <summary> - /// Minimize to tray on closing - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void Control_Center_App_FormClosing(object sender, FormClosingEventArgs e) - { - if (!exitRequested) - { - e.Cancel = true; - this.WindowState = System.Windows.Forms.FormWindowState.Minimized; - this.ShowInTaskbar = false; + /// <summary> + /// Tray menu action "Exit" + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void exitToolStripMenuItem_Click(object sender, EventArgs e) { + exitRequested = true; + this.Close(); } - } - /// <summary> - /// Tray menu action "Exit" - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { - exitRequested = true; - this.Close(); - } + /// <summary> + /// Tray menu action "Stop" + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void stopToolStripMenuItem_Click(object sender, EventArgs e) { + Stop(); + } - /// <summary> - /// Tray menu action "Stop" - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void stopToolStripMenuItem_Click(object sender, EventArgs e) - { - Start(); - } + /// <summary> + /// Tray menu action "Start" + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void trayStart_Click(object sender, EventArgs e) { + Start(); + } - /// <summary> - /// Tray menu action "Start" - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void trayStart_Click(object sender, EventArgs e) - { - Stop(); - } + /// <summary> + /// Status refresh button + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void CmdRefreshStatusInfo_Click(object sender, EventArgs e) { + RefreshControllers(); + } - /// <summary> - /// Status refresh button - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void CmdRefreshStatusInfo_Click(object sender, EventArgs e) - { - RefreshControllers(); - } + /// <summary> + /// Minimize to tray on minimize + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void Control_Center_App_Resize(object sender, EventArgs e) { + if (this.WindowState == FormWindowState.Minimized) + this.ShowInTaskbar = false; + } - /// <summary> - /// Minimize to tray on minimize - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void Control_Center_App_Resize(object sender, EventArgs e) - { - if (this.WindowState == FormWindowState.Minimized) - this.ShowInTaskbar = false; - } + /// <summary> + /// Update the Service status + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void refreshTimer_Tick(object sender, EventArgs e) { + if (this.WindowState != System.Windows.Forms.FormWindowState.Minimized) + RefreshControllers(); + } - /// <summary> - /// Update the Service status - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void refreshTimer_Tick(object sender, EventArgs e) - { - if (this.WindowState != System.Windows.Forms.FormWindowState.Minimized) - RefreshControllers(); - } + /// <summary> + /// Open Windows Event Viewer for user to browse logs + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void CmdOpenEventViewer_Click(object sender, EventArgs e) { + string fileName = System.IO.Path.Combine(Environment.SystemDirectory, "eventvwr.msc"); + System.Diagnostics.Process.Start(fileName); + } - /// <summary> - /// Open Windows Event Viewer for user to browse logs - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void CmdOpenEventViewer_Click(object sender, EventArgs e) - { - string fileName = System.IO.Path.Combine(Environment.SystemDirectory, "eventvwr.msc"); - System.Diagnostics.Process.Start(fileName); - } + /// <summary> + /// Open access log in text editor + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void CmdOpenAccessLog_Click(object sender, EventArgs e) { + string fileName; + fileName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "access.log"); - /// <summary> - /// Open access log in text editor - /// </summary> - /// <param name="sender"></param> - /// <param name="e"></param> - private void CmdOpenAccessLog_Click(object sender, EventArgs e) - { - string fileName; - fileName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "access.log"); + if (System.IO.File.Exists(fileName)) + System.Diagnostics.Process.Start(fileName); + else + MessageBox.Show("No access log file cound be found, most likely because no attempts of accessing MPW have been made.", "Access log not found", MessageBoxButtons.OK, MessageBoxIcon.Information); - if (System.IO.File.Exists(fileName)) - System.Diagnostics.Process.Start(fileName); - else - MessageBox.Show("No access log file cound be found, most likely because no attempts of accessing MPW have been made.", "Access log not found", MessageBoxButtons.OK, MessageBoxIcon.Information); + } - } - } + /// <summary> + /// Only accept numbers and control keys + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void portBox_KeyPress(object sender, KeyPressEventArgs e) { + if (!Char.IsNumber(e.KeyChar) && !Char.IsControl(e.KeyChar)) { + e.Handled = true; + } + + } + + /// <summary> + /// Activates/Deactivates the ip data grid + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void accessModeDropDown_SelectedIndexChanged(object sender, EventArgs e) { + allowedIPs.Enabled = accessModeDropDown.SelectedIndex == (int)AccessMode.Restricted; + } + } } \ No newline at end of file Modified: trunk/Version2/Control Center/Control_Center_App.resx =================================================================== --- trunk/Version2/Control Center/Control_Center_App.resx 2007-03-11 10:11:22 UTC (rev 35) +++ trunk/Version2/Control Center/Control_Center_App.resx 2007-03-18 17:33:15 UTC (rev 36) @@ -117,6 +117,9 @@ <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> + <metadata name="allowedIP.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> <metadata name="trayIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <value>17, 17</value> </metadata> @@ -9179,6 +9182,9 @@ <metadata name="refreshTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <value>246, 17</value> </metadata> + <metadata name="allowedIP.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <value> AAABAA8AAAAAAAEACAAoJAEA9gAAADAwAAABAAgAqA4AAB4lAQAgIAAAAQAIAKgIAADGMwEAGBgAAAEA Modified: trunk/Version2/WebServer/Server.cs =================================================================== --- trunk/Version2/WebServer/Server.cs 2007-03-11 10:11:22 UTC (rev 35) +++ trunk/Version2/WebServer/Server.cs 2007-03-18 17:33:15 UTC (rev 36) @@ -174,11 +174,18 @@ _socket.ExclusiveAddressUse = true; try { - - _socket.Bind(new IPEndPoint(IPAddress.Parse(_configuration.BindAddress), _configuration.Port)); + if (_configuration.BindAddress.Equals("0.0.0.0")) { + _socket.Bind(new IPEndPoint(IPAddress.Any, _configuration.Port)); + } else { + _socket.Bind(new IPEndPoint(IPAddress.Parse(_configuration.BindAddress), _configuration.Port)); + } } catch { _socket.ExclusiveAddressUse = false; - _socket.Bind(new IPEndPoint(IPAddress.Parse(_configuration.BindAddress), _configuration.Port)); + if (_configuration.BindAddress.Equals("0.0.0.0")) { + _socket.Bind(new IPEndPoint(IPAddress.Any, _configuration.Port)); + } else { + _socket.Bind(new IPEndPoint(IPAddress.Parse(_configuration.BindAddress), _configuration.Port)); + } } _socket.Listen((int)SocketOptionName.MaxConnections); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2007-04-09 20:04:43
|
Revision: 38 http://svn.sourceforge.net/mp-webinterface/?rev=38&view=rev Author: maschine Date: 2007-04-09 13:02:35 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Moved all Windows applications like server and control center to an own subfolder. Added Paths: ----------- trunk/Version2/Windows Apps/ trunk/Version2/Windows Apps/Control Center/ trunk/Version2/Windows Apps/MPW.sln trunk/Version2/Windows Apps/Setup/ trunk/Version2/Windows Apps/TestPage/ trunk/Version2/Windows Apps/WebServer/ trunk/Version2/Windows Apps/WindowsService/ trunk/Version2/Windows Apps/lib/ Removed Paths: ------------- trunk/Version2/Control Center/ trunk/Version2/MPW.sln trunk/Version2/Setup/ trunk/Version2/TestPage/ trunk/Version2/WebServer/ trunk/Version2/WindowsService/ trunk/Version2/lib/ Deleted: trunk/Version2/MPW.sln =================================================================== --- trunk/Version2/MPW.sln 2007-04-09 19:56:23 UTC (rev 37) +++ trunk/Version2/MPW.sln 2007-04-09 20:02:35 UTC (rev 38) @@ -1,78 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebServer", "WebServer\WebServer.csproj", "{4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}" - ProjectSection(WebsiteProperties) = preProject - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.Debug = "False" - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Control Center", "Control Center\Control Center.csproj", "{8B650819-E843-488A-89CF-E629A389D4DA}" - ProjectSection(WebsiteProperties) = preProject - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.Debug = "False" - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsService", "WindowsService\WindowsService.csproj", "{23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}" - ProjectSection(WebsiteProperties) = preProject - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.Debug = "False" - EndProjectSection -EndProject -Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup", "Setup\Setup.vdproj", "{8258A5A9-36D2-4917-90CC-D5A83C429F37}" - ProjectSection(WebsiteProperties) = preProject - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.Debug = "False" - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|.NET = Debug|.NET - Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Release|.NET = Release|.NET - Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|.NET.ActiveCfg = Debug|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|.NET.ActiveCfg = Release|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Any CPU.Build.0 = Release|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|.NET.ActiveCfg = Debug|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Release|.NET.ActiveCfg = Release|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Any CPU.Build.0 = Release|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|.NET.ActiveCfg = Debug|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|.NET.ActiveCfg = Release|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Any CPU.Build.0 = Release|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|.NET.ActiveCfg = Debug - {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|Any CPU.ActiveCfg = Debug - {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|Mixed Platforms.ActiveCfg = Debug - {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|.NET.ActiveCfg = Release - {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|Any CPU.ActiveCfg = Release - {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|Mixed Platforms.ActiveCfg = Release - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal Copied: trunk/Version2/Windows Apps/Control Center (from rev 36, trunk/Version2/Control Center) Copied: trunk/Version2/Windows Apps/MPW.sln (from rev 36, trunk/Version2/MPW.sln) =================================================================== --- trunk/Version2/Windows Apps/MPW.sln (rev 0) +++ trunk/Version2/Windows Apps/MPW.sln 2007-04-09 20:02:35 UTC (rev 38) @@ -0,0 +1,78 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebServer", "WebServer\WebServer.csproj", "{4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Control Center", "Control Center\Control Center.csproj", "{8B650819-E843-488A-89CF-E629A389D4DA}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsService", "WindowsService\WindowsService.csproj", "{23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup", "Setup\Setup.vdproj", "{8258A5A9-36D2-4917-90CC-D5A83C429F37}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|.NET.ActiveCfg = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|.NET.ActiveCfg = Release|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Any CPU.Build.0 = Release|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4CEEFA1E-7F95-43DF-A78C-9FE86082FDC3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|.NET.ActiveCfg = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|.NET.ActiveCfg = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Any CPU.Build.0 = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8B650819-E843-488A-89CF-E629A389D4DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|.NET.ActiveCfg = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|.NET.ActiveCfg = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Any CPU.Build.0 = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {23FDEE0E-6842-4E8D-B0E0-616F6A3D681F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|.NET.ActiveCfg = Debug + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|Any CPU.ActiveCfg = Debug + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Debug|Mixed Platforms.ActiveCfg = Debug + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|.NET.ActiveCfg = Release + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|Any CPU.ActiveCfg = Release + {8258A5A9-36D2-4917-90CC-D5A83C429F37}.Release|Mixed Platforms.ActiveCfg = Release + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Copied: trunk/Version2/Windows Apps/Setup (from rev 36, trunk/Version2/Setup) Copied: trunk/Version2/Windows Apps/TestPage (from rev 36, trunk/Version2/TestPage) Copied: trunk/Version2/Windows Apps/WebServer (from rev 36, trunk/Version2/WebServer) Copied: trunk/Version2/Windows Apps/WindowsService (from rev 36, trunk/Version2/WindowsService) Copied: trunk/Version2/Windows Apps/lib (from rev 36, trunk/Version2/lib) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2007-04-09 20:45:17
|
Revision: 39 http://svn.sourceforge.net/mp-webinterface/?rev=39&view=rev Author: maschine Date: 2007-04-09 13:45:06 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Initial commit of the MPW web app part. Added Paths: ----------- trunk/Version2/Web App/ trunk/Version2/Web App/MPW/ trunk/Version2/Web App/MPW/App_GlobalResources/ trunk/Version2/Web App/MPW/App_GlobalResources/Resource.Designer.cs trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.designer.cs trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.resx trunk/Version2/Web App/MPW/App_GlobalResources/Resource.resx trunk/Version2/Web App/MPW/Default.aspx trunk/Version2/Web App/MPW/Default.aspx.cs trunk/Version2/Web App/MPW/Default.aspx.designer.cs trunk/Version2/Web App/MPW/Images/ trunk/Version2/Web App/MPW/Images/bg_channel.jpg trunk/Version2/Web App/MPW/Images/bg_channel_logo.png trunk/Version2/Web App/MPW/Images/bg_channel_name.jpg trunk/Version2/Web App/MPW/Images/bg_channel_program.png trunk/Version2/Web App/MPW/Images/bg_channelgroup.jpg trunk/Version2/Web App/MPW/Images/bg_content.jpg trunk/Version2/Web App/MPW/Images/bg_logo.jpg trunk/Version2/Web App/MPW/Images/bg_navi.jpg trunk/Version2/Web App/MPW/Images/button_selected.png trunk/Version2/Web App/MPW/Images/button_unselected.png trunk/Version2/Web App/MPW/Images/favicon.ico trunk/Version2/Web App/MPW/Images/icon_bg.png trunk/Version2/Web App/MPW/Images/loading.gif trunk/Version2/Web App/MPW/Images/mp_logo_header.png trunk/Version2/Web App/MPW/Images/rec_series.png trunk/Version2/Web App/MPW/Images/rec_single.png trunk/Version2/Web App/MPW/Images/redx.gif trunk/Version2/Web App/MPW/Images/shadow_left.png trunk/Version2/Web App/MPW/Images/shadow_right.png trunk/Version2/Web App/MPW/Images/tvguide_notify_button.png trunk/Version2/Web App/MPW/Images/tvguide_recordconflict_button.png trunk/Version2/Web App/MPW/Images/tvguide_recordserie_conflict_button.png trunk/Version2/Web App/MPW/Includes/ trunk/Version2/Web App/MPW/Includes/Head.ascx trunk/Version2/Web App/MPW/Includes/Head.ascx.cs trunk/Version2/Web App/MPW/Includes/Head.ascx.designer.cs trunk/Version2/Web App/MPW/Includes/Navigation.ascx trunk/Version2/Web App/MPW/Includes/Navigation.ascx.cs trunk/Version2/Web App/MPW/Includes/Navigation.ascx.designer.cs trunk/Version2/Web App/MPW/JS/ trunk/Version2/Web App/MPW/JS/mpw.js trunk/Version2/Web App/MPW/LiveTV.aspx trunk/Version2/Web App/MPW/LiveTV.aspx.cs trunk/Version2/Web App/MPW/LiveTV.aspx.designer.cs trunk/Version2/Web App/MPW/Login.aspx trunk/Version2/Web App/MPW/Login.aspx.cs trunk/Version2/Web App/MPW/Login.aspx.designer.cs trunk/Version2/Web App/MPW/MPW.Master trunk/Version2/Web App/MPW/MPW.Master.cs trunk/Version2/Web App/MPW/MPW.Master.designer.cs trunk/Version2/Web App/MPW/MPW.Publish.xml trunk/Version2/Web App/MPW/MPW.csproj trunk/Version2/Web App/MPW/MPW.csproj.user trunk/Version2/Web App/MPW/NowNext.aspx trunk/Version2/Web App/MPW/NowNext.aspx.cs trunk/Version2/Web App/MPW/NowNext.aspx.designer.cs trunk/Version2/Web App/MPW/Properties/ trunk/Version2/Web App/MPW/Properties/AssemblyInfo.cs trunk/Version2/Web App/MPW/Recordings.aspx trunk/Version2/Web App/MPW/Recordings.aspx.cs trunk/Version2/Web App/MPW/Recordings.aspx.designer.cs trunk/Version2/Web App/MPW/Schedules.aspx trunk/Version2/Web App/MPW/Schedules.aspx.cs trunk/Version2/Web App/MPW/Schedules.aspx.designer.cs trunk/Version2/Web App/MPW/Search.aspx trunk/Version2/Web App/MPW/Search.aspx.cs trunk/Version2/Web App/MPW/Search.aspx.designer.cs trunk/Version2/Web App/MPW/TVLogos/ trunk/Version2/Web App/MPW/Utils/ trunk/Version2/Web App/MPW/Utils/Utils.cs trunk/Version2/Web App/MPW/Web.config trunk/Version2/Web App/MPW/css/ trunk/Version2/Web App/MPW/css/mpw_style.css trunk/Version2/Web App/MPW.sln trunk/Version2/Web App/references/ trunk/Version2/Web App/references/AjaxControlToolkit.dll trunk/Version2/Web App/references/Gentle.Common.dll trunk/Version2/Web App/references/Gentle.Framework.dll trunk/Version2/Web App/references/Gentle.Provider.MySQL.dll trunk/Version2/Web App/references/Gentle.Provider.SQLServer.dll trunk/Version2/Web App/references/MySql.Data.dll trunk/Version2/Web App/references/System.Web.Extensions.dll trunk/Version2/Web App/references/ar/ trunk/Version2/Web App/references/ar/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/de/ trunk/Version2/Web App/references/de/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/es/ trunk/Version2/Web App/references/es/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/fr/ trunk/Version2/Web App/references/fr/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/he/ trunk/Version2/Web App/references/he/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/hi/ trunk/Version2/Web App/references/hi/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/it/ trunk/Version2/Web App/references/it/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/ja/ trunk/Version2/Web App/references/ja/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/ko/ trunk/Version2/Web App/references/ko/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/log4net.dll trunk/Version2/Web App/references/pt/ trunk/Version2/Web App/references/pt/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/ru/ trunk/Version2/Web App/references/ru/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/zh-CHS/ trunk/Version2/Web App/references/zh-CHS/AjaxControlToolkit.resources.dll trunk/Version2/Web App/references/zh-CHT/ trunk/Version2/Web App/references/zh-CHT/AjaxControlToolkit.resources.dll Added: trunk/Version2/Web App/MPW/App_GlobalResources/Resource.Designer.cs =================================================================== --- trunk/Version2/Web App/MPW/App_GlobalResources/Resource.Designer.cs (rev 0) +++ trunk/Version2/Web App/MPW/App_GlobalResources/Resource.Designer.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,261 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace Resources { + using System; + + + /// <summary> + /// A strongly-typed resource class, for looking up localized strings, etc. + /// </summary> + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Web.Application.StronglyTypedResourceProxyBuilder", "8.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resource { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resource() { + } + + /// <summary> + /// Returns the cached ResourceManager instance used by this class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Resources.Resource", global::System.Reflection.Assembly.Load("App_GlobalResources")); + resourceMan = temp; + } + return resourceMan; + } + } + + /// <summary> + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// <summary> + /// Looks up a localized string similar to Daily. + /// </summary> + internal static string Daily { + get { + return ResourceManager.GetString("Daily", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Everytime on every channel. + /// </summary> + internal static string EveryTimeOnEveryChannel { + get { + return ResourceManager.GetString("EveryTimeOnEveryChannel", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Everytime on this channel. + /// </summary> + internal static string EveryTimeOnThisChannel { + get { + return ResourceManager.GetString("EveryTimeOnThisChannel", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Guide. + /// </summary> + internal static string Guide { + get { + return ResourceManager.GetString("Guide", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Live TV. + /// </summary> + internal static string LiveTV { + get { + return ResourceManager.GetString("LiveTV", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Login. + /// </summary> + internal static string Login { + get { + return ResourceManager.GetString("Login", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Next. + /// </summary> + internal static string Next { + get { + return ResourceManager.GetString("Next", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Sorry, no information available.... + /// </summary> + internal static string NoEPGInfo { + get { + return ResourceManager.GetString("NoEPGInfo", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Now. + /// </summary> + internal static string Now { + get { + return ResourceManager.GetString("Now", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Now & Next. + /// </summary> + internal static string NowNext { + get { + return ResourceManager.GetString("NowNext", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Once. + /// </summary> + internal static string Once { + get { + return ResourceManager.GetString("Once", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MPW - The MediaPortal Webinterface. + /// </summary> + internal static string PageTitle { + get { + return ResourceManager.GetString("PageTitle", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Record!. + /// </summary> + internal static string Record { + get { + return ResourceManager.GetString("Record", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Recordings. + /// </summary> + internal static string Recordings { + get { + return ResourceManager.GetString("Recordings", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Record this program. + /// </summary> + internal static string RecordThis { + get { + return ResourceManager.GetString("RecordThis", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Series recordings. + /// </summary> + internal static string RecSeries { + get { + return ResourceManager.GetString("RecSeries", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Single recordings. + /// </summary> + internal static string RecSingle { + get { + return ResourceManager.GetString("RecSingle", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Schedules. + /// </summary> + internal static string Schedules { + get { + return ResourceManager.GetString("Schedules", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Search. + /// </summary> + internal static string Search { + get { + return ResourceManager.GetString("Search", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Weekends. + /// </summary> + internal static string Weekends { + get { + return ResourceManager.GetString("Weekends", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Weekly. + /// </summary> + internal static string Weekly { + get { + return ResourceManager.GetString("Weekly", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Workingdays. + /// </summary> + internal static string WorkingDays { + get { + return ResourceManager.GetString("WorkingDays", resourceCulture); + } + } + } +} Added: trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.designer.cs =================================================================== Added: trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.resx =================================================================== --- trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.resx (rev 0) +++ trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.resx 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <data name="Daily" xml:space="preserve"> + <value>Täglich</value> + <comment>ScheduleType</comment> + </data> + <data name="EveryTimeOnEveryChannel" xml:space="preserve"> + <value>Immer auf jedem Sender</value> + <comment>ScheduleType</comment> + </data> + <data name="EveryTimeOnThisChannel" xml:space="preserve"> + <value>Immer auf diesem Sender</value> + <comment>ScheduleType</comment> + </data> + <data name="Guide" xml:space="preserve"> + <value>Programmführer</value> + <comment>Navigation</comment> + </data> + <data name="LiveTV" xml:space="preserve"> + <value>Live TV</value> + <comment>Navigation</comment> + </data> + <data name="Next" xml:space="preserve"> + <value>Gleich</value> + </data> + <data name="NoEPGInfo" xml:space="preserve"> + <value>Leider keine Informationen verfügbar...</value> + <comment>Guide</comment> + </data> + <data name="Now" xml:space="preserve"> + <value>Jetzt</value> + </data> + <data name="NowNext" xml:space="preserve"> + <value>Jetzt & Gleich</value> + <comment>Navigation</comment> + </data> + <data name="Once" xml:space="preserve"> + <value>Einmalig</value> + <comment>ScheduleType</comment> + </data> + <data name="Record" xml:space="preserve"> + <value>Aufnehmen!</value> + </data> + <data name="Recordings" xml:space="preserve"> + <value>Aufnahmen</value> + <comment>Navigation</comment> + </data> + <data name="RecordThis" xml:space="preserve"> + <value>Diese Sendung aufnehmen</value> + </data> + <data name="RecSeries" xml:space="preserve"> + <value>Serienaufnahmen</value> + </data> + <data name="RecSingle" xml:space="preserve"> + <value>Einfache Aufnahmen</value> + </data> + <data name="Schedules" xml:space="preserve"> + <value>Timer</value> + <comment>Navigation</comment> + </data> + <data name="Search" xml:space="preserve"> + <value>Suchen</value> + <comment>Navigation</comment> + </data> + <data name="Weekends" xml:space="preserve"> + <value>Weekends</value> + <comment>ScheduleType</comment> + </data> + <data name="Weekly" xml:space="preserve"> + <value>Wöchentlich</value> + <comment>ScheduleType</comment> + </data> + <data name="WorkingDays" xml:space="preserve"> + <value>Workingdays</value> + <comment>ScheduleType</comment> + </data> +</root> \ No newline at end of file Added: trunk/Version2/Web App/MPW/App_GlobalResources/Resource.resx =================================================================== --- trunk/Version2/Web App/MPW/App_GlobalResources/Resource.resx (rev 0) +++ trunk/Version2/Web App/MPW/App_GlobalResources/Resource.resx 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,200 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <data name="Daily" xml:space="preserve"> + <value>Daily</value> + <comment>ScheduleType</comment> + </data> + <data name="EveryTimeOnEveryChannel" xml:space="preserve"> + <value>Everytime on every channel</value> + <comment>ScheduleType</comment> + </data> + <data name="EveryTimeOnThisChannel" xml:space="preserve"> + <value>Everytime on this channel</value> + <comment>ScheduleType</comment> + </data> + <data name="Guide" xml:space="preserve"> + <value>Guide</value> + <comment>Navigation</comment> + </data> + <data name="LiveTV" xml:space="preserve"> + <value>Live TV</value> + <comment>Navigation</comment> + </data> + <data name="Login" xml:space="preserve"> + <value>Login</value> + </data> + <data name="Next" xml:space="preserve"> + <value>Next</value> + </data> + <data name="NoEPGInfo" xml:space="preserve"> + <value>Sorry, no information available...</value> + <comment>Guide</comment> + </data> + <data name="Now" xml:space="preserve"> + <value>Now</value> + </data> + <data name="NowNext" xml:space="preserve"> + <value>Now & Next</value> + <comment>Navigation</comment> + </data> + <data name="Once" xml:space="preserve"> + <value>Once</value> + <comment>ScheduleType</comment> + </data> + <data name="PageTitle" xml:space="preserve"> + <value>MPW - The MediaPortal Webinterface</value> + </data> + <data name="Record" xml:space="preserve"> + <value>Record!</value> + </data> + <data name="Recordings" xml:space="preserve"> + <value>Recordings</value> + <comment>Navigation</comment> + </data> + <data name="RecordThis" xml:space="preserve"> + <value>Record this program</value> + </data> + <data name="RecSeries" xml:space="preserve"> + <value>Series recordings</value> + </data> + <data name="RecSingle" xml:space="preserve"> + <value>Single recordings</value> + </data> + <data name="Schedules" xml:space="preserve"> + <value>Schedules</value> + <comment>Navigation</comment> + </data> + <data name="Search" xml:space="preserve"> + <value>Search</value> + <comment>Navigation</comment> + </data> + <data name="Weekends" xml:space="preserve"> + <value>Weekends</value> + <comment>ScheduleType</comment> + </data> + <data name="Weekly" xml:space="preserve"> + <value>Weekly</value> + <comment>ScheduleType</comment> + </data> + <data name="WorkingDays" xml:space="preserve"> + <value>Workingdays</value> + <comment>ScheduleType</comment> + </data> +</root> \ No newline at end of file Added: trunk/Version2/Web App/MPW/Default.aspx =================================================================== --- trunk/Version2/Web App/MPW/Default.aspx (rev 0) +++ trunk/Version2/Web App/MPW/Default.aspx 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,21 @@ +<%@ Page Language="C#" MasterPageFile="~/MPW.Master" AutoEventWireup="true" + Codebehind="Default.aspx.cs" Inherits="MPW.MasterPages.WebForm11" Title="Untitled Page" %> + +<asp:Content ID="Content1" ContentPlaceHolderID="MPWContent" runat="server"> + <br /> + <asp:Button ID="ButtonPrev" runat="server" Text="<" /> + <asp:Button ID="ButtonNext" runat="server" Text=">" /> + <asp:DropDownList ID="TimeDropDown" runat="server"> + </asp:DropDownList> + <asp:DropDownList ID="DateDropDown" runat="server"> + </asp:DropDownList> + <br /> + <asp:UpdatePanel ID="GuideUpdatePanel" runat="server" UpdateMode="Conditional"> + <ContentTemplate> + <asp:Table ID="Guide" runat="server" HorizontalAlign="Left"> + </asp:Table> + </ContentTemplate> + <Triggers> + </Triggers> + </asp:UpdatePanel> +</asp:Content> Added: trunk/Version2/Web App/MPW/Default.aspx.cs =================================================================== --- trunk/Version2/Web App/MPW/Default.aspx.cs (rev 0) +++ trunk/Version2/Web App/MPW/Default.aspx.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,68 @@ +using System; +using System.Data; +using System.Configuration; +using System.Collections; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; + +using TvDatabase; +using TvControl; +using MPW.Utils; + +namespace MPW.MasterPages +{ + public partial class WebForm11 : System.Web.UI.Page + { + private DateTime guideStart = DateTime.Now; + private DateTime guideEnd; + + protected void Page_Load(object sender, EventArgs e) + { + guideEnd = guideStart.AddHours(3); + + //Establish the connection to the TV Server and the DB. + MPWUtils.SetupConnection(); + + // Get a list of all tv-channels + IList channels = Channel.ListAll(); + + // List all groups + IList groups = ChannelGroup.ListAll(); + + // Remove non-TV channels + foreach (Channel channel in channels) + { + if (!channel.IsTv) + channels.Remove(channel); + } + + //Iterate through all the channels + foreach (Channel channel in channels) + { + TableRow r = new TableRow(); + TableCell cell_channel = new TableCell(); + TableCell cell_program = new TableCell(); + + Label lbl_channel = new Label(); + lbl_channel.Text = "<strong>" + channel.Name + "</strong>"; + + Label lbl_program = new Label(); + lbl_program.Text = "EPG"; + + cell_channel.Controls.Add(lbl_channel); + cell_channel.CssClass = "guideChannel"; + + cell_program.Controls.Add(lbl_program); + + r.Cells.Add(cell_channel); + r.Cells.Add(cell_program); + + Guide.Rows.Add(r); + } + } + } +} Added: trunk/Version2/Web App/MPW/Default.aspx.designer.cs =================================================================== --- trunk/Version2/Web App/MPW/Default.aspx.designer.cs (rev 0) +++ trunk/Version2/Web App/MPW/Default.aspx.designer.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,76 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace MPW.MasterPages { + + + /// <summary> + /// WebForm11 class. + /// </summary> + /// <remarks> + /// Auto-generated class. + /// </remarks> + public partial class WebForm11 { + + /// <summary> + /// ButtonPrev control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button ButtonPrev; + + /// <summary> + /// ButtonNext control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button ButtonNext; + + /// <summary> + /// TimeDropDown control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList TimeDropDown; + + /// <summary> + /// DateDropDown control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList DateDropDown; + + /// <summary> + /// GuideUpdatePanel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.UpdatePanel GuideUpdatePanel; + + /// <summary> + /// Guide control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Table Guide; + } +} Added: trunk/Version2/Web App/MPW/Images/bg_channel.jpg =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/bg_channel.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/bg_channel_logo.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/bg_channel_logo.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/bg_channel_name.jpg =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/bg_channel_name.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/bg_channel_program.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/bg_channel_program.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/bg_channelgroup.jpg =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/bg_channelgroup.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/bg_content.jpg =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/bg_content.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/bg_logo.jpg =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/bg_logo.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/bg_navi.jpg =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/bg_navi.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/button_selected.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/button_selected.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/button_unselected.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/button_unselected.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/favicon.ico =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/favicon.ico ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/icon_bg.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/icon_bg.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/loading.gif =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/loading.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/mp_logo_header.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/mp_logo_header.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/rec_series.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/rec_series.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/rec_single.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/rec_single.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/redx.gif =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/redx.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/shadow_left.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/shadow_left.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/shadow_right.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/shadow_right.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/tvguide_notify_button.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/tvguide_notify_button.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/tvguide_recordconflict_button.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/tvguide_recordconflict_button.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Images/tvguide_recordserie_conflict_button.png =================================================================== (Binary files differ) Property changes on: trunk/Version2/Web App/MPW/Images/tvguide_recordserie_conflict_button.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Version2/Web App/MPW/Includes/Head.ascx =================================================================== --- trunk/Version2/Web App/MPW/Includes/Head.ascx (rev 0) +++ trunk/Version2/Web App/MPW/Includes/Head.ascx 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,15 @@ +<%@ Control Language="C#" AutoEventWireup="true" Codebehind="Head.ascx.cs" Inherits="MPW.Head" %> +<div class="logodiv"> + <div style="width: 700px; float: left;"> + <!-- <img src="../Images/mp_logo_header.png" alt="MP logo" /> --> + </div> + <div style="width: 200px; float: right;"> + <asp:UpdateProgress ID="GlobalUpdateProgress" runat="server" DisplayAfter="10"> + <ProgressTemplate> + <img src="../Images/loading.gif" alt="Loading..." /> + <br /> + <!-- Getting data... Please wait! --> + </ProgressTemplate> + </asp:UpdateProgress> + </div> +</div> Added: trunk/Version2/Web App/MPW/Includes/Head.ascx.cs =================================================================== --- trunk/Version2/Web App/MPW/Includes/Head.ascx.cs (rev 0) +++ trunk/Version2/Web App/MPW/Includes/Head.ascx.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,21 @@ +using System; +using System.Data; +using System.Configuration; +using System.Collections; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; + +namespace MPW +{ + public partial class Head : System.Web.UI.UserControl + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file Added: trunk/Version2/Web App/MPW/Includes/Head.ascx.designer.cs =================================================================== --- trunk/Version2/Web App/MPW/Includes/Head.ascx.designer.cs (rev 0) +++ trunk/Version2/Web App/MPW/Includes/Head.ascx.designer.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace MPW { + + + /// <summary> + /// Head class. + /// </summary> + /// <remarks> + /// Auto-generated class. + /// </remarks> + public partial class Head { + + /// <summary> + /// GlobalUpdateProgress control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.UpdateProgress GlobalUpdateProgress; + } +} Added: trunk/Version2/Web App/MPW/Includes/Navigation.ascx =================================================================== --- trunk/Version2/Web App/MPW/Includes/Navigation.ascx (rev 0) +++ trunk/Version2/Web App/MPW/Includes/Navigation.ascx 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,35 @@ +<%@ Control Language="C#" AutoEventWireup="true" Codebehind="Navigation.ascx.cs" + Inherits="MPW.WebUserControl1" %> +<div class="navidiv"> + <table class="navBar"> + <tr> + <td id="nav_guide" class="navcell"> + <asp:HyperLink ID="LinkGuide" runat="server" Text="<%$ Resources:Resource, Guide %>" + NavigateUrl="~/Default.aspx" CssClass="navilink"></asp:HyperLink> + </td> + <td id="nav_now" class="navcell"> + <asp:HyperLink ID="LinkNowNext" runat="server" Text="<%$ Resources:Resource, NowNext %>" + NavigateUrl="~/NowNext.aspx" CssClass="navilink"></asp:HyperLink> + </td> + <td id="nav_search" class="navcell"> + <asp:HyperLink ID="LinkSearch" runat="server" Text="<%$ Resources:Resource, Search %>" + NavigateUrl="~/Search.aspx" CssClass="navilink"></asp:HyperLink> + </td> + <td id="nav_sched" class="navcell"> + <asp:HyperLink ID="LinkSchedules" runat="server" Text="<%$ Resources:Resource, Schedules %>" + NavigateUrl="~/Schedules.aspx" CssClass="navilink"></asp:HyperLink> + </td> + <td id="nav_rec" class="navcell"> + <asp:HyperLink ID="LinkRecordings" runat="server" Text="<%$ Resources:Resource, Recordings %>" + NavigateUrl="~/Recordings.aspx" CssClass="navilink"></asp:HyperLink> + </td> + <td id="nav_live" class="navcell"> + <asp:HyperLink ID="LinkLiveTV" runat="server" Text="<%$ Resources:Resource, LiveTV %>" + NavigateUrl="~/LiveTV.aspx" CssClass="navilink"></asp:HyperLink> + </td> + </tr> + </table> + <div class="datediv"> + <asp:Label ID="dateLabel" runat="server" Text=""></asp:Label> + </div> +</div> Added: trunk/Version2/Web App/MPW/Includes/Navigation.ascx.cs =================================================================== --- trunk/Version2/Web App/MPW/Includes/Navigation.ascx.cs (rev 0) +++ trunk/Version2/Web App/MPW/Includes/Navigation.ascx.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,21 @@ +using System; +using System.Data; +using System.Configuration; +using System.Collections; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; + +namespace MPW +{ + public partial class WebUserControl1 : System.Web.UI.UserControl + { + protected void Page_Load(object sender, EventArgs e) + { + dateLabel.Text = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString(); + } + } +} \ No newline at end of file Added: trunk/Version2/Web App/MPW/Includes/Navigation.ascx.designer.cs =================================================================== --- trunk/Version2/Web App/MPW/Includes/Navigation.ascx.designer.cs (rev 0) +++ trunk/Version2/Web App/MPW/Includes/Navigation.ascx.designer.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,85 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace MPW { + + + /// <summary> + /// WebUserControl1 class. + /// </summary> + /// <remarks> + /// Auto-generated class. + /// </remarks> + public partial class WebUserControl1 { + + /// <summary> + /// LinkGuide control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.HyperLink LinkGuide; + + /// <summary> + /// LinkNowNext control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.HyperLink LinkNowNext; + + /// <summary> + /// LinkSearch control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.HyperLink LinkSearch; + + /// <summary> + /// LinkSchedules control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.HyperLink LinkSchedules; + + /// <summary> + /// LinkRecordings control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.HyperLink LinkRecordings; + + /// <summary> + /// LinkLiveTV control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.HyperLink LinkLiveTV; + + /// <summary> + /// dateLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label dateLabel; + } +} Added: trunk/Version2/Web App/MPW/JS/mpw.js =================================================================== --- trunk/Version2/Web App/MPW/JS/mpw.js (rev 0) +++ trunk/Version2/Web App/MPW/JS/mpw.js 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,13 @@ +function showProgramDetails(IdProgram) { +document.getElementById("showDetails").value = "true"; +document.getElementById("idDetails").value = IdProgram; +document.getElementById("programInfo").style.display = "block"; +document.getElementById("programInfo").style.visibility = "visible"; +document.aspnetForm.submit(); +} + +function hideProgramDetails() { +$(showDetail).value = "false"; +$(idDetail).value = ""; +MPW_main.submit(); +} \ No newline at end of file Added: trunk/Version2/Web App/MPW/LiveTV.aspx =================================================================== --- trunk/Version2/Web App/MPW/LiveTV.aspx (rev 0) +++ trunk/Version2/Web App/MPW/LiveTV.aspx 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,17 @@ +<%@ Page Language="C#" MasterPageFile="~/MPW.Master" AutoEventWireup="true" Codebehind="LiveTV.aspx.cs" + Inherits="MPW.WebForm1" Title="Untitled Page" %> + +<asp:Content ID="Content1" ContentPlaceHolderID="MPWContent" runat="server"> + <div style="width:500px; margin:auto;"> + <object id="live" width="400" height="370" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" + type="application/x-oleobject"> + <param name="URL" value="rtsp://localhost/stream1"> + <param name="SendPlayStateChangeEvents" value="True"> + <param name="AutoStart" value="True"> + <param name="stretchToFit" value="True"> + <param name="uiMode" value="full"> + <param name="PlayCount" value="1"> + <param name="AutoRewind" value="0"> + </object> + </div> +</asp:Content> Added: trunk/Version2/Web App/MPW/LiveTV.aspx.cs =================================================================== --- trunk/Version2/Web App/MPW/LiveTV.aspx.cs (rev 0) +++ trunk/Version2/Web App/MPW/LiveTV.aspx.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,24 @@ +using System; +using System.Data; +using System.Configuration; +using System.Collections; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; + +using TvControl; + +namespace MPW +{ + public partial class WebForm1 : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + MPW m = (MPW)Page.Master; + m.Sectiontitle = Resources.Resource.LiveTV; + } + } +} Added: trunk/Version2/Web App/MPW/LiveTV.aspx.designer.cs =================================================================== --- trunk/Version2/Web App/MPW/LiveTV.aspx.designer.cs (rev 0) +++ trunk/Version2/Web App/MPW/LiveTV.aspx.designer.cs 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace MPW { + + + /// <summary> + /// WebForm1 class. + /// </summary> + /// <remarks> + /// Auto-generated class. + /// </remarks> + public partial class WebForm1 { + } +} Added: trunk/Version2/Web App/MPW/Login.aspx =================================================================== --- trunk/Version2/Web App/MPW/Login.aspx (rev 0) +++ trunk/Version2/Web App/MPW/Login.aspx 2007-04-09 20:45:06 UTC (rev 39) @@ -0,0 +1,8 @@ +<%@ Page Language="C#" MasterPageFile="~/MPW.Master" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="MPW.MasterPages.WebForm1" Title="MPW Login" %> +<asp:Content ID="Logon" ContentPlaceHolderID="MPWContent" runat="server"> + <br /> + <br /> + <asp:Login ID="MPWLogin" runat="server" Height="185px" OnAut... [truncated message content] |
From: <mas...@us...> - 2008-01-04 14:36:16
|
Revision: 54 http://mp-webinterface.svn.sourceforge.net/mp-webinterface/?rev=54&view=rev Author: maschine Date: 2008-01-04 06:35:55 -0800 (Fri, 04 Jan 2008) Log Message: ----------- Adding the search page (currently design only, no function behind it). Modified Paths: -------------- trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.resx trunk/Version2/Web App/MPW/App_GlobalResources/Resource.resx trunk/Version2/Web App/MPW/MPW.master trunk/Version2/Web App/MPW/css/mpw_style.css Added Paths: ----------- trunk/Version2/Web App/MPW/Search.aspx trunk/Version2/Web App/MPW/Search.aspx.cs Property Changed: ---------------- trunk/Version2/Web App/MPW/TVLogos/ trunk/Version2/Windows Apps/ Modified: trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.resx =================================================================== --- trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.resx 2007-11-20 21:45:20 UTC (rev 53) +++ trunk/Version2/Web App/MPW/App_GlobalResources/Resource.de.resx 2008-01-04 14:35:55 UTC (rev 54) @@ -120,6 +120,10 @@ <data name="ChannelGroup" xml:space="preserve"> <value>Programmgruppe</value> </data> + <data name="customtime" xml:space="preserve"> + <value>Zeit angeben</value> + <comment>Search by date options</comment> + </data> <data name="Daily" xml:space="preserve"> <value>Täglich</value> <comment>ScheduleType</comment> @@ -154,10 +158,18 @@ <value>Jetzt & Gleich</value> <comment>Navigation</comment> </data> + <data name="nowontv" xml:space="preserve"> + <value>Jetzt im TV</value> + <comment>Search by date options</comment> + </data> <data name="Once" xml:space="preserve"> <value>Einmalig</value> <comment>ScheduleType</comment> </data> + <data name="primetimeshows" xml:space="preserve"> + <value>Heute zur Primetime</value> + <comment>Search by date options</comment> + </data> <data name="Record" xml:space="preserve"> <value>Aufnehmen!</value> </data> @@ -185,6 +197,29 @@ <value>Suchen</value> <comment>Navigation</comment> </data> + <data name="searchbydate" xml:space="preserve"> + <value>nach Datum</value> + <comment>Search Type</comment> + </data> + <data name="searchbygenre" xml:space="preserve"> + <value>nach Genre</value> + <comment>Search Type</comment> + </data> + <data name="searchbytext" xml:space="preserve"> + <value>nach Text</value> + <comment>Search Type</comment> + </data> + <data name="searchindescription" xml:space="preserve"> + <value>Im Titel suchen</value> + <comment>Search by text options</comment> + </data> + <data name="searchintitle" xml:space="preserve"> + <value>In der Beschreibung suchen</value> + <comment>Search by text options</comment> + </data> + <data name="searchresults" xml:space="preserve"> + <value>Suchergebnisse</value> + </data> <data name="Update" xml:space="preserve"> <value>Aktualisieren</value> </data> Modified: trunk/Version2/Web App/MPW/App_GlobalResources/Resource.resx =================================================================== --- trunk/Version2/Web App/MPW/App_GlobalResources/Resource.resx 2007-11-20 21:45:20 UTC (rev 53) +++ trunk/Version2/Web App/MPW/App_GlobalResources/Resource.resx 2008-01-04 14:35:55 UTC (rev 54) @@ -120,6 +120,10 @@ <data name="ChannelGroup" xml:space="preserve"> <value>Programmgruppe</value> </data> + <data name="customtime" xml:space="preserve"> + <value>Custom time</value> + <comment>Search by date options</comment> + </data> <data name="Daily" xml:space="preserve"> <value>Daily</value> <comment>ScheduleType</comment> @@ -157,6 +161,10 @@ <value>Now & Next</value> <comment>Navigation</comment> </data> + <data name="nowontv" xml:space="preserve"> + <value>What's now on TV</value> + <comment>Search by date options</comment> + </data> <data name="Once" xml:space="preserve"> <value>Once</value> <comment>ScheduleType</comment> @@ -164,6 +172,10 @@ <data name="PageTitle" xml:space="preserve"> <value>MPW - The MediaPortal Webinterface</value> </data> + <data name="primetimeshows" xml:space="preserve"> + <value>Today's primetime shows</value> + <comment>Search by date options</comment> + </data> <data name="Record" xml:space="preserve"> <value>Record!</value> </data> @@ -191,6 +203,29 @@ <value>Search</value> <comment>Navigation</comment> </data> + <data name="searchbydate" xml:space="preserve"> + <value>by date</value> + <comment>Search Type</comment> + </data> + <data name="searchbygenre" xml:space="preserve"> + <value>by genre</value> + <comment>Search Type</comment> + </data> + <data name="searchbytext" xml:space="preserve"> + <value>by text</value> + <comment>Search Type</comment> + </data> + <data name="searchindescription" xml:space="preserve"> + <value>Search in title</value> + <comment>Search by text options</comment> + </data> + <data name="searchintitle" xml:space="preserve"> + <value>Search in description</value> + <comment>Search by text options</comment> + </data> + <data name="searchresults" xml:space="preserve"> + <value>Search results</value> + </data> <data name="Update" xml:space="preserve"> <value>Update</value> </data> Modified: trunk/Version2/Web App/MPW/MPW.master =================================================================== --- trunk/Version2/Web App/MPW/MPW.master 2007-11-20 21:45:20 UTC (rev 53) +++ trunk/Version2/Web App/MPW/MPW.master 2008-01-04 14:35:55 UTC (rev 54) @@ -36,22 +36,37 @@ <asp:HyperLink ID="LinkGuide" runat="server" Text="<%$ Resources:Resource, Guide %>" NavigateUrl="~/Default.aspx" CssClass="navilink"></asp:HyperLink> </td> + <td id="bar1"> + | + </td> <td id="nav_now" class="navcell"> <asp:HyperLink ID="LinkNowNext" runat="server" Text="<%$ Resources:Resource, NowNext %>" NavigateUrl="~/NowNext.aspx" CssClass="navilink"></asp:HyperLink> </td> + <td id="bar2"> + | + </td> <td id="nav_search" class="navcell"> <asp:HyperLink ID="LinkSearch" runat="server" Text="<%$ Resources:Resource, Search %>" - NavigateUrl="~/Default.aspx" CssClass="navilink"></asp:HyperLink> + NavigateUrl="~/Search.aspx" CssClass="navilink"></asp:HyperLink> </td> + <td id="bar3"> + | + </td> <td id="nav_sched" class="navcell"> <asp:HyperLink ID="LinkSchedules" runat="server" Text="<%$ Resources:Resource, Schedules %>" NavigateUrl="~/Schedules.aspx" CssClass="navilink"></asp:HyperLink> </td> + <td id="bar4"> + | + </td> <td id="nav_rec" class="navcell"> <asp:HyperLink ID="LinkRecordings" runat="server" Text="<%$ Resources:Resource, Recordings %>" NavigateUrl="~/Default.aspx" CssClass="navilink"></asp:HyperLink> </td> + <td id="bar5"> + | + </td> <td id="nav_live" class="navcell"> <asp:HyperLink ID="LinkLiveTV" runat="server" Text="<%$ Resources:Resource, LiveTV %>" NavigateUrl="~/Default.aspx" CssClass="navilink"></asp:HyperLink> Added: trunk/Version2/Web App/MPW/Search.aspx =================================================================== --- trunk/Version2/Web App/MPW/Search.aspx (rev 0) +++ trunk/Version2/Web App/MPW/Search.aspx 2008-01-04 14:35:55 UTC (rev 54) @@ -0,0 +1,55 @@ +<%@ Page Language="C#" MasterPageFile="~/MPW.master" AutoEventWireup="true" CodeFile="Search.aspx.cs" + Inherits="_Default" Title="Search" %> + +<asp:Content ID="Content_search" ContentPlaceHolderID="MPWContent" runat="Server"> + <h1> + <asp:Label ID="label_search" runat="server" Text="<%$ Resources:Resource, Search %>"></asp:Label></h1> + <div style="line-height: 25px; float: left; width: 250px;"> + <strong> + <asp:Label ID="label_searchbydate" runat="server" Text="<%$ Resources:Resource, searchbydate %>"></asp:Label></strong> + <br /> + <asp:RadioButton ID="radio_searchbydate1" runat="server" Checked="True" /> + <asp:Label ID="label_searchbydate1" runat="server" Text="<%$ Resources:Resource, primetimeshows %>"></asp:Label> + <br /> + <asp:RadioButton ID="radio_searchbydate2" runat="server" /> + <asp:Label ID="label_searchbydate2" runat="server" Text="<%$ Resources:Resource, nowontv %>"></asp:Label> + <br /> + <asp:RadioButton ID="radio_searchbydate3" runat="server" /> + <asp:Label ID="label_searchbydate3" runat="server" Text="<%$ Resources:Resource, customtime %>"></asp:Label> + <br /> + <asp:Button ID="button_searchbydate" runat="server" Text="<%$ Resources:Resource, Search %>" /> + </div> + <div style="line-height: 25px; float: left; width: 250px;"> + <strong> + <asp:Label ID="label_searchtext" runat="server" Text="<%$ Resources:Resource, searchbytext %>"></asp:Label></strong> + <br /> + <asp:CheckBox ID="check_searchintitle" runat="server" Checked="True" /> + <asp:Label ID="label_searchintitle" runat="server" Text="<%$ Resources:Resource, searchintitle %>">"></asp:Label> + <br /> + <asp:CheckBox ID="check_searchindescription" runat="server" Checked="True" /> + <asp:Label ID="label_searchindescription" runat="server" Text="<%$ Resources:Resource, searchindescription %>">"></asp:Label> + <br /> + <asp:TextBox ID="field_searchtext" runat="server"></asp:TextBox> + <br /> + <asp:Button ID="button_searchtext" runat="server" Text="<%$ Resources:Resource, Search %>" /> + </div> + <div style="line-height: 25px; float: left; width: 250px;"> + <strong> + <asp:Label ID="label_searchbygenre" runat="server" Text="<%$ Resources:Resource, searchbygenre %>"></asp:Label></strong> + <br /> + <asp:DropDownList ID="dropdown_searchbygenre" runat="server"> + </asp:DropDownList> + <br /> + <asp:Button ID="button_searchbygenre" runat="server" Text="<%$ Resources:Resource, Search %>" /> + </div> + <div style="clear: both;"></div> + <h1> + <asp:Label ID="label_searchresults" runat="server" Text="<%$ Resources:Resource, searchresults %>"></asp:Label></h1> + <asp:UpdatePanel ID="GuideUpdatePanel" runat="server" UpdateMode="Conditional"> + <contenttemplate> + 123 + </contenttemplate> + <triggers> + </triggers> + </asp:UpdatePanel> +</asp:Content> Added: trunk/Version2/Web App/MPW/Search.aspx.cs =================================================================== --- trunk/Version2/Web App/MPW/Search.aspx.cs (rev 0) +++ trunk/Version2/Web App/MPW/Search.aspx.cs 2008-01-04 14:35:55 UTC (rev 54) @@ -0,0 +1,22 @@ +using System; +using System.Data; +using System.Configuration; +using System.Collections; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; + +using MPW; +using TvDatabase; + +public partial class _Default : System.Web.UI.Page +{ + + protected void Page_Load(object sender, EventArgs e) + { + + } +} Property changes on: trunk/Version2/Web App/MPW/TVLogos ___________________________________________________________________ Name: svn:ignore + *.png *.PNG Modified: trunk/Version2/Web App/MPW/css/mpw_style.css =================================================================== --- trunk/Version2/Web App/MPW/css/mpw_style.css 2007-11-20 21:45:20 UTC (rev 53) +++ trunk/Version2/Web App/MPW/css/mpw_style.css 2008-01-04 14:35:55 UTC (rev 54) @@ -103,10 +103,10 @@ td.navcell { - width: 159px; height: 31px; text-align: center; - background-image: url(../Images/button_unselected.png); + padding-left: 7px; + padding-right: 7px; } table.grouptable @@ -206,7 +206,7 @@ a.navilink { - font-size: 11px; + font-size: 15px; text-decoration: none; color: #000000; } @@ -214,7 +214,7 @@ a.navilink:hover { color: Red; - text-decoration: blink; + text-decoration: underline overline; } a.navilink:visited @@ -234,6 +234,7 @@ left: 300px; z-index: 2; } + input.deleteschedule { margin-left: 10px; @@ -246,7 +247,6 @@ width:90%; } - td.guidecell { overflow:hidden; Property changes on: trunk/Version2/Windows Apps ___________________________________________________________________ Name: svn:ignore + MPW.suo This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |