create nlogLogger project.
create UdpNotifier project. implemented IPluginPathProvider and IConfigFilePathProvider, IContainerHelper and INotifierManager.
This commit is contained in:
parent
a30a9a5453
commit
a07923d214
13
RaceLapTimer/Interfaces/IConfigFilePathProvider.cs
Normal file
13
RaceLapTimer/Interfaces/IConfigFilePathProvider.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Interfaces
|
||||||
|
{
|
||||||
|
public interface IConfigFilePathProvider
|
||||||
|
{
|
||||||
|
string GetPath { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
15
RaceLapTimer/Interfaces/IContainerHelper.cs
Normal file
15
RaceLapTimer/Interfaces/IContainerHelper.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Interfaces
|
||||||
|
{
|
||||||
|
public interface IContainerHelper
|
||||||
|
{
|
||||||
|
T Get<T>();
|
||||||
|
IEnumerable<T> GetAll<T>();
|
||||||
|
void RegisterType(Type typeToBindTo, Type typeBeingBound, string uniqueName);
|
||||||
|
}
|
||||||
|
}
|
||||||
33
RaceLapTimer/Interfaces/ILoggerService.cs
Normal file
33
RaceLapTimer/Interfaces/ILoggerService.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Interfaces
|
||||||
|
{
|
||||||
|
public interface ILoggerService
|
||||||
|
{
|
||||||
|
bool IsDebugEnabled { get; }
|
||||||
|
bool IsErrorEnabled { get; }
|
||||||
|
bool IsFatalEnabled { get; }
|
||||||
|
bool IsInfoEnabled { get; }
|
||||||
|
bool IsTraceEnabled { get; }
|
||||||
|
bool IsWarnEnabled { get; }
|
||||||
|
|
||||||
|
void Debug(Exception exception);
|
||||||
|
void Debug(string format, params object[] args);
|
||||||
|
void Debug(Exception exception, string format, params object[] args);
|
||||||
|
void Error(Exception exception);
|
||||||
|
void Error(string format, params object[] args);
|
||||||
|
void Error(Exception exception, string format, params object[] args);
|
||||||
|
void Fatal(Exception exception);
|
||||||
|
void Fatal(string format, params object[] args);
|
||||||
|
void Fatal(Exception exception, string format, params object[] args);
|
||||||
|
void Info(Exception exception);
|
||||||
|
void Info(string format, params object[] args);
|
||||||
|
void Info(Exception exception, string format, params object[] args);
|
||||||
|
void Trace(Exception exception);
|
||||||
|
void Trace(string format, params object[] args);
|
||||||
|
void Trace(Exception exception, string format, params object[] args);
|
||||||
|
void Warn(Exception exception);
|
||||||
|
void Warn(string format, params object[] args);
|
||||||
|
void Warn(Exception exception, string format, params object[] args);
|
||||||
|
}
|
||||||
|
}
|
||||||
14
RaceLapTimer/Interfaces/INotifierManager.cs
Normal file
14
RaceLapTimer/Interfaces/INotifierManager.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Interfaces
|
||||||
|
{
|
||||||
|
public interface INotifierManager
|
||||||
|
{
|
||||||
|
List<string> GetAvailableNotifiers();
|
||||||
|
void NotifyRaceStarted(NotificationEventArgs args);
|
||||||
|
void NotifyRaceStarting(NotificationEventArgs args);
|
||||||
|
void NotifyRaceLapEvent(NotificationEventArgs args, Pilot pilot);
|
||||||
|
void NotifyRaceWinner(NotificationEventArgs args, Pilot pilot);
|
||||||
|
void NotifyRaceFinished(NotificationEventArgs args);
|
||||||
|
}
|
||||||
|
}
|
||||||
18
RaceLapTimer/Interfaces/INotifierProvider.cs
Normal file
18
RaceLapTimer/Interfaces/INotifierProvider.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Interfaces
|
||||||
|
{
|
||||||
|
public interface INotifierProvider
|
||||||
|
{
|
||||||
|
string GetDisplayName();
|
||||||
|
string GetNotifierType();
|
||||||
|
void NotifyRaceStarted(NotificationEventArgs args);
|
||||||
|
void NotifyRaceStarting(NotificationEventArgs args);
|
||||||
|
void NotifyRaceLapEvent(NotificationEventArgs args, Pilot pilot);
|
||||||
|
void NotifyRaceWinner(NotificationEventArgs args, Pilot pilot);
|
||||||
|
void NotifyRaceFinished(NotificationEventArgs args);
|
||||||
|
}
|
||||||
|
}
|
||||||
14
RaceLapTimer/Interfaces/INotifierProviderFactory.cs
Normal file
14
RaceLapTimer/Interfaces/INotifierProviderFactory.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Interfaces
|
||||||
|
{
|
||||||
|
public interface INotifierProviderFactory
|
||||||
|
{
|
||||||
|
INotifierProvider CreateProvider();
|
||||||
|
string GetType();
|
||||||
|
}
|
||||||
|
}
|
||||||
13
RaceLapTimer/Interfaces/IPluginPathProvider.cs
Normal file
13
RaceLapTimer/Interfaces/IPluginPathProvider.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Interfaces
|
||||||
|
{
|
||||||
|
public interface IPluginPathProvider
|
||||||
|
{
|
||||||
|
string GetPluginPath { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -40,8 +40,16 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="IConfigFilePathProvider.cs" />
|
||||||
|
<Compile Include="IContainerHelper.cs" />
|
||||||
|
<Compile Include="ILoggerService.cs" />
|
||||||
|
<Compile Include="IPluginPathProvider.cs" />
|
||||||
<Compile Include="ConfigurationSetting.cs" />
|
<Compile Include="ConfigurationSetting.cs" />
|
||||||
<Compile Include="CompetitionRace.cs" />
|
<Compile Include="CompetitionRace.cs" />
|
||||||
|
<Compile Include="INotifierManager.cs" />
|
||||||
|
<Compile Include="INotifierProvider.cs" />
|
||||||
|
<Compile Include="INotifierProviderFactory.cs" />
|
||||||
|
<Compile Include="NotificationEventArgs.cs" />
|
||||||
<Compile Include="Pilot.cs" />
|
<Compile Include="Pilot.cs" />
|
||||||
<Compile Include="RaceSession.cs" />
|
<Compile Include="RaceSession.cs" />
|
||||||
<Compile Include="IUserStorage.cs" />
|
<Compile Include="IUserStorage.cs" />
|
||||||
|
|||||||
12
RaceLapTimer/Interfaces/NotificationEventArgs.cs
Normal file
12
RaceLapTimer/Interfaces/NotificationEventArgs.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Interfaces
|
||||||
|
{
|
||||||
|
public class NotificationEventArgs
|
||||||
|
{
|
||||||
|
public DateTime RaceStartTime { get; set; }
|
||||||
|
public int PilotCount { get; set; }
|
||||||
|
public int MaxLaps { get; set; }
|
||||||
|
public int LapNumber { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
11
RaceLapTimer/NLogLogger/NLogConfig.xml
Normal file
11
RaceLapTimer/NLogLogger/NLogConfig.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
autoReload="true">
|
||||||
|
<targets>
|
||||||
|
<target name="viewer" xsi:type="Chainsaw" address="udp://127.0.0.1:4000" />
|
||||||
|
</targets>
|
||||||
|
<rules>
|
||||||
|
<logger name="*" minlevel="Trace" writeTo="viewer" />
|
||||||
|
</rules>
|
||||||
|
</nlog>
|
||||||
76
RaceLapTimer/NLogLogger/NLogLogger.csproj
Normal file
76
RaceLapTimer/NLogLogger/NLogLogger.csproj
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{9A93A12F-7591-406A-A4F3-41AA8299C4B4}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>NLogLogger</RootNamespace>
|
||||||
|
<AssemblyName>NLogLogger</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
</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="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NLog.4.4.9\lib\net45\NLog.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="NLogLoggingService.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Interfaces\Interfaces.csproj">
|
||||||
|
<Project>{5c6dcc59-19f3-46ad-a479-926610f36257}</Project>
|
||||||
|
<Name>Interfaces</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="NLogSchema\NLog.xsd">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</None>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="NLogConfig.xml">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
<Import Project="$(MSBuildToolsPath)\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>
|
||||||
|
-->
|
||||||
|
</Project>
|
||||||
6
RaceLapTimer/NLogLogger/NLogLogger.csproj.user
Normal file
6
RaceLapTimer/NLogLogger/NLogLogger.csproj.user
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ProjectView>ProjectFiles</ProjectView>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
119
RaceLapTimer/NLogLogger/NLogLoggingService.cs
Normal file
119
RaceLapTimer/NLogLogger/NLogLoggingService.cs
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using Interfaces;
|
||||||
|
using NLog;
|
||||||
|
using NLog.Config;
|
||||||
|
|
||||||
|
namespace NLogLogger
|
||||||
|
{
|
||||||
|
public class NLogLoggingService : ILoggerService
|
||||||
|
{
|
||||||
|
private readonly NLog.Logger _logger;
|
||||||
|
public NLogLoggingService(IConfigFilePathProvider configFileFolder)
|
||||||
|
{
|
||||||
|
var cfgFilePath = Path.Combine(configFileFolder.GetPath, "NLogConfig.xml");
|
||||||
|
LogManager.Configuration = new XmlLoggingConfiguration(cfgFilePath);
|
||||||
|
var loggerName = Assembly.GetEntryAssembly().GetName().Name;
|
||||||
|
_logger = LogManager.GetLogger(loggerName);
|
||||||
|
//_logger = LogManager.GetLogger("");
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsDebugEnabled { get { return _logger.IsDebugEnabled; } }
|
||||||
|
public bool IsErrorEnabled { get { return _logger.IsErrorEnabled; } }
|
||||||
|
public bool IsFatalEnabled { get { return _logger.IsFatalEnabled; } }
|
||||||
|
public bool IsInfoEnabled { get { return _logger.IsInfoEnabled; } }
|
||||||
|
public bool IsTraceEnabled { get { return _logger.IsTraceEnabled; } }
|
||||||
|
public bool IsWarnEnabled { get { return _logger.IsWarnEnabled; } }
|
||||||
|
|
||||||
|
public void Debug(Exception exception)
|
||||||
|
{
|
||||||
|
_logger.Debug(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Debug(string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Debug(format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Debug(Exception exception, string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Debug(exception, format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Error(Exception exception)
|
||||||
|
{
|
||||||
|
_logger.Error(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Error(string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Error(format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Error(Exception exception, string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Error(exception, format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Fatal(Exception exception)
|
||||||
|
{
|
||||||
|
_logger.Error(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Fatal(string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Fatal(format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Fatal(Exception exception, string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Error(exception, format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Info(Exception exception)
|
||||||
|
{
|
||||||
|
_logger.Info(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Info(string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Info(format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Info(Exception exception, string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Error(exception, format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Trace(Exception exception)
|
||||||
|
{
|
||||||
|
_logger.Trace(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Trace(string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Trace(format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Trace(Exception exception, string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Error(exception, format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Warn(Exception exception)
|
||||||
|
{
|
||||||
|
_logger.Warn(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Warn(string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Warn(format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Warn(Exception exception, string format, params object[] args)
|
||||||
|
{
|
||||||
|
_logger.Error(exception, format, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2966
RaceLapTimer/NLogLogger/NLogSchema/NLog.xsd
Normal file
2966
RaceLapTimer/NLogLogger/NLogSchema/NLog.xsd
Normal file
File diff suppressed because it is too large
Load Diff
36
RaceLapTimer/NLogLogger/Properties/AssemblyInfo.cs
Normal file
36
RaceLapTimer/NLogLogger/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("NLogLogger")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("NLogLogger")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("9a93a12f-7591-406a-a4f3-41aa8299c4b4")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
4
RaceLapTimer/NLogLogger/packages.config
Normal file
4
RaceLapTimer/NLogLogger/packages.config
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="NLog" version="4.4.9" targetFramework="net452" />
|
||||||
|
</packages>
|
||||||
@ -11,6 +11,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Interfaces", "Interfaces\In
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Helpers.Encryption", "Helpers.Encrytion\Helpers.Encryption.csproj", "{BC7DEA8B-5029-459A-AA54-EA81EB390F87}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Helpers.Encryption", "Helpers.Encrytion\Helpers.Encryption.csproj", "{BC7DEA8B-5029-459A-AA54-EA81EB390F87}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NLogLogger", "NLogLogger\NLogLogger.csproj", "{9A93A12F-7591-406A-A4F3-41AA8299C4B4}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notifiers", "Notifiers", "{CDAC76D5-5EC6-4357-A27C-0095BF98FDDF}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UdpNotifier", "UdpNotifier\UdpNotifier.csproj", "{734097B0-A764-40AD-957A-43FE4F085B65}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Logger", "Logger", "{36BDEE78-985C-4AF5-A39B-3BE89FAEB281}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -33,8 +41,20 @@ Global
|
|||||||
{BC7DEA8B-5029-459A-AA54-EA81EB390F87}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{BC7DEA8B-5029-459A-AA54-EA81EB390F87}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{BC7DEA8B-5029-459A-AA54-EA81EB390F87}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{BC7DEA8B-5029-459A-AA54-EA81EB390F87}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{BC7DEA8B-5029-459A-AA54-EA81EB390F87}.Release|Any CPU.Build.0 = Release|Any CPU
|
{BC7DEA8B-5029-459A-AA54-EA81EB390F87}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{9A93A12F-7591-406A-A4F3-41AA8299C4B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9A93A12F-7591-406A-A4F3-41AA8299C4B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9A93A12F-7591-406A-A4F3-41AA8299C4B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{9A93A12F-7591-406A-A4F3-41AA8299C4B4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{734097B0-A764-40AD-957A-43FE4F085B65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{734097B0-A764-40AD-957A-43FE4F085B65}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{734097B0-A764-40AD-957A-43FE4F085B65}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{734097B0-A764-40AD-957A-43FE4F085B65}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{9A93A12F-7591-406A-A4F3-41AA8299C4B4} = {36BDEE78-985C-4AF5-A39B-3BE89FAEB281}
|
||||||
|
{734097B0-A764-40AD-957A-43FE4F085B65} = {CDAC76D5-5EC6-4357-A27C-0095BF98FDDF}
|
||||||
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|||||||
@ -23,6 +23,14 @@
|
|||||||
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Ninject.Extensions.ChildKernel" publicKeyToken="c7192dc5380945e7" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
</configuration>
|
</configuration>
|
||||||
@ -1,35 +1,53 @@
|
|||||||
using Interfaces;
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using Interfaces;
|
||||||
using Nancy;
|
using Nancy;
|
||||||
using Nancy.Authentication.Forms;
|
using Nancy.Authentication.Forms;
|
||||||
using Nancy.Bootstrapper;
|
using Nancy.Bootstrapper;
|
||||||
|
using Nancy.Bootstrappers.Ninject;
|
||||||
using Nancy.Conventions;
|
using Nancy.Conventions;
|
||||||
using Nancy.Diagnostics;
|
using Nancy.Diagnostics;
|
||||||
using Nancy.TinyIoc;
|
using Nancy.TinyIoc;
|
||||||
|
using Ninject;
|
||||||
using RaceLapTimer.ApiControllers;
|
using RaceLapTimer.ApiControllers;
|
||||||
|
using RaceLapTimer.Extensions.Notifications;
|
||||||
|
|
||||||
namespace RaceLapTimer
|
namespace RaceLapTimer
|
||||||
{
|
{
|
||||||
public class FormsAuthBootstrapper : DefaultNancyBootstrapper
|
public class FormsAuthBootstrapper : NinjectNancyBootstrapper
|
||||||
{
|
{
|
||||||
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
|
protected override void ConfigureApplicationContainer(IKernel container)
|
||||||
{
|
{
|
||||||
// We don't call "base" here to prevent auto-discovery of
|
// We don't call "base" here to prevent auto-discovery of
|
||||||
// types/dependencies
|
// types/dependencies
|
||||||
|
// Configure things for a wider purpose, non-requestcontroller based.
|
||||||
|
container.Bind<IPluginPathProvider>().To<PluginPathProvider>();
|
||||||
|
container.Bind<IConfigFilePathProvider>().To<ConfigFilePathProvider>();
|
||||||
|
container.Bind<IContainerHelper>().To<ContainerHelper>();
|
||||||
|
container.Bind<INotifierManager>().To<NotificationManager>().InSingletonScope();
|
||||||
|
container.Bind<IDbProvider>().To<TestProvider>();
|
||||||
|
|
||||||
|
//load dynamic plugins..:
|
||||||
|
var cfgFilePath = Path.Combine(container.Get<IConfigFilePathProvider>().GetPath, "NinjectConfig.xml");
|
||||||
|
|
||||||
|
container.Load(cfgFilePath);
|
||||||
|
|
||||||
|
var nM = container.Get<INotifierManager>();
|
||||||
|
nM.NotifyRaceStarted(new NotificationEventArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context)
|
protected override void ConfigureRequestContainer(IKernel container, NancyContext context)
|
||||||
{
|
{
|
||||||
base.ConfigureRequestContainer(container, context);
|
base.ConfigureRequestContainer(container, context);
|
||||||
|
|
||||||
// Here we register our user mapper as a per-request singleton.
|
// Here we register our user mapper as a per-request singleton.
|
||||||
// As this is now per-request we could inject a request scoped
|
// As this is now per-request we could inject a request scoped
|
||||||
// database "context" or other request scoped services.
|
// database "context" or other request scoped services.
|
||||||
container.Register<IDbProvider, TestProvider>();
|
container.Bind<IUserStorage>().To<UserStorage>(); //register the storage provider..
|
||||||
container.Register<IUserStorage, UserStorage>(); //register the storage provider..
|
container.Bind<IUserMapper>().To<UserDatabase>().InSingletonScope();
|
||||||
container.Register<IUserMapper, UserDatabase>().AsSingleton();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void RequestStartup(TinyIoCContainer requestContainer, IPipelines pipelines, NancyContext context)
|
protected override void RequestStartup(IKernel requestContainer, IPipelines pipelines, NancyContext context)
|
||||||
{
|
{
|
||||||
// At request startup we modify the request pipelines to
|
// At request startup we modify the request pipelines to
|
||||||
// include forms authentication - passing in our now request
|
// include forms authentication - passing in our now request
|
||||||
@ -41,7 +59,7 @@ namespace RaceLapTimer
|
|||||||
new FormsAuthenticationConfiguration()
|
new FormsAuthenticationConfiguration()
|
||||||
{
|
{
|
||||||
RedirectUrl = "~/login",
|
RedirectUrl = "~/login",
|
||||||
UserMapper = requestContainer.Resolve<IUserMapper>(),
|
UserMapper = requestContainer.Get<IUserMapper>(),
|
||||||
};
|
};
|
||||||
|
|
||||||
FormsAuthentication.Enable(pipelines, formsAuthConfiguration);
|
FormsAuthentication.Enable(pipelines, formsAuthConfiguration);
|
||||||
|
|||||||
22
RaceLapTimer/RaceLapTimer/ConfigFilePathProvider.cs
Normal file
22
RaceLapTimer/RaceLapTimer/ConfigFilePathProvider.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Interfaces;
|
||||||
|
|
||||||
|
namespace RaceLapTimer
|
||||||
|
{
|
||||||
|
class ConfigFilePathProvider : IConfigFilePathProvider
|
||||||
|
{
|
||||||
|
public string GetPath
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().CodeBase), "Configs")).LocalPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
4
RaceLapTimer/RaceLapTimer/Configs/NinjectConfig.xml
Normal file
4
RaceLapTimer/RaceLapTimer/Configs/NinjectConfig.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<module name="mainAppModules">
|
||||||
|
<bind service="Interfaces.ILoggerService, Interfaces" to="NLogLogger.NLogLoggingService, NLogLogger" scope="singleton" />
|
||||||
|
</module>
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Interfaces;
|
||||||
|
using Ninject;
|
||||||
|
|
||||||
|
namespace RaceLapTimer.Extensions.Notifications
|
||||||
|
{
|
||||||
|
class ContainerHelper : IContainerHelper
|
||||||
|
{
|
||||||
|
private IKernel _container;
|
||||||
|
public ContainerHelper(IKernel container)
|
||||||
|
{
|
||||||
|
_container = container;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegisterType(Type typeToBindTo, Type typeBeingBound, string uniqueName)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(uniqueName))
|
||||||
|
{
|
||||||
|
_container.Bind(typeToBindTo).To(typeBeingBound);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_container.Bind(typeToBindTo).To(typeBeingBound).Named(uniqueName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T Get<T>()
|
||||||
|
{
|
||||||
|
return _container.Get<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<T> GetAll<T>()
|
||||||
|
{
|
||||||
|
return _container.GetAll<T>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,112 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Interfaces;
|
||||||
|
|
||||||
|
namespace RaceLapTimer.Extensions.Notifications
|
||||||
|
{
|
||||||
|
class NotificationManager : INotifierManager
|
||||||
|
{
|
||||||
|
private readonly List<INotifierProvider> _providers;
|
||||||
|
public NotificationManager(IPluginPathProvider pluginPath, IContainerHelper helper)
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(pluginPath.GetPluginPath)) return;
|
||||||
|
var files = Directory.GetFiles(pluginPath.GetPluginPath);
|
||||||
|
|
||||||
|
foreach (var file in files)
|
||||||
|
{
|
||||||
|
var ext = Path.GetExtension(file);
|
||||||
|
if (!IsAssembly(ext)) continue;
|
||||||
|
|
||||||
|
var assembly = Assembly.LoadFrom(file); //need to use ReflectionOnlyLoadFrom rather than LoadFrom here, this will cause exception if another extension point is implemented
|
||||||
|
var pluginTypes = (from t in assembly.GetExportedTypes()
|
||||||
|
where t.GetInterfaces().Any(x=>x.Name==nameof(INotifierProviderFactory))
|
||||||
|
select t).ToList();
|
||||||
|
if (pluginTypes.Any())
|
||||||
|
{
|
||||||
|
helper.RegisterType(typeof(INotifierProviderFactory), pluginTypes.First(), Path.GetFileNameWithoutExtension(file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var providerFactories = helper.GetAll<INotifierProviderFactory>().ToList();
|
||||||
|
_providers = new List<INotifierProvider>();
|
||||||
|
foreach (var factory in providerFactories)
|
||||||
|
{
|
||||||
|
_providers.Add(factory.CreateProvider());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<string> GetAvailableNotifiers()
|
||||||
|
{
|
||||||
|
return _providers.Select(provider => provider.GetDisplayName()).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceStarted(NotificationEventArgs args)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (var provider in _providers)
|
||||||
|
{
|
||||||
|
//provider.NotifyRaceStarted(args);
|
||||||
|
Task.Factory.StartNew(() => { provider.NotifyRaceStarted(args); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceStarting(NotificationEventArgs args)
|
||||||
|
{
|
||||||
|
foreach (var provider in _providers)
|
||||||
|
{
|
||||||
|
Task.Factory.StartNew(() => provider.NotifyRaceStarting(args));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceLapEvent(NotificationEventArgs args, Pilot pilot)
|
||||||
|
{
|
||||||
|
foreach (var provider in _providers)
|
||||||
|
{
|
||||||
|
Task.Factory.StartNew(() => provider.NotifyRaceLapEvent(args, pilot));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceWinner(NotificationEventArgs args, Pilot pilot)
|
||||||
|
{
|
||||||
|
foreach (var provider in _providers)
|
||||||
|
{
|
||||||
|
Task.Factory.StartNew(() => provider.NotifyRaceWinner(args, pilot));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceFinished(NotificationEventArgs args)
|
||||||
|
{
|
||||||
|
foreach (var provider in _providers)
|
||||||
|
{
|
||||||
|
Task.Factory.StartNew(() => provider.NotifyRaceFinished(args));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsAssembly(string extension)
|
||||||
|
{
|
||||||
|
var validAssemblyExts = new List<string>
|
||||||
|
{
|
||||||
|
"dll", "exe"
|
||||||
|
};
|
||||||
|
var ext = extension.Remove(0, 1);
|
||||||
|
if (validAssemblyExts.Contains(ext))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
RaceLapTimer/RaceLapTimer/PluginPathProvider.cs
Normal file
18
RaceLapTimer/RaceLapTimer/PluginPathProvider.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using Interfaces;
|
||||||
|
|
||||||
|
namespace RaceLapTimer
|
||||||
|
{
|
||||||
|
public class PluginPathProvider : IPluginPathProvider
|
||||||
|
{
|
||||||
|
public string GetPluginPath
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().CodeBase), "plugins")).LocalPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1
RaceLapTimer/RaceLapTimer/Plugins/placeholder.txt
Normal file
1
RaceLapTimer/RaceLapTimer/Plugins/placeholder.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
||||||
@ -55,6 +55,10 @@
|
|||||||
<HintPath>..\packages\Nancy.Authentication.Forms.1.4.1\lib\net40\Nancy.Authentication.Forms.dll</HintPath>
|
<HintPath>..\packages\Nancy.Authentication.Forms.1.4.1\lib\net40\Nancy.Authentication.Forms.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Nancy.Bootstrappers.Ninject, Version=1.4.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Nancy.Bootstrappers.Ninject.1.4.1\lib\net40\Nancy.Bootstrappers.Ninject.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Nancy.Owin, Version=1.4.1.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Nancy.Owin, Version=1.4.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Nancy.Owin.1.4.1\lib\net40\Nancy.Owin.dll</HintPath>
|
<HintPath>..\packages\Nancy.Owin.1.4.1\lib\net40\Nancy.Owin.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
@ -67,6 +71,18 @@
|
|||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Ninject, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Ninject.3.2.0.0\lib\net45-full\Ninject.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Ninject.Extensions.ChildKernel, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Ninject.Extensions.ChildKernel.3.2.0.0\lib\net45-full\Ninject.Extensions.ChildKernel.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Ninject.Extensions.Xml, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Ninject.Extensions.Xml.3.2.0.0\lib\net45-full\Ninject.Extensions.Xml.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
@ -106,6 +122,9 @@
|
|||||||
<Compile Include="ApiControllers\SoundApiModule.cs" />
|
<Compile Include="ApiControllers\SoundApiModule.cs" />
|
||||||
<Compile Include="ApiControllers\SystemApiModule.cs" />
|
<Compile Include="ApiControllers\SystemApiModule.cs" />
|
||||||
<Compile Include="AuthenticationBootstrapper.cs" />
|
<Compile Include="AuthenticationBootstrapper.cs" />
|
||||||
|
<Compile Include="ConfigFilePathProvider.cs" />
|
||||||
|
<Compile Include="Extensions\Notifications\ContainerHelper.cs" />
|
||||||
|
<Compile Include="Extensions\Notifications\NotificationManager.cs" />
|
||||||
<Compile Include="Modules\HistoryModule.cs" />
|
<Compile Include="Modules\HistoryModule.cs" />
|
||||||
<Compile Include="ApiControllers\InfoApiModule.cs" />
|
<Compile Include="ApiControllers\InfoApiModule.cs" />
|
||||||
<Compile Include="Modules\LoginModule.cs" />
|
<Compile Include="Modules\LoginModule.cs" />
|
||||||
@ -119,6 +138,7 @@
|
|||||||
<Compile Include="Modules\UserModule.cs" />
|
<Compile Include="Modules\UserModule.cs" />
|
||||||
<Compile Include="NancyRootPathProvider.cs" />
|
<Compile Include="NancyRootPathProvider.cs" />
|
||||||
<Compile Include="NancyUser.cs" />
|
<Compile Include="NancyUser.cs" />
|
||||||
|
<Compile Include="PluginPathProvider.cs" />
|
||||||
<Compile Include="RaceLapTimer.cs">
|
<Compile Include="RaceLapTimer.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@ -172,6 +192,12 @@
|
|||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Content Include="Configs\NinjectConfig.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="Plugins\placeholder.txt">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="www\images\pilotPic.png">
|
<Content Include="www\images\pilotPic.png">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
|||||||
@ -10,8 +10,12 @@
|
|||||||
<package id="Microsoft.Owin.Hosting" version="3.1.0" targetFramework="net452" />
|
<package id="Microsoft.Owin.Hosting" version="3.1.0" targetFramework="net452" />
|
||||||
<package id="Nancy" version="1.4.3" targetFramework="net452" />
|
<package id="Nancy" version="1.4.3" targetFramework="net452" />
|
||||||
<package id="Nancy.Authentication.Forms" version="1.4.1" targetFramework="net452" />
|
<package id="Nancy.Authentication.Forms" version="1.4.1" targetFramework="net452" />
|
||||||
|
<package id="Nancy.Bootstrappers.Ninject" version="1.4.1" targetFramework="net452" />
|
||||||
<package id="Nancy.Owin" version="1.4.1" targetFramework="net452" />
|
<package id="Nancy.Owin" version="1.4.1" targetFramework="net452" />
|
||||||
<package id="Nancy.Viewengines.Razor" version="1.4.3" targetFramework="net452" />
|
<package id="Nancy.Viewengines.Razor" version="1.4.3" targetFramework="net452" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" />
|
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" />
|
||||||
|
<package id="Ninject" version="3.2.0.0" targetFramework="net452" />
|
||||||
|
<package id="Ninject.Extensions.ChildKernel" version="3.2.0.0" targetFramework="net452" />
|
||||||
|
<package id="Ninject.Extensions.Xml" version="3.2.0.0" targetFramework="net452" />
|
||||||
<package id="Owin" version="1.0" targetFramework="net452" />
|
<package id="Owin" version="1.0" targetFramework="net452" />
|
||||||
</packages>
|
</packages>
|
||||||
@ -24,6 +24,14 @@
|
|||||||
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Ninject.Extensions.ChildKernel" publicKeyToken="c7192dc5380945e7" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
</configuration>
|
</configuration>
|
||||||
@ -72,10 +72,18 @@
|
|||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\NLogLogger\NLogLogger.csproj">
|
||||||
|
<Project>{9a93a12f-7591-406a-a4f3-41aa8299c4b4}</Project>
|
||||||
|
<Name>NLogLogger</Name>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\RaceLapTimer\RaceLapTimer.csproj">
|
<ProjectReference Include="..\RaceLapTimer\RaceLapTimer.csproj">
|
||||||
<Project>{85A3CC28-096C-40A6-8C67-3AADE40EDF32}</Project>
|
<Project>{85A3CC28-096C-40A6-8C67-3AADE40EDF32}</Project>
|
||||||
<Name>RaceLapTimer</Name>
|
<Name>RaceLapTimer</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\UdpNotifier\UdpNotifier.csproj">
|
||||||
|
<Project>{734097b0-a764-40ad-957a-43fe4f085b65}</Project>
|
||||||
|
<Name>UdpNotifier</Name>
|
||||||
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="..\packages\Nancy.Viewengines.Razor.1.4.3\build\Nancy.ViewEngines.Razor.targets" Condition="Exists('..\packages\Nancy.Viewengines.Razor.1.4.3\build\Nancy.ViewEngines.Razor.targets')" />
|
<Import Project="..\packages\Nancy.Viewengines.Razor.1.4.3\build\Nancy.ViewEngines.Razor.targets" Condition="Exists('..\packages\Nancy.Viewengines.Razor.1.4.3\build\Nancy.ViewEngines.Razor.targets')" />
|
||||||
@ -85,6 +93,10 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\packages\Nancy.Viewengines.Razor.1.4.3\build\Nancy.ViewEngines.Razor.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Nancy.Viewengines.Razor.1.4.3\build\Nancy.ViewEngines.Razor.targets'))" />
|
<Error Condition="!Exists('..\packages\Nancy.Viewengines.Razor.1.4.3\build\Nancy.ViewEngines.Razor.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Nancy.Viewengines.Razor.1.4.3\build\Nancy.ViewEngines.Razor.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
|
<PropertyGroup>
|
||||||
|
<PostBuildEvent>copy /B /Y "$(TargetDir)UdpNotifier.dll" "$(TargetDir)Plugins\UdpNotifier.dll"
|
||||||
|
copy /B /Y "$(TargetDir)NLogConfig.xml" "$(TargetDir)Configs\NLogConfig.xml"</PostBuildEvent>
|
||||||
|
</PropertyGroup>
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- 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.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
|
|||||||
36
RaceLapTimer/UdpNotifier/Properties/AssemblyInfo.cs
Normal file
36
RaceLapTimer/UdpNotifier/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("UdpNotifier")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("UdpNotifier")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("734097b0-a764-40ad-957a-43fe4f085b65")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
61
RaceLapTimer/UdpNotifier/UdpNotifier.csproj
Normal file
61
RaceLapTimer/UdpNotifier/UdpNotifier.csproj
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{734097B0-A764-40AD-957A-43FE4F085B65}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>UdpNotifier</RootNamespace>
|
||||||
|
<AssemblyName>UdpNotifier</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
</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.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="UdpNotifierProviderFactory.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="UdpNotifierProvider.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Interfaces\Interfaces.csproj">
|
||||||
|
<Project>{5C6DCC59-19F3-46AD-A479-926610F36257}</Project>
|
||||||
|
<Name>Interfaces</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\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>
|
||||||
|
-->
|
||||||
|
</Project>
|
||||||
63
RaceLapTimer/UdpNotifier/UdpNotifierProvider.cs
Normal file
63
RaceLapTimer/UdpNotifier/UdpNotifierProvider.cs
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Text;
|
||||||
|
using Interfaces;
|
||||||
|
|
||||||
|
namespace UdpNotifier
|
||||||
|
{
|
||||||
|
public class UdpNotifierProvider:INotifierProvider
|
||||||
|
{
|
||||||
|
private ILoggerService _logger;
|
||||||
|
|
||||||
|
public UdpNotifierProvider(ILoggerService logger)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
public string GetDisplayName()
|
||||||
|
{
|
||||||
|
return "UDP Notifier";
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetNotifierType()
|
||||||
|
{
|
||||||
|
return "UdpNotifierProvider";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceStarted(NotificationEventArgs args)
|
||||||
|
{
|
||||||
|
_logger.Trace("Sending RaceStartedNotification");
|
||||||
|
Send();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceStarting(NotificationEventArgs args)
|
||||||
|
{
|
||||||
|
Send();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceLapEvent(NotificationEventArgs args, Pilot pilot)
|
||||||
|
{
|
||||||
|
Send();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceWinner(NotificationEventArgs args, Pilot pilot)
|
||||||
|
{
|
||||||
|
Send();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyRaceFinished(NotificationEventArgs args)
|
||||||
|
{
|
||||||
|
Send();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Send()
|
||||||
|
{
|
||||||
|
var endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.94"), 64000);
|
||||||
|
var client = new UdpClient(endpoint);
|
||||||
|
var ip = new IPEndPoint(IPAddress.Broadcast, 15000);
|
||||||
|
var bytes = Encoding.ASCII.GetBytes("Foo");
|
||||||
|
client.Send(bytes, bytes.Length, ip);
|
||||||
|
client.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
RaceLapTimer/UdpNotifier/UdpNotifierProviderFactory.cs
Normal file
28
RaceLapTimer/UdpNotifier/UdpNotifierProviderFactory.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Interfaces;
|
||||||
|
|
||||||
|
namespace UdpNotifier
|
||||||
|
{
|
||||||
|
public class UdpNotifierProviderFactory : INotifierProviderFactory
|
||||||
|
{
|
||||||
|
private ILoggerService _logger;
|
||||||
|
|
||||||
|
public UdpNotifierProviderFactory(ILoggerService logger)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public INotifierProvider CreateProvider()
|
||||||
|
{
|
||||||
|
return new UdpNotifierProvider(_logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
public new string GetType()
|
||||||
|
{
|
||||||
|
return "UdpNotifierProviderFactory";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user